我正在使用基于Live555 / openRTSP的代码将H.264视频源流式传输到mp4文件,并希望同时读取文件的早期部分(来自不同的应用程序)。将fopen
更改为fid = _fsopen(fileName, "wb", _SH_DENYWR)
(来自OutputFile.cpp)显然是不够的,因为它没有任何区别,媒体播放器仍然无法打开它(是mp4的写入行)输出?)
在相关说明中,如果我模拟软件的不正常关闭(例如电源故障),则任何媒体播放器都无法读取未完成的文件。我假设在file-close上写入文件的内容是允许媒体播放器理解文件的内容。如果可能的话,这也是我想要编码的情况,并且很可能与上面的问题完全相同?
任何指针/答案/想法都很受欢迎: - )
答案 0 :(得分:0)
您通常不会使用MP4
来读取fopen
(同样适用于许多其他格式)文件 - 就像API一样,而您使用的是库。反过来,它期望一个完整的文件,不要尝试恢复损坏的文件,或者读取仍在写入的文件。
因此,虽然在技术上可以在仍在编写时进行读取,但您不太可能在常规库,应用程序和播放器中取得成功。您需要先完成写入以使文件有效,可读和可播放 - 因为完成步骤会写入回放所需的索引。
答案 1 :(得分:0)
如果有人需要相同的话,我就是这样做的,而且比我想象的要容易:
fopen
更改为文件共享调用_fsopen
(分享阅读权限)QuickTimeFileSink::continuePlaying()
函数我调用completeOutputFile()
,从而使标题保持最新(视频长度等)。Windows Media Player不喜欢它(可能试图获得独占文件访问权限),但VLC很高兴在我还在流入时读取该文件。