web-dev-qa-db-ja.com

GstreamerでMP4ビデオファイルをストリーミング

私は初めて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

ビデオをストリーミングできませんでした。

誰かが私を導くことができますか、データを送信するときにこのシナリオでデコードおよびエンコード操作を行う必要があるのはなぜですか?これらの操作を使用せずにデータを送信できる方法はありますか。

ありがとう。

10
Pratyush Kulwal

デコードと再エンコードは必要ありません。あなたが求めている要素はデマルチプレクサであり、この場合は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
5
Hannes R.