能否伪造(mp4) moov原子?

8
我正在尝试播放一个MP4流。该流来自我的安卓手机。问题在于,只有当手机完成录制进程时,才会写入播放mp4所需的moov原子。因此,目前我只能在录制完成后播放流数据。 我的想法是自己编写ftyp和moov原子,以便在手机录制时可以播放流数据。 我尝试使用另一个视频文件的moov原子,但这没有起作用。我也读到过,通常情况下,如果只给定mdat原子,则不可能构建moov原子。 但在我的情况下,我知道录制条件,例如帧速率等。 因此,我的问题是,如果我知道录制参数,是否可能为传入的流生成有效/可用的moov原子?
2个回答

5

这是可能的。四年前,我就已经实现了将“直播流”应用到原始iPhone上。只需将STSZ和STCO原子填充为固定大小的帧,然后用零填充每个帧即可。是的,文件大小会很大,但你可以真正地进行直播流。


2

似乎无法流式传输尚未完成的mp4文件,因为播放器需要特殊的表格来定位每个数据样本的块和偏移量。您可以伪造FTYP、MOOV和其他原子,但是在没有完整文件的情况下无法生成所有表格。更好的策略是生成许多短的mp4文件,并逐个发送它们。


但是,在停止录制器,保存文件,然后重新启动录制器以生成许多短文件(在Android上)时会产生开销。实际上,每次发生这种情况都会导致跳过一两秒的视频。 - David Doria
@DavidDoria 这个策略将在不关闭记录器的情况下使用。你需要获取1秒钟的帧并独立于下一个1秒进行压缩... 不过我不太确定如何在Android上实现。 - Alexis Wilke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接