当管道mpegts到ffmpeg,它应该将其转换为mp4并管道转换为stdout时,ffmpeg说:"muxer不支持非可搜索输出".
经过大量的研究后,我得出的结论是mp4是一种不好的选择,可以通过搜索来进行各种动态转码.所以从本质上说:MP4不能通过ffmpeg进行管道传输,这是有道理的.
但我没有连续的mpegts流,我有5秒钟的块.所以它真的就像:
这是我的1 MB*.ts文件
请从管道读取它,直到你点击EOF
请将它转换为mp4(如果你真的需要寻找,请使用缓冲区)
请将完整的内部mp4缓冲区传输到stdout
我需要这些用于HTML5 MediaSource的mp4块,碎片没有问题,我使用mp4box.js,它就像一个魅力.
问题:
FFMPEG可以做这种内部缓冲吗?
还有更好的选择吗?
本质上:我可以(不知何故)与ffmpeg交互而不使用文件吗?我目前的解决方案适用于文件和轮询新的块,这是丑陋的.
如果您对我的ffmpeg命令感兴趣,请告诉我.
既然您提到了碎片,那么您可以启用它movflags
.从每个关键帧开始的片段示例:
ffmpeg -i segment.ts -c copy -movflags frag_keyframe+empty_moov -f mp4 -
具有空moov
原子意味着它不需要寻找并因此与管道一起工作.