android边缓存边播放mp4

在做一个新闻系统中间有视频播放的要求,当时想着非常简单,android的mediaplayer封装的非常好了,基本就是做做界面。

界面写好的时候才发现悲剧了,对方服务器是http方式提供的mp4,android死活无法边缓存边播放,缓存到100%才能播放。

在网上找了找资料,网上有个边下载mp3边播放的例子,按照其思路修改后发现mp4在没有完成下载时,播放器仍然无法识别。

只好找了mp4的文档格式来看。mp4文档比较复杂,我用简单的方式描述一下,mp4是很多box的嵌套,最上层box包括ftyp,free,moov,mdat等等,其中moov存放着视频详细描述,算是索引,而mdat存放着视频的具体信息。那么需要播放的时候,先必须拿到moov,在实际的mp4打包中,moov可能被放到了mdat后面,导致了文件不被下载完的时候无法获取moov,而无法边缓存边播放。

问题分析出来了,一种简单的方式就是在服务端重新打包,使用mp4box把moov放到mdat前面。还一种方式就是在客户端进行重新调整下载顺序。

我这里稍微介绍一下在客户端进行重新调整下载顺序的解决思路,我们顺序的读取inputstream,当遇到mdat box时,获取mdat整个包长度,并不下载,直接填入空字节。根据长度跳跃到下一个box,直至遇到 moov。完成了moov后,回头再填写mdat,这时已经可以下载一部分播放一部分了。


顺便贴出对我帮助比较大的两篇文档:

http://blog.sina.com.cn/s/blog_48f93b530100jz4b.html

http://www.cnblogs.com/haibindev/archive/2011/10/17/2214518.html

感谢同事jerry提供的帮助



  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 32
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值