问题描述
我正在尝试使用 ffmpeg 通过 rtp 流式传输 MP4 文件。我将流发送到 SFU 服务器,该服务器将向用户广播流。客户端期望接收配置文件级别 ID 42e01f
的 h264 视频流。我遇到的问题是客户端接收的视频没有正确解码(只是黑屏)。如果我在发送之前对视频进行转码,则一切正常。如果我转储描述 ffmpeg 发送内容的 SDP,则转码和非转码版本之间存在明显差异。
对于非转码版本,我的 ffmpeg 命令看起来像
ffmpeg '-re' \
'-v' \
'info' \
'-protocol_whitelist' \
'pipe,tls,file,http,https,tcp,rtp' \
'-i' \
'-f' 'mp4' \
'https://storage.googleapis.com/my_bucket/file' \
'-map' \
'0:v:0' \
'-c:v' \
'copy' \
'-f' \
'rtp' \
'-sdp_file' 'out.sdp' \
'rtp://142.93.14.110:40425?rtcpport=45155'
当我运行此命令时,out.sdp 包含该行
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z0LAH9kAUAW7AWoCAgKAAAH0gABdwAeMGSQ=,aMuMsg==; profile-level-id=42C01F
但是,如果我将 -c:v copy
更改为 -c:v libx264 -preset ultrafast
,则 sdp 行更改为 a=fmtp:96 packetization-mode=1;
。鉴于 ffmpeg 和我的 SFU 之间没有 SDP 交换,我认为问题在于 ffmpeg 需要在带内发送 sprops,而不是在 sdp 中设置它们。这里的任何帮助都会很棒。另一个可能的问题是配置文件级别略有不同。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)