Android 视频播放之流媒体格式处理
2015-10-22 13:53
726 查看
原文链接地址:http://blog.zhourunsheng.com/2012/05/android-视频播放之流媒体格式处理/
格式编码
项目的需求要实现流媒体的播放,简言之就是视频可以支持边下载边播放。鉴于MP4/h.264编码的优势,视频采用MP4文件格式存储,因为mp4只是一个存储的规范,像国内的优酷主要采用flv文件格式,其内部也是MP4编码,flv是 Adobe 支持的格式,这样的话,不论是在网站端,通过pc浏览器浏览,借助于FlashPlayer,还是手持设备,借助于ffmpeg的解码库,都能实现视频的无缝播放,算是一个比较完美的解决方案。
在实际视频的处理中,发现一个问题,利用Android手机自己拍摄录制的视频,可以完美支持边下载边播放,通过Iphone手机录制的视频,然后转码成mp4格式的视频就不能支持边下载边播放了,问题困扰了两三天,没办法,开始研究mp4的存储格式,最后终于找到了问题的所在。
了解mp4格式的应该知道,mp4是采用一种box数据结构来存储视频数据的,理想的情况是,box的顺序为ftyp,moov,free和mdat,通过moov的解析就能获取该视频的关键信息,比如播放时长,关键帧数,sample存储情况,在mdat中对应的编码数据偏移量等等。这样只要视频缓存完头部信息,即moov之后,就能知道当前视频的关键数据了,随着mdat的逐渐下载,就能完美实现视频的边缓存边播放,具体的实例教程请参见我的博文《Android视频播放之边缓存边播放》。
但是通过第三方软件的编码转换,有的就把moov放置到mdat之后了,这样只有把视频全部下载完成之后才能获取该视频的关键信息,才能开始播放,理论上也就没法实现视频的边缓存边播放,找到问题的关键点之后,就开始寻找解决办法,终于找到qt-faststart,它能解析原视频格式,并将moov信息尽可能的提前,这样就能及早解析和播放视频了。
格式转换
下载地址:qt-faststart.exe binary for Windows
qt-faststart written in Python
qtindexswapper written for Adobe AIR
我使用的是window的客户端,使用命令如下:
Usage: qt-faststart (转换前的视频文件) (转换后的视频文件)
参考文章
how-to-make-mp4-progressive-with-qt-faststart
improving-qt-faststart
移动流媒体协议综述
相关文章推荐
- Android加载图片时出现OOM(OutOfMermary)的问题解决方案
- android LayoutInflater.inflate()的参数介绍
- cordova 5.3.3 android平台开发忽略的安全设置
- Android Studio常见问题--uses-sdk:minSdkVersion 11 cannot be smaller than version 15 declared in library
- android 获取设备上安装的非系统应用信息
- android知乎小圆圈刷新效果
- Android 使用百度LBS SDK(四)
- android中SpannableString的使用
- Android学习第五天之 android:layout_weight=""浅析
- Android_08_样式和主题
- 更新sdk的新方法(速度很快)
- Android Adapter深入理解与优化
- Android异常汇集----3.java.lang.NoClassDefFoundError: Class not found using the boot class
- Android中ProgressDialog不能更新listview
- 【Android应用场景】图片瀑布流(一)
- Android Log类封装
- (Android开发辅助工具)动态广播注册解注工具
- 一招解决Android 加载高清大图
- Android Studio使用Gradle构建错误-Failure initializing default system SSL context
- android消息机制理解