本文简单地分享一下在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转移到文件头部,从而支持边下载边播放。

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

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

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

5. 小结

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

迅雷 android下载地址 http,Android HTTP边下边播相关推荐

  1. 华为android下载地址,解决Android 华为推送库下载不了

    问题:华为库下载不了,导致gradle同步失败 解决: 去掉华为推送在线下载相关代码,将在线下载修改为离线加载aar库 1.通过Maven 仓库离线包下载地址下载关于推送的包: http://deve ...

  2. xp mod android下载地址,安卓的XP系统 XP Mod Launcher小体验

    1XP桌面启动器体验(一) Android手机最吸引人的地方就是它的开源性,可以随意享受其他第三方应用所带来的乐趣.在Android手机上尝试Windows系统是一些手机发烧友们的探索项目,无论是远程 ...

  3. xp mod android下载地址,Android

    把你的手机瞬间变成WinXP?是的,你没听错,而且不需要复杂的刷机过程,现在我们只需要在手机上装个软件就能实现,而且方便主题切换,这个软件就是XP Mod,Android上的一款桌面启动器软件. XP ...

  4. Windows Subsystem for Android 下载地址,在 Windows 11 上运行 Android 系统

    在Win 11 上安装Android系统,运行APK ,妥妥的 下载安装包,国内采用离线安装方式 打开 Microsoft Store - Generation Project (v1.2.3) [b ...

  5. 判断ios还是android下载地址

    转自:https://blog.csdn.net/cn_1937/article/details/78919675 通常,我们开发一个app,有Android版本,有ios版本,但是,我们有时候只有一 ...

  6. 【Android 逆向】Frida 框架 ( Frida 2 种运行模式 | Frida 12.7.5 版本相关工具下载地址 | 在 Android 模拟器上运行 Frida 远程服务程序 )

    文章目录 一.Frida 2 种运行模式 二.Frida 12.7.5 版本相关工具下载地址 三.在 Android 模拟器上运行 Frida 远程服务程序 1.启动雷电模拟器 2.上传 frida- ...

  7. xp mod android下载地址,20121126更新下载地址------无忧最快的 NATIVE--XP/03 TangoPE 终结版!...

    115的网盘不能共享了,重新发布百度网盘的分享地址: http://pan.baidu.com/share/link?shareid=124173&uk=302281092 最近忙于锻炼身体, ...

  8. android ip地址扫描,Android:手机扫描局域网所有ip,并进行socket通讯

    android 手机局域网扫描PC机: 利用android的ping命令扫描局域网内所有ip, 并对其进行socket通信 import java.io.DataInputStream; import ...

  9. android开发地址选择器,Android地址选择器 类似于京东的地址选择

    简介 最近东西写的挺多的,这不又要弄一个类似于京东的地址选择器,然后刚开始我是不愿意自己去写的,这东西真的是浪费时间.但是下班后回到家找了一圈没找到一个合适的,好吧,那我就自己来封装一个呗,反正生命在 ...

最新文章

  1. GitHub开源的10个超棒后台管理面板
  2. Mysql安装时出现APPLY security settings错误
  3. es6 函数解构的用途
  4. C语言模块化编程的例子
  5. flutter 返回指定界面_Flutter页面路由导航及传参
  6. 小程序和vue语法对比_React语法开发微信小程序 Demo
  7. 设定应用程式上的 Badge -- IOS
  8. LeetCode-数组-三数之和
  9. 【图像修复】基于matlab GUI自适应空间滤波图像修复【含Matlab源码 840期】
  10. java反射创建字符串_Java反射
  11. MySQL函数大全及用法
  12. 基于生物特征密钥生成研究 ------应用于区块链领域密钥的生成办法
  13. 影视剪辑,视频剪辑素材音效哪里找?超实用剪辑入门必备素材
  14. 计算机带来好处坏处的英语作文,关于电脑的好处与坏处的英语作文
  15. 专为《巫师3》打造 次世代RedEngine 3引擎公布
  16. Can't locate Time/HiRes.pm in @INC错误的处理方法 perl安装不全
  17. 现代都市女性所爱的潮流搭!
  18. 和免疫荧光标记说拜拜 | 谷歌Cell论文:深度学习模型预测荧光位置
  19. 【XSY4041】搬砖(线段树)
  20. ECSHOP商品页调用热销商品的教程

热门文章

  1. python中使用缩进来体现代码之间的逻辑关系_Python使用缩进来体现代码之间的逻辑关系....
  2. RabbitMQ的Routing 路由模式(Direct)
  3. 微信网页调试8.0.19换掉X5内核,改用xweb,所以x5调试方式已经不能用了,现在有了解决方案
  4. 微信开发者工具提交代码到gitee?
  5. Linux编译QT项目时报错: error: cannot find -lGL 的解决方法
  6. 高通QCS603/QCS605物联网系统芯片介绍,QCS603/QCS605处理器参数比较
  7. C# 大地测量高斯投影正反算公式计算程序
  8. 【C++】C++PrimerPlus(第6版)中文版 第9章 内存模型和名称空间 编程练习 参考答案
  9. (五)结合大彩屏介绍Bus Hound:cmd.Phase.ofs(rep)
  10. PDF文件格式转换攻略:PDF格式转换图片格式