我有管道:
gst-launch-1.0 rtspsrc location=rtsp://ip/cam ! rtph264depay ! h264parse ! mp4mux fragment-duration=10000 streamable=1 ! multifilesink next-file=2 location=file-%03d.mp4
第一部分打得很好,有些则不打。当我试图查看损坏的mp4的结构时,看到一个有趣的bug:
“一些数据”中最有趣的事情。没有标题数据,它们只是存在。按块大小我认为它是MDAT。我找到块的大小并在它之前添加MDAT头。文件立即生效并播放。但是未知的作品无法播放,因为它之前没有MOOF标题。
问题出在mp4mux和qtmux。在GStreamer 1.1.0和1.2.2上测试过。所有结果都是相同的。
可以使用multifilesink不正确吗?
如果你看一下multifilesink
的文档,你会找到答案:
无法使用此元素创建可独立播放的mp4文件,请使用splitmuxsink元素。 ...
所以使用splitmuxsink
并且在完成最后一个文件的纠正时不要忘记发送EOS
更新
看起来当问题被问到没有像splitmuxsink
这样的元素时
可以使用videotestsrc而不是rtsp来复制吗?
尝试用“videotestsrc num-buffers =!x264enc!mp4mux ...”替换你的h264接收和depayloading。
这可能是一个错误,请在https://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer上提交,以便得到维护人员的适当关注。
另外,你是如何尝试的呢?
谢谢