Android 视频播放之流媒体格式处理

原文链接地址:http://blog.zhourunsheng.com/2012/05/android-视频播放之流媒体格式处理/

格式编码


项目的需求要实现流媒体的播放,简言之就是视频可以支持边下载边播放。鉴于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 (转换前的视频文件) (转换后的视频文件)

参考文章

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值