我正在使用静态TS(MPEG传输流(文件模拟一堆DASH和HLS直播流,这些文件被循环、打包并按如下方式提供:
cvlc --loop myfile.ts --> Shaka packager --> NGINX webserver
TS文件是使用ffmpeg
创建的,用于将输入的1080p内容(myfile.mov(转换为1个音频流和3个视频流:720p、480p和360p。对生成的文件进行了检查,以确保其构造正确。
CCD_ 2用于使TS循环;PTS为每个循环更新,使视频"看起来"逼真。
这是我的cvlc
命令:
cvlc myfile.ts --sout udp:127.0.0.1:9876 --repeat --loop --sout-all --sout-keep
我的问题是cvlc
是随机对视频PID进行重新编号和排序,因此打包程序无法将正确的分辨率放在正确的位置进行自适应流传输。
如何循环MPEG-TS并让cvlc
单独保留PID(或至少按数字顺序保留PID(,并在每个循环期间仅更新PCR/PTS/DTS?
关键是同时使用--sout-ts-es-id-pid
和--ts-es-id-pid
,以确保PID不会在输入或输出阶段被VLC更改。
最终命令:
cvlc myfile.ts --sout udp:127.0.0.1:9876 --sout-ts-es-id-pid --ts-es-id-pid --repeat --loop --sout-all --sout-keep