sofia
在梦中,我知道他正走在前面。他打算在那片黑暗与寒冷之中某处生火。我也知道,无论我何时赶到那里,他都会在那儿。然后我就醒了。
No Country for Old Men (2007)
功能特性
Remuxer.Initialize:直接将 16 字节的 mdat(媒体数据)头部写入 io.WriteSeeker 中。
Remuxer.AddSegment:在处理各个片段时,直接将原始媒体样本负载作为片段追加到 io.WriteSeeker 文件中。
Remuxer.Finish:将最终的 moov 元数据框追加到 io.WriteSeeker 文件的末尾,然后回退定位,用计算出的最终字节大小覆盖原有的 mdat 占位符大小。
Decrypt:直接将 AES-CTR XOR 密钥流应用到数据字节切片上。如果该切片基于内存映射文件,它会在磁盘上的文件中进行就地修改。
MoovBox.RemovePssh:修改内存中的 MoovBox,移除所有的 PSSH(保护系统专用头部)框,从而在将其写入文件之前改变其结构。
MoovBox.RemoveMvex:修改内存中的 MoovBox,移除 mvex(电影扩展信息)框,从而在将其写入文件之前改变其结构。
TrakBox.RemoveEdts:修改内存中的 TrakBox,移除 edts(编辑列表)框,从而在将其写入文件之前改变其结构。
StsdBox.RemoveSinf:修改内存中的 StsdBox,移除 sinf(保护方案信息)框并更改条目头部格式,从而在将其写入文件之前改变其结构。
MvhdBox.SetDuration:修改内存中的MvhdBox,以更新视频的总时长;如果需要 64 位大小,会自动调整版本标志。
MdhdBox.SetDuration:修改内存中的MdhdBox,以更新媒体的时长;如果需要 64 位大小,会自动调整版本标志。
现有技术
- https://github.com/mozilla/mp4parse-rust/issues/415
- https://github.com/Eyevinn/mp4ff/issues/311
- https://github.com/alfg/mp4-rust/issues/132
- https://github.com/yapingcat/gomedia/issues/115
- https://github.com/alfg/mp4/issues/27
- https://github.com/abema/go-mp4/issues/13
- https://github.com/garden4hu/fmp4parser-go/issues/4
- https://github.com/eswarantg/mp4box/issues/3
- https://github.com/miquels/mp4/issues/2
标准
ISO/IEC 14496-12: https://wikipedia.org/wiki/ISO_base_media_file_format
ISO/IEC 14496-14: https://wikipedia.org/wiki/MP4_file_format
ISO/IEC 23001-7: https://wikipedia.org/wiki/MPEG_Common_Encryption