如何在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 輸出這些。

我已經嘗試過-flags global_header啟用和停用全域標頭的參數,並且我嘗試添加-bsf h264_mp4toannexb不起作用,因為傳入流已經是附件 B。

答案1

傳入流是否包含它們,或者只是不需要它們?

如果您透過 RTSP 接收流,則您可能接收到的 RTP 流不包含這些資料包。您的用戶端將透過 RTCP 連線以取得描述這些串流的 SDP,因為 PPS 和 SPS 通常每個串流一次,除非您變更解析度、幀速率等。

運行您一直在運行的命令,但在 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

相關內容