在带内而不是在 SDP 中发送 sprop 参数集

问题描述

我正在尝试使用 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 (将#修改为@)