私は初めてgstreamerに取り組んでおり、Gstreamer(RTPおよびUDP)を使用してサーバーからクライアントにMP4ビデオファイルをストリーミングしようとしています。私が使おうとしているコマンドライン:
サーバー側:
gst-launch-1.0 -v filesrc location = file_name.mp4 ! decodebin ! x264enc ! rtph264pay ! udpsink Host=192.1XX.XX.XX port=9001
クライアント側:
gst-launch-1.0 -v udpsrc port=9001 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtpstreamdepay ! decodebin ! videoconvert ! autovideosink
ビデオを正常にストリーミングできます。ただし、サーバー側でdecodebin
およびx264enc
操作は必要ありません。そこで、これらの操作を削除し、サーバー側でこのコマンドラインを使用しました
gst-launch-1.0 -v filesrc location =file_name.MP4 ! rtpstreampay ! udpsink Host=192.1XX.XX.XX port=9001
ビデオをストリーミングできませんでした。
誰かが私を導くことができますか、データを送信するときにこのシナリオでデコードおよびエンコード操作を行う必要があるのはなぜですか?これらの操作を使用せずにデータを送信できる方法はありますか。
ありがとう。
デコードと再エンコードは必要ありません。あなたが求めている要素はデマルチプレクサであり、この場合はqtdemux
です。
ここにそのドキュメントからのクリップがあります:
QuickTimeファイルをオーディオおよびビデオストリームに逆多重化ISOベースメディアファイル形式のサポート(mp4、3gpp、qt、mj2)
ビデオコンテナを逆多重化して開き、エンコードされたビデオストリームをコンテナから直接読み取るだけで十分です。 mp4
コンテナには通常H.264
でエンコードされたビデオが含まれているため、サーバー側のパイプラインは次のように簡略化されます。
gst-launch-1.0 -v filesrc location = file_name.mp4 ! qtdemux ! video/x-h264 ! rtph264pay ! udpsink Host=192.1XX.XX.XX port=9001