
私は 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