2013-02-14 65 views
1

我使用基于Live555/openRTSP的代码将H.264视频源流式传输到mp4文件,并且想要同时读取文件的早期部分(来自不同的应用程序)。更改fopenfid = _fsopen(fileName, "wb", _SH_DENYWR)(从OutputFile.cpp)显然是不够的,因为它没有什么区别和媒体播放器还是不会打开它(是,对于MP4输出的写行?)我可以在流式传输/写入mp4文件的同时读取mp4文件的早期部分?

在一个相关的说明,如果我模拟软件的不干净关闭(例如电源故障),未完成的文件不能被任何媒体播放器读取。我认为在file-close上写入文件的内容是媒体播放器可以理解文件的内容。如果可能的话,这也是我想要编码的一种情况,并且很可能与上面的问题非常相似?

任何指针/答案/想法大受接待:-)

回答

0

如果有人曾经需要同样的,这是我做到了,而且比我想象的更容易:

  • 变化fopen在OutputFile.cpp到文件共享通话_fsopen (份额读访问)
  • QuickTimeFileSink::continuePlaying()函数中的每10秒我呼叫completeOutputFile(),从而保持标头最新(视频长度等)。

Windows媒体播放器不喜欢它(可能试图获得独占文件访问),但VLC还是挺乐意阅读文件,而我还在流进去。

0

你通常不会从MP4读取(同样适用于许多其他格式)使用fopen式的API文件,并使用库来代替。反过来,这期望一个完整的文件,并且不会尝试恢复损坏的文件,或者读取仍在写入的文件。

因此,尽管在技术上可以在正在编写时进行阅读,但您不可能在普通的图书馆,应用程序和播放器中取得成功。您需要先完成写入才能使文件有效,可读和可播放 - 因为完成步骤会写入播放所需的索引。