如何在 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

相关内容