MP4文件quick start探究
来源:互联网 发布:linux 待机 设置 按钮 编辑:程序博客网 时间:2024/05/17 01:40
最近在Flash上实现MP4文件点播时,发现部分MP4文件在原有的播放器上无法播放,经过定位发现,原来是MP4 BOX搞的鬼!
什么是MP4 BOX?
对于一般的MP4文件,BOX顺序为:ftyp-moov-free-mdat.
而对于部分经过视频软件处理后的MP4文件,BOX顺序发生了改变:ftyp-free-mdat-moov.
对于这种顺序的MP4文件,在完整下载文件之前,无法获取moov信息,因此是无法实现边下载边播放的。
解决方案
对源文件进行重新编码
既然BOX顺序有问题,可以从源头上进行处理:调整BOX顺序。工具qt-faststart即是实现该功能的利器。
qt-faststart主页下载了qt-faststart.exe binary for Windows之后,通过cmd对def.mp4文件进行转化: qt-faststart.exe def.mp4 def_new.mp4
转化后,box顺序果然发生了变化,播放正常。
使用AtomicParsley对MP4文件进行解析:
Atom ftyp @ 0 of size: 32, ends @ 32Atom free @ 32 of size: 8, ends @ 40Atom mdat @ 40 of size: 1025668, ends @ 1025708Atom moov @ 1025708 of size: 13925, ends @ 1039633 Atom mvhd @ 1025716 of size: 108, ends @ 1025824 Atom trak @ 1025824 of size: 6608, ends @ 1032432 Atom tkhd @ 1025832 of size: 92, ends @ 1025924 Atom edts @ 1025924 of size: 36, ends @ 1025960 Atom elst @ 1025932 of size: 28, ends @ 1025960 Atom mdia @ 1025960 of size: 6472, ends @ 1032432 Atom mdhd @ 1025968 of size: 32, ends @ 1026000 Atom hdlr @ 1026000 of size: 45, ends @ 1026045 Atom minf @ 1026045 of size: 6387, ends @ 1032432 Atom vmhd @ 1026053 of size: 20, ends @ 1026073 Atom dinf @ 1026073 of size: 36, ends @ 1026109 Atom dref @ 1026081 of size: 28, ends @ 1026109 Atom stbl @ 1026109 of size: 6323, ends @ 1032432 Atom stsd @ 1026117 of size: 167, ends @ 1026284 Atom avc1 @ 1026133 of size: 151, ends @ 1026284 Atom avcC @ 1026219 of size: 49, ends @ 1026268 Atom pasp @ 1026268 of size: 16, ends @ 1026284 ~ Atom stts @ 1026284 of size: 24, ends @ 1026308 Atom stss @ 1026308 of size: 24, ends @ 1026332 Atom ctts @ 1026332 of size: 3008, ends @ 1029340 Atom stsc @ 1029340 of size: 40, ends @ 1029380 Atom stsz @ 1029380 of size: 1532, ends @ 1030912 Atom stco @ 1030912 of size: 1520, ends @ 1032432 Atom trak @ 1032432 of size: 7104, ends @ 1039536 Atom tkhd @ 1032440 of size: 92, ends @ 1032532 Atom edts @ 1032532 of size: 36, ends @ 1032568 Atom elst @ 1032540 of size: 28, ends @ 1032568 Atom mdia @ 1032568 of size: 6968, ends @ 1039536 Atom mdhd @ 1032576 of size: 32, ends @ 1032608 Atom hdlr @ 1032608 of size: 45, ends @ 1032653 Atom minf @ 1032653 of size: 6883, ends @ 1039536 Atom smhd @ 1032661 of size: 16, ends @ 1032677 Atom dinf @ 1032677 of size: 36, ends @ 1032713 Atom dref @ 1032685 of size: 28, ends @ 1032713 Atom stbl @ 1032713 of size: 6823, ends @ 1039536 Atom stsd @ 1032721 of size: 103, ends @ 1032824 Atom mp4a @ 1032737 of size: 87, ends @ 1032824 Atom esds @ 1032773 of size: 51, ends @ 1032824 Atom stts @ 1032824 of size: 24, ends @ 1032848 Atom stsc @ 1032848 of size: 2524, ends @ 1035372 Atom stsz @ 1035372 of size: 2644, ends @ 1038016 Atom stco @ 1038016 of size: 1520, ends @ 1039536 Atom udta @ 1039536 of size: 97, ends @ 1039633 Atom meta @ 1039544 of size: 89, ends @ 1039633 Atom hdlr @ 1039556 of size: 33, ends @ 1039589 Atom ilst @ 1039589 of size: 44, ends @ 1039633 Atom ?too @ 1039597 of size: 36, ends @ 1039633 Atom data @ 1039605 of size: 28, ends @ 1039633 ~ denotes an unknown atom------------------------------------------------------Total size: 1039633 bytes; 51 atoms total. AtomicParsley version: 0.9.0 (utf16)Media data: 1025668 bytes; 13965 bytes all other atoms (1.343% atom overhead).Total free atom space: 8 bytes; 0.001% waste.------------------------------------------------------
修改后:
Atom ftyp @ 0 of size: 32, ends @ 32Atom moov @ 32 of size: 13925, ends @ 13957 Atom mvhd @ 40 of size: 108, ends @ 148 Atom trak @ 148 of size: 6608, ends @ 6756 Atom tkhd @ 156 of size: 92, ends @ 248 Atom edts @ 248 of size: 36, ends @ 284 Atom elst @ 256 of size: 28, ends @ 284 Atom mdia @ 284 of size: 6472, ends @ 6756 Atom mdhd @ 292 of size: 32, ends @ 324 Atom hdlr @ 324 of size: 45, ends @ 369 Atom minf @ 369 of size: 6387, ends @ 6756 Atom vmhd @ 377 of size: 20, ends @ 397 Atom dinf @ 397 of size: 36, ends @ 433 Atom dref @ 405 of size: 28, ends @ 433 Atom stbl @ 433 of size: 6323, ends @ 6756 Atom stsd @ 441 of size: 167, ends @ 608 Atom avc1 @ 457 of size: 151, ends @ 608 Atom avcC @ 543 of size: 49, ends @ 592 Atom pasp @ 592 of size: 16, ends @ 608 ~ Atom stts @ 608 of size: 24, ends @ 632 Atom stss @ 632 of size: 24, ends @ 656 Atom ctts @ 656 of size: 3008, ends @ 3664 Atom stsc @ 3664 of size: 40, ends @ 3704 Atom stsz @ 3704 of size: 1532, ends @ 5236 Atom stco @ 5236 of size: 1520, ends @ 6756 Atom trak @ 6756 of size: 7104, ends @ 13860 Atom tkhd @ 6764 of size: 92, ends @ 6856 Atom edts @ 6856 of size: 36, ends @ 6892 Atom elst @ 6864 of size: 28, ends @ 6892 Atom mdia @ 6892 of size: 6968, ends @ 13860 Atom mdhd @ 6900 of size: 32, ends @ 6932 Atom hdlr @ 6932 of size: 45, ends @ 6977 Atom minf @ 6977 of size: 6883, ends @ 13860 Atom smhd @ 6985 of size: 16, ends @ 7001 Atom dinf @ 7001 of size: 36, ends @ 7037 Atom dref @ 7009 of size: 28, ends @ 7037 Atom stbl @ 7037 of size: 6823, ends @ 13860 Atom stsd @ 7045 of size: 103, ends @ 7148 Atom mp4a @ 7061 of size: 87, ends @ 7148 Atom esds @ 7097 of size: 51, ends @ 7148 Atom stts @ 7148 of size: 24, ends @ 7172 Atom stsc @ 7172 of size: 2524, ends @ 9696 Atom stsz @ 9696 of size: 2644, ends @ 12340 Atom stco @ 12340 of size: 1520, ends @ 13860 Atom udta @ 13860 of size: 97, ends @ 13957 Atom meta @ 13868 of size: 89, ends @ 13957 Atom hdlr @ 13880 of size: 33, ends @ 13913 Atom ilst @ 13913 of size: 44, ends @ 13957 Atom ?too @ 13921 of size: 36, ends @ 13957 Atom data @ 13929 of size: 28, ends @ 13957Atom free @ 13957 of size: 8, ends @ 13965Atom mdat @ 13965 of size: 1025668, ends @ 1039633 ~ denotes an unknown atom------------------------------------------------------Total size: 1039633 bytes; 51 atoms total. AtomicParsley version: 0.9.0 (utf16)Media data: 1025668 bytes; 13965 bytes all other atoms (1.343% atom overhead).Total free atom space: 8 bytes; 0.001% waste. Padding available: 8 bytes.------------------------------------------------------
- 客户端动态加载BOX
对于自有内容网站来说,对自身视频库进行转码并不麻烦。但是对于第三方公司来说,可能无法去对甲方庞大的视频库进行处理,更理想的方式,是从客户端及时获取moov信息并实现播放。
//TODO
参考文章:
- http://blog.zhourunsheng.com/2012/05/android-视频播放之流媒体格式处理/
- http://stackoverflow.com/questions/19803458/how-to-download-only-the-moov-atom-from-mp4-file
0 0
- MP4文件quick start探究
- Velocity Quick Start [3] - 输出到文件
- Quick Start
- Quick Start
- WAP Push Quick Start
- Purify Quick Start
- [Avalon] Quick Start
- CodeSmith Quick Start Guide
- JavaMail quick start
- Ibatisnet Quick Start
- Ibatisnet Quick Start
- KGDB Quick Start
- dom4j Quick start
- Resin Installation Quick Start
- iBatisnet Quick Start(转)
- OpenLDAP Quick Start Guide
- squid quick start
- DOJO Quick Start
- 尾递归之认识
- Control Arduino with TP-Link TL-WR1043ND Router
- C# 同一实例的同一事件注册到子父窗体后
- SAT阅读练习题:Reading Comprehension Test 2
- update更新
- MP4文件quick start探究
- 细数AutoLayout以来UIView和UIViewController新增的相关API
- ASE Can't allocate space for object 'syslogs' in database 'WEN' because 'logsegment' segment is full
- Image Stride
- DP之数塔
- Swift 下载文件 支持断点下载
- Android系统联系人全特效实现(下),字母表快速滚动
- ReviewBoard安装和配置札记
- 最简单的create语句