我们正在寻求帮助来调试与将加密的 HLS 转换为 UDP 输出相关的问题。如果我们下载加密的 HLS 内容,然后将其转换为 UDP,效果很好。但如果我们直接将加密的 HLS 转换为 UDP,例如,
ffmpeg -re -i $1 -c 复制 -f mpegts "udp://238.5.6.35:7409?pkt_size=1316&localaddr=192.168.0.35" -v 调试
使用上述命令,UDP 输出存在时间问题。当我们分析 UDP 输出时,错误与 PCR 有关,不同表的部分之间的长度太长。
我们尝试通过添加缓冲区(如 -max_delay 5000000)来修复,但没有成功。VLC 与加密 HLS 配合良好。任何线索都会对我们有所帮助。
答案1
你需要确保 FFmpeg 的mpegts复用器在输出端实现以下目标:
- 真正的 CBR(恒定比特率)输出。
- 固定有效载荷大小不超过 MTU 大小。
为了实现恒定的比特率输出,请设置:
(a). mpegts 的私有复用器选项值为pcr_period
20。
(b). 私有复用器选项muxrate
,其必须足够大,以补偿输出中的所有流变体,包括任何复用器开销。
(c)该bitrate
参数应添加到UDP协议字符串中,设置后,必须等于-muxrate
参数值。
对于固定有效载荷大小,请确保:
(a)。设置的值是最接近 188 字节的倍数,适合标准 1500 MTU 大小,即 1316(188x7),通过 UDP 协议私有选项,pkt_size=1316
如上所示。
(b). 输出选项-flush_packets 0
设置据记载。
使用上面的示例,经过上述更改的示例命令将如下所示:
ffmpeg -re -i $1 -c copy -flush_packets 0 -f mpegts -pcr_period 20 -muxrate 5550k "udp://238.5.6.35:7409?pkt_size=1316&bitrate=5550000&localaddr=192.168.0.35" -v debug
记录下发的-muxrate
值并进行必要的调整,以确保其符合 1(b) 中的要求,否则输出可能无效,并出现 DTS 和 PCR 错误运行时遇到。
暗示:您也可以首先重新测试省略-muxrate
的参数,其他所有参数保持不变:
ffmpeg -re -i $1 -c copy -flush_packets 0 -f mpegts -pcr_period 20 "udp://238.5.6.35:7409?pkt_size=1316&localaddr=192.168.0.35" -v debug
为了验证工作流程,-muxrate
稍后使用来自控制台输出的 FFmpeg 比特率提示作为起点添加和比特率值。