
D-Robotics RDK X3 入門 (8) - ビデオストリーム
「RDK X3」の「ビデオストリーム」についてまとめました。
・Basic Application Development - Multimedia Application - Reference Examples (python)
前回
1. ビデオストリーム
1-1. ビデオストリーム
サンプルコードは、「/app/pydev_demo/08_decode_rtsp_stream/」にあります。
(1) OpenCVでRTSPストリームを開き、ストリームデータを取得。
(2) ビデオデコードインターフェイスを使用してストリームをデコード。
(3) デコードされたビデオを HDMI を使用して表示。
1-2. 実行手順
この例では、RTSPストリームを実行する必要があります。ユーザーがRTSPストリーミングサービスを設定できない場合は、システムにプレインストールされているストリーミングサービスを使用できます。このサービスは、1080P_test.h264 ビデオ ファイルを、URL「rtsp://127.0.0.1/1080P_test.h264」 の RTSPストリームに変換します。
(1) ストリーミングサービスを開始。
cd /app/pydev_demo/08_decode_rtsp_stream/
sudo ./live555MediaServer &
サービスが正常に開始されると、ログの最後の行に「ポート 80 を使用します」と表示され、RTSPサービスがポート 80 で実行されていることを示します。ポート 8000 および 8080 で実行される場合もあります。後で RTSP URL を設定する場合、実際に使用されるポート番号に応じて変更する必要があります。
root@ubuntu:/app/pydev_demo/08_decode_rtsp_stream#
LIVE555 Media Server version 1.01 (LIVE555 Streaming Media library version 2020.07.09).
Play streams from this server using the URL
rtsp://192.168.1.10/<filename>
where <filename> is a file present in the current directory.
...
...
(We use port 80 for optional RTSP-over-HTTP tunneling, or for HTTP live streaming (for indexed Transport Stream files only).)
(2) 「./decode_rtsp_stream.py」を実行して、ストリーミングデコードプログラムを開始。
URL、解像度、フレーム レート、その他の情報がコンソール出力に表示されます。ログは次のようになります。
root@ubuntu:/app/pydev_demo/08_decode_rtsp_stream# ./decode_rtsp_stream.py
['rtsp://127.0.0.1/1080P_test.h264']
RTSP stream frame_width:1920, frame_height:1080
Decoder(0, 1) return:0 frame count: 0
Camera vps return:0
Decode CHAN: 0 FPS: 30.34
Display FPS: 31.46
Decode CHAN: 0 FPS: 25.00
Display FPS: 24.98RTSP stream frame_width:1920, frame_height:1080
最後に、ビデオストリームはHDMIインターフェイス経由で出力され、ユーザーはモニターを通じてビデオ画像をプレビューできます。
1-3. パラメータ
「decode_rtsp_stream.py」は、パラメータを変更することで、RTSPアドレスの設定、HDMI出力の切り替え、AI 推論の切り替えなどの機能を変更できます。
パラメータは、次のとおりです。
・-u : RTSPネットワークアドレスを設定します。「-u "rtsp://127.0.0.1/1080P_test.h264;rtsp://192.168.1.10:8000/1080P_test.h264"」のような複数のアドレス入力をサポートします。
・-d : HDMI ディスプレイ出力をオンまたはオフにします。設定されていない場合、表示はデフォルトで有効になります。 -d 0 は表示を無効にします。複数のストリームをデコードする場合、最初のストリームのビデオのみが表示されます。
・-a : AIアルゴリズム推論機能をオンまたはオフにします。設定されていない場合、アルゴリズムはデフォルトで無効になります。 -a はアルゴリズム推論を有効にし、ターゲット検出アルゴリズムを実行します。
一般的な起動方法は、次のとおりです。
・デフォルトのストリームをデコードしHDMI表示を有効
sudo ./decode_rtsp_stream.py
・デフォルトのストリームをデコードしHDMI表示を無効
sudo ./decode_rtsp_stream.py -d 0
・単一のRTSPストリームをデコード
sudo ./decode_rtsp_stream.py -u "rtsp://x.x.x.x/xxx"
・複数のRTSPストリームをデコード
sudo ./decode_rtsp_stream.py -u "rtsp://x.x.x.x/xxx;rtsp://x.x.x.x/xxx"
・デフォルトのストリームをデコードしAI 推論を有効
sudo ./decode_rtsp_stream.py -a
1-4. 注意事項
・ストリーミングサーバによってプッシュされるRTSPストリームには、PPS および SPS パラメータ情報が含まれている必要があります。そうでない場合、「RDK X3」でデコード異常が発生します。エラー メッセージは次のようになります。

・ffmpeg を使用して .mp4、.avi などの形式のビデオファイルをストリーミング用に開く場合、ストリームの PPS および SPS 情報を追加するために -vbsf h264_mp4toannexb オプションを追加する必要があります。
ffmpeg -re -stream_loop -1 -i xxx.mp4 -vcodec copy -vbsf h264_mp4toannexb -f rtsp rtsp://192.168.1.195:8554/h264_stream
・RTSP ビデオ ストリームは現在 1080p 解像度のみをサポートしています。
・VLC ソフトウェアは PPS および SPS 情報の追加をサポートしていないため、RTSP ストリーミングに VLC ソフトウェアを使用することはサポートされていません。
2. libsrcampy
「RDK X3」のUbuntuシステムには、画像マルチメディアモジュール「libsrcampy」の Python版がプリインストールされており、カメラ、エンコード、デコード、表示などの複数のオブジェクトを作成して、カメラ画像の収集、画像処理、ビデオなどの機能を実行できます。
モジュールの基本的な使い方は次のとおりです。
from hobot_vio import libsrcampy
#create camera object
camera = libsrcampy.Camera()
#create encode object
encode = libsrcampy.Encode()
#create decode object
decode = libsrcampy.Decode()
#create display object
display = libsrcampy.Display()