现在的位置: 首页 > 移动开发> 正文
Android 视频播放之流媒体格式处理
2012年05月19日 移动开发 评论数 4 ⁄ 被围观 7,933+

格式编码

项目的需求要实现流媒体的播放,简言之就是视频可以支持边下载边播放。鉴于MP4/h.264编码的优势,视频采用MP4文件格式存储,因为mp4只是一个存储的规范,像国内的优酷主要采用flv文件格式,其内部也是MP4编码,flv是 Adobe 支持的格式,这样的话,不论是在网站端,通过pc浏览器浏览,借助于Flash Player,还是手持设备,借助于ffmpeg的解码库,都能实现视频的无缝播放,算是一个比较完美的解决方案。

在实际视频的处理中,发现一个问题,利用Android手机自己拍摄录制的视频,可以完美支持边下载边播放,通过Iphone手机录制的视频,然后转码成mp4格式的视频就不能支持边下载边播放了,问题困扰了两三天,没办法,开始研究mp4的存储格式,最后终于找到了问题的所在。

了解mp4格式的应该知道,mp4是采用一种box数据结构来存储视频数据的,理想的情况是,box的顺序为ftyp,moov,free和mdat,通过moov的解析就能获取该视频的关键信息,比如播放时长,关键帧数,sample存储情况,在mdat中对应的编码数据偏移量等等。这样只要视频缓存完头部信息,即moov之后,就能知道当前视频的关键数据了,随着mdat的逐渐下载,就能完美实现视频的边缓存边播放,具体的实例教程请参见我的博文《Android视频播放之边缓存边播放》

但是通过第三方软件的编码转换,有的就把moov放置到mdat之后了,这样只有把视频全部下载完成之后才能获取该视频的关键信息,才能开始播放,理论上也就没法实现视频的边缓存边播放,找到问题的关键点之后,就开始寻找解决办法,终于找到qt-faststart,它能解析原视频格式,并将moov信息尽可能的提前,这样就能及早解析和播放视频了。

格式转换

下载地址:

我使用的是window的客户端,使用命令如下:

Usage: qt-faststart (转换前的视频文件) (转换后的视频文件)

参考文章

目前有 4 条留言 其中:访客:4 条, 博主:0 条

  1. xxx : 2013年02月19日19:06:25  -49楼 @回复 回复

    mp4box 可以吗?

  2. 786806548 : 2013年02月18日12:24:44  -48楼 @回复 回复

    3gp视频的存储格式是分段的嗎?

  3. 786806548 : 2013年02月18日12:17:27  -47楼 @回复 回复

    “利用Android手机自己拍摄录制的视频,可以完美支持边下载边播放”
    我手機拍的視頻為什麼不能支持邊緩存邊播放呢?(我手機拍的是.3pg格式的)安卓2.2

  4. lius1984 : 2012年08月12日15:10:16  -46楼 @回复 回复

    不错, 我以前就写过一个把索引信息放在前面的demo,证明是可行的。

给我留言

留言无头像?


×
腾讯微博