本文简单地分享一下在Android平台做HTTP边下载边播放的一些经验,希望对初学者有所帮助。

1. 为什么播放器在播放视频文件的时候,都知道该怎么去解码、该以怎样的时间间隔去显示每一帧呢?

因为无论是mp4、avi、flv、mkv还是其他格式的音视频文件,都存在一个称为metadata的数据块,记录了当前文件的图像尺寸、编码格式、帧率、码率等信息,播放器可以通过解析metadata得到这些信息。

2. 迅雷边下边播的原理是怎样的?

迅雷在边下边播的时候,不会像往常一样根据资源链接数优先排序进行乱序下载,而是会首先去下载含有metedata的数据块,从而配置好解码器和显示间隔等逻辑,然后保证至少有一个线程顺序地获取/下载即将播放的数据块,从而实现边下边播。

3. Android中如何实现边下边播?

Android的VideoView是支持http协议的边下边播的,只需要将远程http服务器上的视频文件的HTTP URL地址通过 VideoView.setVideoPath 传进去,start之后VideoView就会直接边下载边解码播放了。

不过VideoView支持的视频格式有限,一般只支持mp4、3gp、avi格式

因此,你也可以直接通过"HTTP GET"请求进行文件下载,得到文件的metedata之后,解析出该文件的编码、帧率等信息(例如:mp4码流的话,可以通过《Android中如何提取和生成mp4文件》这篇文章提供的方法进行音视频数据的解耦),然后边下载边送入软/硬解码器进行解码,最后通过SurfaceView将解码后的数据显示出来,比较复杂,相当于自己做流媒体播放器了。

4. 需要注意的坑

(1) 不是所有的mp4文件都支持通过HTTP协议边下边播,因为有的mp4文件的metadata数据块在文件尾部,只有下载完整个文件之后才能成功解析。

注:对于metadata数据块在文件尾部的mp4文件,可以通过ffmpeg的qt-faststart工具来转换,或者直接使用如下ffmpeg命令将metadata转移到文件头部,从而支持边下载边播放。

1
ffmpeg -i input.mp4 -movflags faststart output.mp4

(2)如果自己通过http GET请求边下载边解码播放的话,则需要注意,音视频数据的实时传输显示与普通文件的传输有很大的不同,接收到文件数据流可以立马写磁盘,但是接收到一帧音视频数据则必须根据时间戳来决定何时送入解码器解码以及显示,没到时间,就得sleep,否则的话,播放过程会因为网络抖动而出现卡顿现象。

1
注:一般情况下,两帧视频的时间间隔 = 1000/帧率

5. 小结

关于Android中做HTTP边下边播的一些经验就分享到这里了,有任何疑问或者建议欢迎留言或者来信lujun.hust@gmail.com交流,或者关注我的新浪微博 @卢_俊 获取最新的文章和资讯。

本文出自 “Jhuster的专栏” 博客,请务必保留此出处http://ticktick.blog.51cto.com/823160/1713220

关于Android HTTP边下边播相关推荐

  1. 迅雷 android下载地址 http,Android HTTP边下边播

    本文简单地分享一下在Android平台做HTTP边下载边播放的一些经验,希望对初学者有所帮助. 1. 为什么播放器在播放视频文件的时候,都知道该怎么去解码.该以怎样的时间间隔去显示每一帧呢? 因为无论 ...

  2. Android HTTP边下边播

    本文简单地分享一下在Android平台做HTTP边下载边播放的一些经验,希望对初学者有所帮助. 1. 为什么播放器在播放视频文件的时候,都知道该怎么去解码.该以怎样的时间间隔去显示每一帧呢? 因为无论 ...

  3. Android 视频边下边播,MP4头信息在后调整头信息

    mp4视频有两种格式,一种视频头信息在前,这种直接可以先缓存头信息,然后直接边下边播,还有一种是头信息在最后,这种情况下则需要处理mp4的头信息,并调整mp4的格式. mp4文件的格式如下图 图1 从 ...

  4. java 视频边下边播,VideoViewDemo android 播放器,支持边下边播 238万源代码下载- www.pudn.com...

    文件名称: VideoViewDemo下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 194 KB 上传时间: 2014-09-19 下载次数: 5 详细说明:a ...

  5. 边下载边播放的播放器Android边下边播

    看到很多朋友有提问到Android边下载边播放的播放器,小编在这里给大家做个关于这方面的分享. 首先作为一款播放器,支持转码或者支持各种视频格式是必须的,比如常见的视频格式:MP4/FLV/M3U8/ ...

  6. Android安卓手机能不能实现BT文件边下边播?

    Android安卓手机能不能实现BT文件边下边播?Android安卓手机实现类似pc端的bt边下载边播放技术的可行性分析 PC端实现对BT文件的边下载边播放功能,已经有很长时间,也在很多领域得到了很好 ...

  7. (转载)封装bilibili播放器,自定义边下边播和缓存功能

    感谢并转载自:https://www.jianshu.com/p/264324559c07 源码下载,欢迎star 演示Demo下载 image 本项目使用播放器是ijkplay, 并且进行封装和修改 ...

  8. MediaPlayer实现音乐文件的边下边播

    这边的需求是仅仅是实现一个音乐的边下边播.思路就是截取后台返回的音乐链接.然后截取文件名,判断该文件是否在文件夹下存在.存在就使用sd卡的文件源进行播放,不存在就下载这个音乐文件,并且播放这个音乐链接 ...

  9. 自定义高性能播放器, 实现边下边播缓存等功能

    VideoPlayerDemo 项目地址:Zhaoss/VideoPlayerDemo  简介:自定义高性能播放器, 实现边下边播缓存等功能 更多:作者   提 Bug 标签: 本项目使用播放器是ij ...

最新文章

  1. Arcgis for JS之Cluster聚类分析的实现
  2. Linux运维之网络运维
  3. 洗礼灵魂,修炼python(68)--爬虫篇—番外篇之webbrowser模块
  4. 解锁云原生 AI 技能 - 开发你的机器学习工作流
  5. hdu 5277(最大团问题)
  6. python去掉列表中的单引号_Python:如何从列表项中删除单引号(Python: How to remove single quotes from list item)...
  7. android确认密码代码,Android手机卫士之确认密码对话框
  8. 她穿着由自己17封拒稿信做成的裙子,通过了博士论文答辩!
  9. 千亿级的数据难题,优酷工程师怎么解决?
  10. 很久很久以前,我国有一批电脑高手
  11. Windows forfiles(删除历史文件)
  12. 简单整蛊室友,只需几行bat病毒代码
  13. 8.15-30题目归档
  14. 教程篇:《基础模块4》金蝶K3WISE15.0-客户端安装与卸载
  15. 135编辑器怎么复制html,135编辑器复制粘贴文字的方法
  16. 函数的傅立叶展开掐死我吧_如果看了这篇文章你还不懂傅里叶变换,那就过来掐死我吧(二)...
  17. 米世金《货币经济学》思维导图 附自制PPT
  18. 企业微信自建应用获取用户信息
  19. js继承java方法吗_你知道JavaScript的继承吗?
  20. iframe、frame、frameset那些事

热门文章

  1. python 安装PIL包的方法以及简单介绍
  2. 黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动端前端视频教程(学成在线)
  3. Apache的shiro获取当前Session的方法
  4. 唱歌如何保持高位置_如何理解歌唱发声的高位置?如何保持高位置歌唱状态?【男高音】...
  5. 前后端分离开发,日志应该如何进行记录,在出现问题的时候,方便定位问题
  6. 热泵精馏_精馏干货16 || 分子蒸馏
  7. 单片机数据在网页上显示_不务正业的Excel也玩地图,在地图上显示数据,好玩又简单...
  8. 八皇后问题初始思路python_Python 学习笔记(一)10行代码解决八皇后问题
  9. java lodop打印_Java的云打印Lodop
  10. QSettings allKeys读取为空分析