走ろうとしています。rtpbinの例GStream 1.18.5を含むUbuntu 21.10 VirtualBox VM。
- GStreamerを設定してたくさん実行できました基本的なそして遊ぶマップ時間。
- 私も多くの部分を読んだ。アプリケーション開発者ハンドブック。
Cコードですべてを行うのは簡単に見えますが、rtpbin
例gst-launch-1.0
では(基本チュートリアルの一つ)。
rtpbin
最初は例がうまくいきませんでした。
ffenc_h263
とffdec_h263
(WARNING: erroneous pipeline: no element "ffenc_h263"
)なので、それぞれavenc_h263
とで置き換えました。avdec_h263
v4l2src
で利用できないデバイスを探していて、に/dev
切り替えましたvideotestsrc
。
これらの代替エントリが問題でないことを確認するために、RTSP および UDP エントリを削除し、次を実行して確認しました。
gst-launch-1.0 videotestsrc ! videoconvert ! avenc_h263 ! rtph263pay \
! rtph263depay ! avdec_h263 ! xvimagesink
そして「バー」のビデオを見ました。私も逃げた
gst-launch-1.0 audiotestsrc ! amrnbenc ! rtpamrpay ! rtpamrdepay ! amrnbdec ! alsasink
迷惑なテストトーンを聞いてください。これに基づいて、問題はUDPとRTSPにあると考えられています。
走る
gst-launch-1.0 rtpbin name=rtpbin \
videotestsrc ! videoconvert ! avenc_h263 ! rtph263pay ! rtpbin.send_rtp_sink_0 \
rtpbin.send_rtp_src_0 ! udpsink port=5000 \
rtpbin.send_rtcp_src_0 ! udpsink port=5001 sync=false async=false \
udpsrc port=5005 ! rtpbin.recv_rtcp_sink_0 \
audiotestsrc ! amrnbenc ! rtpamrpay ! rtpbin.send_rtp_sink_1 \
rtpbin.send_rtp_src_1 ! udpsink port=5002 \
rtpbin.send_rtcp_src_1 ! udpsink port=5003 sync=false async=false \
udpsrc port=5007 ! rtpbin.recv_rtcp_sink_1
プログラム
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
0:00:59.0 / 99:99:99 # This is counting up
その後、別のウィンドウで私は実行します。
gst-launch-1.0 rtpbin name=rtpbin \
udpsrc caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H263-1996" \
port=5000 ! rtpbin.recv_rtp_sink_0 \
rtpbin. ! rtph263depay ! avdec_h263 ! xvimagesink \
udpsrc port=5001 ! rtpbin.recv_rtcp_sink_0 \
rtpbin.send_rtcp_src_0 ! udpsink port=5005 sync=false async=false \
udpsrc caps="application/x-rtp,media=(string)audio,clock-rate=(int)8000,encoding-name=(string)AMR,encoding-params=(string)1,octet-align=(string)1" \
port=5002 ! rtpbin.recv_rtp_sink_1 \
rtpbin. ! rtpamrdepay ! amrnbdec ! alsasink \
udpsrc port=5003 ! rtpbin.recv_rtcp_sink_1 \
rtpbin.send_rtcp_src_1 ! udpsink port=5007 sync=false async=false
そして見なさい
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
一部のUDPポート(5000、5001、5002、5003、5005、および5007)が開いていると予想しました。もちろん、実行中のnetstat
ショーは次のとおりです。
rtsp@rtsp-VirtualBox:~$ sudo netstat -apn | grep -w 500[0-9]
udp 0 0 0.0.0.0:5000 0.0.0.0:* 7076/gst-launch-1.0
udp 0 0 0.0.0.0:5001 0.0.0.0:* 7076/gst-launch-1.0
udp 0 0 0.0.0.0:5002 0.0.0.0:* 7076/gst-launch-1.0
udp 0 0 0.0.0.0:5003 0.0.0.0:* 7076/gst-launch-1.0
udp 0 0 0.0.0.0:5005 0.0.0.0:* 6862/gst-launch-1.0
udp 0 0 0.0.0.0:5007 0.0.0.0:* 6862/gst-launch-1.0
すべてのポートが正しく機能していることを確認してください。
rtsp-test-server
スナップとVLCからインストールしました。- 付属のポートからビデオをストリーミングできます
rtsp-test-server
。私はUDPの代わりにTCPポートを使用しているので完全なテストではないようですが、テストするのは簡単だったので、試してみました。
しかし、私はどんな映像も見ることができず、どんな音も聞くことができませんでした。誰かが私の間違いを指摘できますか?
答え1
質問を提出する準備がほとんどなって再びインターネット検索をしました。私が見つけたこのチュートリアルudpsrc
要素に追加されたいくつかの追加フラグを表示しますudpsink
。次のフラグを追加すると、サンプルが機能し、RTSPを介してビデオを表示してサウンドを聞くことができます。
host=127.0.0.1
すべてのudpsink
要素にaddress=127.0.0.1
すべてのudpsource
要素に
そのチュートリアルに残された他のフラグはデフォルト値であると思います。