Android 在线视频播放总结

简介: 协议选择 当前流媒体播放中常用到的协议有rtmp,rtsp和http等。各个协议适用于不同的场景。各有优点。具体的区别可参见: http://blog.csdn.net/aflyeaglenku/article/details/53929028 http://www.jianshu.com/p/5b0fa403b3ce rtsp和rtmp协议需要搭建专门的流媒体服务器。

协议选择

当前流媒体播放中常用到的协议有rtmp,rtsp和http等。各个协议适用于不同的场景。各有优点。具体的区别可参见:

播放器选择

Android 平台上支持在线播放的播放器种类繁多。有google大厂提供的开源框架Exoplayer,也有系统本身提供的在线播放控件VideoView。两种方式各有优点。大厂提供的开源框架对于使用场景中的可能会遇到特殊情况考虑比较丰富。系统本身的api使用简单,短短几行代码就能实现在线视频资源的播放。

系统播放器是如何实现在线播放

Android的VideoView是通过http协议实现边下边播的。设置VideoView远程在线资源的http url,调用start操作ViewView就可以直接边下载边播放。
具体代码参见如下:

VideoView mVv = (VideoView) findViewById(R.id.vv);
...
// 播放在线视频
mVideoUri = Uri.parse("http://****/abc.mp4");
mVv.setVideoPath(mVideoUri.toString());
...
mVv.start();

调用start操作后,通过http get请求下载文件。得到文件的metedata之后,解析出该文件的编码、帧率、时长等信息。然后边下载边送入软/硬解码器进行解码,最后通过SurfaceView将解码后的数据显示出来,比较复杂,相当于自己做流媒体播放器了。
看似简单的代码。其实系统帮我们实现了下载,解析,解码,播放等一系列操作。

遇到的坑

使用系统播放器简单,方便。看起来一切都是很完美的。直到客户发现一个问题。
用android 系统自带的 videoview 播放存储在oss的大视频(播放时长超过3分钟)。会提示java.net.ProtocolException: unexpected end of stream。但相同的视频存储在七牛云上播放却不会出现问题。

这个问题一开始很迷茫。丝毫没有查找思路。经过反复抓包测试后,发现VideoView下载到一定缓存后就不下载了。
具体表现如下:
经过1分半后服务器已断开和客户端连接

这时候我们一个同事猜测是不是服务器主动断开链接?
经过进一步大胆假设和验证。发现VideoView的缓存是有上限的。并且到达缓存上限后不会主动向服务器请求获取更多内容。此处输入图片的描述
如果视频文件播放帧率较底,缓存的文件播放时间比较长。那么这段时间内客户端都不会向服务器请求更多的数据。服务端因为长时间没收到客户端请求,从而主动断开和客户端的连接。此处输入图片的描述

找到问题的原因就好^_^。在CDN服务器上更改服务器和客户端连接超时时间。一切完美解决。等等,真的完美吗?刚刚说的,用VideoView播放存储在某友商云存储平台的视频一切正常。为什么?继续抓包。发现VideoView访问友商平台上的视频资源时因为速度的问题,缓存10m内容需要的时间是oss的5倍以上。这样客户端和存储平台服务器一直有数据交互。从而服务器不会主动断开和客户端的连接。另,VideoView在播放缓存内容完成后,没有主动去重新创建连接,从而无法播放完整的视频。这也是一个系统issue。

相关文章
|
10月前
|
存储 机器学习/深度学习 人工智能
GEO 优化必备:RAG 技术全解析(基于知识密集型 NLP 经典论文)
2020 年论文提出的 RAG(检索增强生成),专治大模型 “幻觉、知识过时” 等落地痛点。它将 “检索外部知识” 与 “生成回答” 深度绑定,先精准抓取相关知识片段,再让模型基于证据生成内容。通过端到端联合训练,检索与生成协同优化,事实准确率显著提升,幻觉率大降。无需重训模型即可更新知识,还能追溯答案来源。如今成企业客服、医疗法律等领域刚需,推动大模型从 “通用” 走向 “可信实用”。这让我们做GEO优化就有了基础理论和方法。
GEO 优化必备:RAG 技术全解析(基于知识密集型 NLP 经典论文)
|
弹性计算 Ubuntu Linux
新手入门ECS——ubuntu 20.04安装图形化界面和本地VNC连接
这两天刚接触ecs,想搭建一个ubuntu的图形化界面和想试一下本地vnc连接,但在这过程中遇到了超多问题,下面就是我这两天遇到的问题和解决方法,解决方法均为网上搜索到的
5143 0
新手入门ECS——ubuntu 20.04安装图形化界面和本地VNC连接
|
存储 SQL 人工智能
CCCF专栏 | 加密数据库技术:前沿与展望
本文将从数据安全防护的重大战略需求出发,聚焦数据安全搜索、加密数据库技术等前沿领域,深入探讨加密数据库的发展现状,揭示其设计过程中存在的安全性和性能方面的挑战,并提出未来关于加密数据库建设的一些愿景。
CCCF专栏 | 加密数据库技术:前沿与展望
|
编解码 缓存 开发工具
HarmonyOS NEXT实战:字符串工具
本课程讲解如何在HarmonyOS Next中使用ArkTS语言封装字符串工具类,实现字符串空值判断、编码转换、Base64编解码等功能,帮助开发者高效处理字符串操作。
503 1
|
存储 安全 算法
harmony-utils之AES,AES加解密
harmony-utils是一款专为HarmonyOS开发的高效工具库,提供包括AES加解密在内的多种实用功能,帮助开发者快速构建应用。
529 0
|
移动开发 JavaScript 前端开发
"Vue开发者必看:一篇文章教你如何实现px自动转换vw或rem,轻松应对H5页面响应式设计挑战!"
【10月更文挑战第23天】在Vue项目中实现px到vw或rem的自动转换,可以使用PostCSS插件。首先安装`postcss-loader`,然后添加`postcss-px-to-viewport`和`postcss-pxtorem`插件,并在`postcss.config.js`中配置。配置完成后,直接在Vue组件中使用px单位编写样式,PostCSS会自动转换为vw或rem。这样可以简化开发流程,提高代码的可维护性和页面的响应式设计能力。
1577 0
|
存储 移动开发 编解码
Vue3(开发h5适配)
Vue3(开发h5适配)
659 0
Vue3(开发h5适配)
|
存储 NoSQL Java
OTS(Table Store)
OTS(Table Store)是阿里云提供的分布式NoSQL数据库服务,支持海量结构化数据的存储、查询和分析。OTS具有高可用、高性能、高扩展性和低成本等特点,适用于各种场景下的数据存储和处理,例如电商、物流、游戏等。
7092 2
|
Web App开发 监控 安全
程序员私货:流氓软件的“诸神黄昏”
从刚开始接触电脑的小白,到如今在互联网上“叱咤风云”的老油条,应该都会遇见过这样的电脑软件,他们随意篡改默认程序,频繁推送恶意弹窗,甚至消耗大量内存,拖垮电脑系统,他们就是流氓软件。这种“流氓软件”常见的有哪些?一般程序员通常都怎么处理流氓软件?让我们一起来研究研究!
2142 1
程序员私货:流氓软件的“诸神黄昏”
|
编解码 移动开发 JavaScript
Vite 与 Vue Cli 对比 - 尤雨溪: Vite 会取代 vue-cli 吗?
尤雨溪在发布 Vite 之后写了一条推,感觉不会在用 webpack 了(Vue-cli 基于 Webpack 开发,并配置了 Webpack 打包规则),Sean 是 Webpack 核心开发者,会一些中文,在尤大这条下面直接感叹。Vue-cli 一直是 Vue 2 默认官方脚手架工具,Vue-cli 基于 Webpack 开发。Vue 3 发布后,尤大同时发布了 Vite ,那么 Vue 3 同时有两个前端打包工具 Vite 和 Vue CLI,那么他们俩应该怎么选呢?
4918 0