仕事柄、SMPTE2110をちょっと触っているので、
NMOSもやらざるをえず。。。。
RDSサーバが必要なので自前で立ててみようかと。
検証でよく使われているそうなのでこれを使ってみます。
https://github.com/sony/nmos-cpp
Hyper-Vのクイック作成を使ってUbuntu20.04作ったので、
最小構成だとほかにもインストールしないといけないものがあるかもしれません。。。
(あたりまでだけど仮想スイッチでも問題ないです)
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.4 LTS Release: 20.04 Codename: focal
さて必要なものをざっくりインストールしていきます。
$ sudo apt-get update $ sudo apt-get install build-essential g++ libcpprest-dev libc6 libavahi-compat-libdnssd-dev libnss-mdns avahi-utils git
ドキュメントをみるとconanを使ったほうが楽そうなので・・・
$ sudo apt-get install pip $ pip install conan
*注意*
conan2系だとcmake時に以下のようなエラーを吐きます。
ERROR: Error while parsing [options] in conanfile Options should be specified as 'pkg:option=value'
その場合は、強制的に1系をインストールしてください。
$ pip install --force-reinstall -v "conan==1.59.0"
cmake 3.17以上を要求されるので、チェック。
$ cmake --version cmake version 3.16
今回はcmakeが古いので新しいものを使わせてもらいます
https://apt.kitware.com/
$ wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null $ sudo echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ focal main' | sudo tee /etc/apt/sources.list.d/kitware.list >/dev/null $ sudo cat /etc/apt/sources.list.d/kitware.list deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ focal main $ $ sudo apt-get update $ sudo apt-get install cmake $ $ cmake --version cmake version 3.22.2
これでコンパイルできる環境ができたので
Gitからソースを持ってきます
$ git clone https://github.com/sony/nmos-cpp $ cd nmos-cpp/Development/ $ mkdir build $ cd build/
ここからエラーがでないことを祈ります。(DebugとReleaseの違いがよくわかってないです)
$ cmake .. -DCMAKE_BUILD_TYPE="Release" $ make
うまくいったら、
nmos-cpp-registry
nmos-cpp-node
nmos-cpp-test
ができているはず
$ ls -l total 696448 -rw-rw-r-- 1 nmos nmos 20686 2月 21 21:29 CMakeCache.txt drwxrwxr-x 14 nmos nmos 4096 2月 21 21:34 CMakeFiles -rw-rw-r-- 1 nmos nmos 363 2月 21 21:29 CTestTestfile.cmake -rw-rw-r-- 1 nmos nmos 8097 2月 21 21:29 FindBZip2.cmake -rw-rw-r-- 1 nmos nmos 205169 2月 21 21:29 FindBoost.cmake -rw-rw-r-- 1 nmos nmos 17662 2月 21 21:29 FindOpenSSL.cmake -rw-rw-r-- 1 nmos nmos 7670 2月 21 21:29 FindZLIB.cmake -rw-rw-r-- 1 nmos nmos 33616 2月 21 21:29 Findcpprestsdk.cmake -rw-rw-r-- 1 nmos nmos 8440 2月 21 21:29 Findlibbacktrace.cmake -rw-rw-r-- 1 nmos nmos 8377 2月 21 21:29 Findnlohmann_json.cmake -rw-rw-r-- 1 nmos nmos 10491 2月 21 21:29 Findnlohmann_json_schema_validator.cmake -rw-rw-r-- 1 nmos nmos 8887 2月 21 21:29 Findwebsocketpp.cmake -rw-rw-r-- 1 nmos nmos 485454 2月 21 21:29 Makefile drwxrwxr-x 2 nmos nmos 4096 2月 21 21:29 cmake -rw-rw-r-- 1 nmos nmos 18130 2月 21 21:29 cmake_install.cmake -rw-rw-r-- 1 nmos nmos 36138 2月 21 21:28 conan.cmake -rw-rw-r-- 1 nmos nmos 14714 2月 21 21:29 conan.lock -rw-rw-r-- 1 nmos nmos 133733 2月 21 21:29 conanbuildinfo.cmake -rw-rw-r-- 1 nmos nmos 14467 2月 21 21:29 conanbuildinfo.txt -rw-rw-r-- 1 nmos nmos 4936 2月 21 21:29 conaninfo.txt -rw-rw-r-- 1 nmos nmos 6111 2月 21 21:29 graph_info.json -rw-rw-r-- 1 nmos nmos 5406934 2月 21 21:29 libmdns.a -rw-rw-r-- 1 nmos nmos 364172150 2月 21 21:33 libnmos-cpp.a -rw-rw-r-- 1 nmos nmos 730162 2月 21 21:29 libnmos_is04_schemas.a -rw-rw-r-- 1 nmos nmos 261604 2月 21 21:29 libnmos_is05_schemas.a -rw-rw-r-- 1 nmos nmos 95516 2月 21 21:29 libnmos_is08_schemas.a -rw-rw-r-- 1 nmos nmos 18480 2月 21 21:29 libnmos_is09_schemas.a drwxrwxr-x 6 nmos nmos 4096 2月 21 21:29 nmos -rwxrwxr-x 1 nmos nmos 150394504 2月 21 21:34 nmos-cpp-node -rwxrwxr-x 1 nmos nmos 108489296 2月 21 21:34 nmos-cpp-registry -rwxrwxr-x 1 nmos nmos 82435728 2月 21 21:34 nmos-cpp-test -rw-rw-r-- 1 nmos nmos 259 2月 21 21:29 nmos-cpp-test_include-98ee88c.cmake -rw-rw-r-- 1 nmos nmos 18886 2月 21 21:34 nmos-cpp-test_tests-98ee88c.cmake
ノードを起動する場合
$ ./nmos-cpp-node "{\"http_port\":1080}
RDSを起動する場合
$ ./nmos-cpp-registry "{\"http_port\":8080}"
このままインストールしたいなら
$ make install
jsonで設定ができるので以下を参考に。
https://github.com/sony/nmos-cpp/blob/master/Development/nmos-cpp-registry/config.json
https://github.com/sony/nmos-cpp/blob/master/Development/nmos-cpp-node/config.json
$ vi config.json { "logging_level": 0, "domain": "rds.local", "http_port": 8080 } $ $ ./nmos-cpp-registry config.json 2022-02-21 13:23:06.291: info: 140302025209344: Starting nmos-cpp registry 2022-02-21 13:23:06.291: info: 140302025209344: Process ID: 135622 2022-02-21 13:23:06.291: info: 140302025209344: Build settings: cpprestsdk/2.10.18 (listener=asio; client=asio); WebSocket++/0.8.2; Boost 1.78.0; OpenSSL 1.1.1m 14 Dec 2021 2022-02-21 13:23:06.291: info: 140302025209344: Initial settings: {"admin_port":8080,"domain":"rds.local","host_address":"10.255.1.7","host_addresses":["10.255.1.7"],"http_port":8080,"logging_level":0,"logging_port":8080,"mdns_port":8080,"node_port":8080,"query_port":8080,"registration_port":8080,"schemas_port":8080,"seed_id":"fc98eb7e-4af1-45e5-b697-12decb1b5c9e","settings_port":8080,"system_port":8080}
makeしたときにライブラリのリンクが見つからないときは、
CMakeFiles/HOGEHOGE.dir/link.txtを参照してみてください。
「/lib/x86_64-linux-gnu/libstdc++.so.6」が見つからないみたいなエラーが出たら
$ cat CMakeFiles/nmos-cpp-registry.dir/link.txt /usr/bin/gcc CMakeFiles/nmos-cpp-registry.dir/nmos-cpp-registry/main.cpp.o CMakeFiles/nmos-cpp-registry.dir/nmos-cpp-registry/registry_implementation.cpp.o -o nmos-cpp-registry /lib/x86_64-linux-gnu/libstdc++.so.6 libnmos-cpp.a libnmos_is04_schemas.a libnmos_is05_schemas.a libnmos_is08_schemas.a libnmos_is09_schemas.a libmdns.a /usr/lib/x86_64-linux-gnu/libdns_sd.so /usr/lib/x86_64-linux-gnu/libavahi-client.so /usr/lib/x86_64-linux-gnu/libavahi-common.so /usr/lib/x86_64-linux-gnu/libdbus-1.so /usr/lib/x86_64-linux-gnu/libcpprest.so.2.10 /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib/x86_64-linux-gnu/libcrypto.so /usr/lib/x86_64-linux-gnu/libboost_system.so.1.71.0 /usr/lib/x86_64-linux-gnu/libboost_date_time.so.1.71.0 /usr/lib/x86_64-linux-gnu/libboost_regex.so.1.71.0 /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.71.0 /usr/lib/x86_64-linux-gnu/libboost_atomic.so.1.71.0 -lpthread libjson_schema_validator.a -lresolv -lstdc++fs /lib/x86_64-linux-gnu/libm.so.6
「/lib/x86_64-linux-gnu/libm.so.6」が見つからないみたいなエラーが出たら
$ cat MakeFiles/nmos-cpp-test.dir/link.txt /usr/bin/gcc CMakeFiles/nmos-cpp-test.dir/nmos-cpp-test/main.cpp.o /lib/x86_64-linux-gnu/libstdc++.so.6 CMakeFiles/nmos-cpp-test.dir/cpprest/test/api_router_test.cpp.o CMakeFiles/nmos-cpp-test.dir/cpprest/test/http_utils_test.cpp.o CMakeFiles/nmos-cpp-test.dir/cpprest/test/json_utils_test.cpp.o CMakeFiles/nmos-cpp-test.dir/cpprest/test/json_visit_test.cpp.o CMakeFiles/nmos-cpp-test.dir/cpprest/test/regex_utils_test.cpp.o CMakeFiles/nmos-cpp-test.dir/cpprest/test/ws_listener_test.cpp.o CMakeFiles/nmos-cpp-test.dir/mdns/test/core_test.cpp.o CMakeFiles/nmos-cpp-test.dir/mdns/test/mdns_test.cpp.o CMakeFiles/nmos-cpp-test.dir/nmos/test/api_utils_test.cpp.o CMakeFiles/nmos-cpp-test.dir/nmos/test/channels_test.cpp.o CMakeFiles/nmos-cpp-test.dir/nmos/test/did_sdid_test.cpp.o CMakeFiles/nmos-cpp-test.dir/nmos/test/event_type_test.cpp.o CMakeFiles/nmos-cpp-test.dir/nmos/test/json_validator_test.cpp.o CMakeFiles/nmos-cpp-test.dir/nmos/test/paging_utils_test.cpp.o CMakeFiles/nmos-cpp-test.dir/nmos/test/query_api_test.cpp.o CMakeFiles/nmos-cpp-test.dir/nmos/test/sdp_utils_test.cpp.o CMakeFiles/nmos-cpp-test.dir/nmos/test/system_resources_test.cpp.o CMakeFiles/nmos-cpp-test.dir/rql/test/rql_test.cpp.o CMakeFiles/nmos-cpp-test.dir/sdp/test/sdp_test.cpp.o -o nmos-cpp-test libnmos-cpp.a libmdns.a /usr/lib/x86_64-linux-gnu/libdns_sd.so /usr/lib/x86_64-linux-gnu/libavahi-client.so /usr/lib/x86_64-linux-gnu/libavahi-common.so /usr/lib/x86_64-linux-gnu/libdbus-1.so /usr/lib/x86_64-linux-gnu/libcpprest.so.2.10 /usr/lib/x86_64-linux-gnu/libboost_system.so.1.71.0 /usr/lib/x86_64-linux-gnu/libboost_date_time.so.1.71.0 /usr/lib/x86_64-linux-gnu/libboost_regex.so.1.71.0 /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.71.0 /usr/lib/x86_64-linux-gnu/libboost_atomic.so.1.71.0 -lpthread libnmos_is04_schemas.a libnmos_is05_schemas.a libnmos_is08_schemas.a libnmos_is09_schemas.a /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib/x86_64-linux-gnu/libcrypto.so libjson_schema_validator.a /lib/x86_64-linux-gnu/libm.so.6 -lresolv -lstdc++fs