0

我创建了一个使用 appsrc 来记录 mp4/mpeg 文件的应用程序。每当我必须停止录制并成功创建文件时,都会发送 EOS 事件。一切顺利,我的管道是

应用程序!队列 !视频速率!ffmpeg色彩空间!x264enc !mp4 多路复用器!文件接收器位置=video.mp4

偶然地,如果我的应用程序崩溃(无法生成成功的 EOS ),记录的数据量会完全丢失。

有没有办法在 gstreamer 中恢复此类文件。我在想是否可以通过在 gstreamer 中读取此类文件来附加 EOS。是否有规定可以这样做或类似的事情,这样我就不会丢失数据。

谢谢,

拉胡尔

4

2 回答 2

1

您可能希望将数据复用到 MPEG 传输流 (.ts) 而不是 MP4 文件中。应用程序崩溃后 MP4 文件不可读的原因是 mp4mux 没有机会写入文件的“moov”原子,这只能在记录所有多媒体数据后(即处理 EOS 时)完成. .ts 文件是为流式传输而构建的,即使文件末尾不完整,仍然可以读取。

要调用它,请将管道的末尾更改为:

... ! x264enc ! mpegtsmux ! filesink location=video.ts

如果需要 MP4,.ts 文件可以在录制后轻松无损地重新组合成 MP4。

于 2013-01-30T06:58:02.160 回答
0

您可以使用“moov-recovery-file”属性并能够在崩溃的情况下修复文件。有关详细信息,请参阅原子恢复

于 2013-01-31T08:58:53.570 回答