我想修改GDLC MP4 Muxer,以便
,
的作家
,但首先我必须弄清楚,最后一次被屏蔽的数据停留在哪里,这样我就可以将它写入一个文件.
要想得到一个可播放的文件,我必须把数据写在哪里?
My的尝试:
我输入了调试信息,并看到它调用了追加,并且这个方法定期调用替换.我编写了缓冲区[字节pBuffer],它是为MuxOutput .I的附加方法提供的,get二进制数据有一些标头,但没有把它放在错误的位置,或者我做了wrong.....Then,检查了什么调用- FillSpace methos和YUVVideoHandler::WriteDescriptor.但无法从其他方法中获得有用的信息.
更新
我可以在MuxOutput::Replace method...The上写数据到文件,问题是页眉信息和页脚(文件末尾的表)是错误的.其他数据有效载荷数据是正确的..。文件编写器记录的可播放文件以00 00 0 18...hexadecimal开始,但我的记录数据以00 0 0 0 08十六进制开始.当我使用十六进制编辑器工具用文件编写器生成的文件替换mp4页眉和页脚部件时,文件变得相同并播放。
,可能是什么问题?
发布于 2011-11-29 15:21:23
在mpeg4mux::MovieWriter中,MovieWriter是通过指向AtomWriter接口的指针创建的(在我的示例中,由输出引脚通过对下游文件编写器的调用来实现)。所有对文件的写入都是通过这个接口进行的。首先写入数据,然后在停止时写入索引数据(moov块),并更新文件头和数据块头。
G
发布于 2011-12-01 15:46:11
我认为您的问题是由Random File Access需求引起的,File Writer Filter默认支持该需求。您需要遵循的步骤是:
1)在开头创建一个空文件
std::ofstream outFile;
outFile.open("c:\\out.mp4", ios_base::out | ios_base::binary);
outFile.close();2)打开文件进行随机访问
outFile.open("c:\\out.mp4", ios_base::in | ios_base::out | ios_base::binary);3)在输出引脚的Write()方法之后添加这些行(用适当的变量名替换位置、缓冲区和bufferSize )
outFile.seekp(position);
outFile.write(buffer, bufferSize);4)在记录会话结束时(类似于muxer的Close()方法)添加
outFile.close();你就完蛋了。
https://stackoverflow.com/questions/8311825
复制相似问题