[Linux 音视频技术] 因为Moov信息位置不对,导致mp4不能在线播放的解决方法
转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]
本文链接: http://www.php-oa.com/2009/03/04/moov_mp4.html
近来mp4做流媒体特别火..象ku6,sina之类都换了mp4 .我也小研究了一下.
发现一个问题,就是不一定所有的mp4都能在线播放.为什么啦?因为很多的mp4中moov tag总是在文件的末尾,视频数据的后面.这样,造成一个问题,就是mp4没有下载到有moov信息前,都是不能在线做流来播放的.象FLV这个就好多了.
那讲到这,很多人一定想问.什么是moov.在Movie atom定义了一部电影的数据信息.它的类型是'moov',是一个容器atom,至少必须包含三种atom中的一种—movie header atom('mvhd'), compressed movie atom('cmov')和reference movie atom ('rmra').没有压缩的 movie header atom必须至少包含movie header atom 和reference movie atom中的一种.也可以包含其他的atom,例如一个clipping atom ('clip'),一个或几个track atoms ('trak'),一个color table atom ('ctab'),和一个user data atom ('udta').其中movie header atom定义了整部电影的time scale,duration信息以及display characteristics.track atom定义了电影中一个track的信息.Track就是电影中可以独立操作的媒体单位,例如一个声道就是一个track.
所以,我们知道了,如果没有这些信息,视频是没法播放的,如果是流媒体,那要下载完才能播放,不就完了.其实很好办,就是给这个信息放到文件头.这样,用户一开始就下载了这个信息,就直接可以播放,就象wmv和flv一样了.
好了,下面教大家怎么转换.
#MP4Box -isma 081226154543_liuxu_ri.mp4
Converting to ISMA Audio-Video MP4 file…
Saving 081226154543_liuxu_ri.mp4: 0.500 secs Interleaving
下面这个方法也行,不知和上面有什么别分
$ MP4Box -inter 500 video.mp4
相当容易吧。这个其实是操作的 hint track
这个是一个特殊的 track 并不包含媒体数据,而是包含了一些将其他数据 track 打包成流媒体的指示信息。track 表示一些sample的集合,对于媒体数据来说,track表示一个视频或音频序列。



















最近看不到你,咋回事? LAMP群:34513293
你好,我想问一下关于“moov在后面不能播放”的一些问题,能不能指教一下,邮箱:renkezheng@126.com