RTP ストリームで PPS と SPS を使用して ffmpeg ストリーム h264 を作成する方法

RTP ストリームで PPS と SPS を使用して ffmpeg ストリーム h264 を作成する方法

私は ffmpeg を使用して RTSP 経由で h264 ストリームを受信し、そのストリームをマルチキャスト rtp ストリームとして転送しようとしています。次のコマンドを使用して、ストリームを受信し、マルチキャスト rtp ストリームとして出力できます。 ffmpeg -i rtsp://10.255.11.203/ProfileToken_1_1 -vcodec copy -an -f rtp rtp://230.255.10.25:50000

受信ストリームには SPS PPS および SEI パケットが含まれています。ffmpeg でこれらも出力できません。

グローバル ヘッダーを有効または無効にするパラメーターを試してみましたが、着信ストリームがすでに Annex-B であるため、機能しないもの-flags global_headerを追加しようとしました。-bsf h264_mp4toannexb

答え1

着信ストリームにはそれらが含まれていますか、それとも必要なかっただけですか?

RTSP 経由でストリームを受信して​​いる場合は、おそらくこれらのパケットを含まない RTP ストリームを受信して​​いることになります。解像度やフレームレートなどを変更しない限り、PPS と SPS は通常ストリームごとに 1 回であるため、クライアントは RTCP 経由で接続して、これらのストリームを記述する SDP を取得します。

これまで実行してきたコマンドを実行すると、ffmpeg の出力に次のようなセクションが表示されます。

SDP:
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 239.100.200.100
t=0 0
a=tool:libavformat 56.40.101
m=video 10000 RTP/AVP 96
b=AS:3027
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAM6xyBEB4AiflwEQAAAMABAAAAwDAPGDGEYA=,aOhDssiw; profile-level-id=640033

SDP 行の後のすべては、filename.sdp に保存する必要があります。ストリームに接続するには、ファイルを開くだけです。

ffplay -i filename.sdp

ファイルをサーバーに置くと、次のアドレスが開かれる可能性があります。

ffplay -i http://yourhost/filename.sdp

関連情報