[Linux 音视频技术] 因为Moov信息位置不对,导致mp4不能在线播放的解决方法

Mar 4th, 2009

转载本站文章请注明,转载自:扶凯[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表示一个视频或音频序列。

 

 

 

 

Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪 ViVi 365Key 网摘 天极网摘 和讯网摘 博拉网 POCO 网摘 饭否 QQ 书签 Digbuzz 我挖网 Mister Wong
Tags: , ,
  1. 田伯光
    Mar 5th, 2009 at 22:44
    Reply | Quote | #1

    最近看不到你,咋回事? LAMP群:34513293

  2. ramky
    Aug 10th, 2011 at 07:22
    Reply | Quote | #3

    你好,我想问一下关于“moov在后面不能播放”的一些问题,能不能指教一下,邮箱:renkezheng@126.com