我想获得一些关于 ffmpeg 转码并将其广播到 DVB-C 环境的建议。拥有一台基于 Linux 的服务器,以及基于 Nvidia P4000 的外部 GPU。这台机器的目标是在 HLS 上获取实时流,然后将文件转码为多播 UDP。转码后,多播 TS 到达接收器(Sumavision EMR 3.0),然后使用 QAM 卡调制成 DVB-C,以便下一次传输到光纤。
所以,有一个奇怪的麻烦。在 IPTV 中,这样的流没有明显的问题。分析 TS,发现 PCR 准确度的错误(>500 ms,因为伪 CBR)和非常罕见的不连续性错误,这可能是基于源错误。然后我把它带到 Sumavision 并应用入站参数(只需重新多路复用这个流,制作忠实的参考、缓冲区大小值和 CBR 输出值)。分析仪看不出问题,放入 QAM-modulator 后自定义输出流,如 PSI/SI 表、频率、符号率等。
在我在一些测试电视上看到结果之后。第一个显示这个通道很棒,没有明显的问题(没有人工制品,没有异步声音)。第二台电视有视频问题,看起来像丢帧。有时声音会中断一毫秒。但是没有出现卡顿 'ETR 101 290 顺利通过的原因,可能是该型号电视解码此服务不正确。视频记录示例在这里。
这是ffmpeg的代码。可能是,我错过了一些常用参数,这可能会使此类调谐器的输出更好。你能看出来没问题吗?
sudo -u nobody ffmpeg -threads 0 -v warning -re -hwaccel cuvid -hwaccel_device 2 -c:v h264_cuvid -deint 0 -i http://x.x.x.x/playlist.m3u8 -bsf:v h264_mp4toannexb -map 0:0 -map 0:1 -vcodec h264_nvenc -gpu 2 -cbr true -sc_threshold 0 -filter:v scale_npp=960:540:interp_algo=lanczos -vprofile baseline -b:v 1000k -bufsize 1400k -maxrate 1400k -minrate 900k -force_key_frames 1 -g 50 -bf 0 -refs 1 -r 25 -strict experimental -c:a aac -b:a 64K -af aresample=44100 -ac 2 -flags -global_header -f segment -segment_format mpegts -segment_time 10 /path1/segment-1507744758-%06d.ts -map 0:0 -map 0:1 -vcodec h264_nvenc -gpu 2 -cbr true -sc_threshold 0 -vprofile high -b:v 8000k -bufsize 400k -maxrate 9000k -minrate 7200k -force_key_frames 1 -g 50 -bf 2 -refs 1 -r 25 -strict experimental -c:a aac -b:a 192K -af aresample=44100 -ac 2 -flags -global_header -f tee
[f=segment:segment_format=mpegts:segment_time=10]/path2/segment-1507744758-%06d.ts|[f=mpegts:muxrate=9333k:mpegts_pmt_start_pid=0xB4A:mpegts_start_pid=0xB4B]'udp://y.y.y.y:1234?buffer_size=0&overrun_nonfatal_option=1&pkt_size=1316&ttl=15'