Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android短视频边下边播详解

Android短视频边下边播详解

作者头像
MelonTeam
发布于 2018-01-04 09:27:33
发布于 2018-01-04 09:27:33
7.2K0
举报
文章被收录于专栏:MelonTeam专栏MelonTeam专栏

短视频作为一种常见的富媒体信息载体已经在移动互联网上得到非常普遍的应用,比如Snapchat、微信、手Q日迹等。由于手机网络流量珍贵且带宽有限,应用通常不会直接在线播放视频,而是把视频完整下载到本地后再进行播放,但是下载完整视频需要时间,尤其是视频较大或在网络较差的情况下等待下载的时间就会更长,容易影响用户体验。于是我们想到了边下载边播放,既不浪费流量,也不占用等待时间。下面我们将分别对它的几个实现要点进行详细讲述。

【视频格式】    

 想要实现边下边播,首先我们需要了解一下视频文件格式。一般情况下,视频文件结构如下所示:

内容元素主要包括:

  • 图像(image)
  • 音频(audio)
  • 元信息(metadata) 编码格式(codec)主要包括:
  • video:H.264、H.265、…
  • audio:AAC、HE-AAC、… 容器封装(container)主要包括:
  • MP4、FLV、AVI、MOV、RMVB、…

播放器在播放视频文件时,之所以知道该怎么去解码,以什么样的时间间隔去显示每一帧,是因为metadata记录了当前视频文件的图像尺寸、编码格式、帧率、码率等等信息,播放器通过解析metadata得到了这些信息,才能控制视频的显示,也就是说播放器要先解析完metadata才会开始播放。  

我们拿MP4作为例子来说明,不同容器的封装在数据存储上会存在一些差异,MP4视频文件结构如下所示:

它对应的metadata信息称为moov,mdat包含了音频和视频数据。MP4在实际制作中,moov有可能被放到了mdat后面,所以我们要保证制作出来的MP4的moov是放置在mdat前面的,这样才可以实现边下边播功能。如果不是这样,可以用FFmpeg的faststart命令(ffmpeg -i input.mp4 -movflags +faststart output.mp4)处理一下。        另外值得一提的是,如果moov比较大,播放器需要较多的时间去解析,所以在播放之前可能会出现较长的缓冲时间,特别是视频文件较大的情况下,所以现在有些点播网站会采用每段mdat都有自己独立的metadata的封装方式,这样就可实现渐进式下载和快速缓冲的效果。

【本地代理】

在确保视频文件的metadata在头部后,我们只要完整下载metadata,再加上少许音视频数据,就可以开始播放视频了,那么如何实现“边下”呢?我们都知道,Android平台上要播放视频,最基本的方式就是实例化一个MediaPlayer, 将视频的URL通过setDataSource()设置给播放器,之后调用prepare()或prepareAsync()和start()就可以开始播放视频了。于是我们很容易想到将MediaPlayer的视频源设置为本地文件,然后通过子线程不断将下载数据追加到该文件,但笔者经过验证,这种做法会经常导致MediaPlayer各种报错,无法顺利播放。    

 经过深入调研,很遗憾MediaPlayer并没有提供类似可以拦截URL或文件流的API可以让我们将视频文件保存到本地(然而,iOS视频播放器有提供了类似接口)。所以我们换了一个思路,就是当播放器请求播放远程视频文件时,我们将远程URL篡改成本地URL,播放器播放视频时不再是直接访问远程视频文件,而是先访问本地代理,本地代理再去下载远程视频,下载多少就给播放器输送多少,这样就实现了边下边播,我们将这种做法称之为本地代理服务器

数据流程】 播放器请求本地代理服务器的数据流程如下图:

1、播放器播放之前,先把网络视频的远程url替换成本地的url(类似http://127.0.0.1/xxx);

2、播放器开始播放时将本地url请求发给proxy server;

3、proxy server根据本地url在本地缓存中查找是否存在该视频,如果存在则直接跳到步骤7,如果不存在,则进入步骤4;

4、proxy server根据视频远程url向视频server请求下载视频数据;

5、视频server返回给proxy server视频数据;

6、proxy server将返回的视频数据缓存到本地,并且处理其他业务逻辑;

7、proxy server将视频数据返回给播放器,播放器开始播放。 比起播放器直接播放网络视频,Proxy的做法使得视频的播放和下载在一定程度上变得可控,除了能够提供边下边播能力以外,还可以增加额外的视频相关业务逻辑,比如缓存、预下载、防盗链等等。

【技术架构】

  Proxy Server的http服务器实现可以参考一些开源项目如NanoHttpd,但如果想自己实现也不会很难,我们一起来看下它的技术架构,如下所示:

  • proxy server为播放器提供http服务,是一个本地http服务器,内部通过线程轮询监听播放器请求,可以支持get和range header的请求和响应,range 主要用来支持视频断点续传或播放拖拽功能;
  • 由于播放器可能会有多个请求或多个播放器同时请求,所以需要线程池来支持并发请求;
  • 当播放器发起视频下载请求,proxy首先会根据url在本地缓存查找对应的视频文件,如果找到就直接返回数据给播放器,如果没有找到,proxy会向视频server发起http请求;
  • 由于SD卡空间有限,下载后的视频采用LRU算法进行淘汰。

【缓存淘汰】

关于Proxy Server下载的视频缓存路径,由于手机内部存储空间有限,视频又比较大,不建议内部存储,所以可以放到SD卡上的路径/sdcard/Android/data//cache下,并且为了唯一标识文件,可以使用MD5(url)作为文件名。选择在这个位置有两点好处:第一,这是存储在SD卡上的,因此即使缓存再多的数据也不会对手机的内置存储空间有任何影响,只要SD卡空间足够。第二,这个路径被Android系统认定为应用程序的缓存路径,当程序被卸载的时候,这里的数据也会一起被清除掉,这样就不会出现卸载应用之后手机上还有残留数据的问题。      

 由于SD卡存储空间有限,下载的视频如果不清除很快就会爆满。或许我们可以在达到爆满之前给用户提醒要手动清除,但用户自己可能也很难做出正确的淘汰判断,而且经常提醒会让用户容易厌烦,所以我们可以使用LRU(Least Recently Used,近期最少使用算法)来实现视频的自动清除,它是一种较为常见的缓存淘汰算法,其核心思想是“如果数据最近经常被访问过,那么将来被访问的几率也更高,反之就应该被淘汰”。缓存淘汰的逻辑流程如下所示:

  • 触发时机:因缓存淘汰需要遍历所有视频并排序,视频数量多会比 较耗IO和CPU,所以可以选择应用进入后台再异步进行;
  • 淘汰条件:视频总数超过300个,视频总大小超过500M,视频过期 (未使用超过1周),具体数值可根据需求动态配置。

【安全设计】    

手机连接网络,实际上是通过运营商网关(SGSN和GGSN)做一个网络地址转换(Network Address Translation,NAT),实现内网IP和外网IP的映射,从而连接上了Internet,所以手机移动网络实际上是一个大型的“局域网”。

 由于Proxy Server本质是一个http服务器,启动时会随机开放一个端口,如此一来,就相当于将本地服务端口暴露给整个手机网络,在这种情况下,黑客可以在这个大“局域网”内扫描出开放的端口,然后再伪造非法url模拟请求。臭名昭著的“WormHole虫洞漏洞”就是该漏洞的典型,其根本原因就是没有对请求进行限制和验证,而本身又提供了敏感服务,让黑客有机可乘。

明白了攻击原理,我们就知道如何预防,措施如下:

1、对请求url进行规则限制,只接受特定的url请求;

2、对请求者进行身份验证,只接受播放器发起的请求,这里使用了消息摘要算法HMAC-MD5或HMAC-SHA1,并对其稍作改造:

1).播放器请求时,生成一个随机数random_key;

2).将random_key作为密钥,url和timestamp作为输入,使用HMAC-MD5/SHA1生成一个hash值sign,然后将该字符串追加到url后面,向proxy发起请求,如下图所示:

3).proxy收到请求后,先验证timestamp是否超过时间限制,防止重放攻击,接着根据random_key(本地获取)、url、timestamp使用同样的签名算法也生成一个签名字符串sign,然后和请求的sign比对,如果一致,则认为是授权的,否则就拒绝请求,如下图所示:

综上所述,为了实现短视频的边下边播功能,本文首先分析了实现“边播”的要点在于视频的Metadata要在头部,然后分析了“边下”的实现方案,提出本地代理并对其架构进行说明,接着介绍如何使用LRU对缓存视频进行淘汰,最后针对本地代理可能存在的安全性问题进行了思考并给出解决方案。通过文章全篇分析可以看出,边下边播其实是“短视频类应用”播放短视频的较好的通用解决方案,因此笔者后续会将本文描述的解决方案的代码封装成组件提供出来,供类似场景快速复用。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
预装恶意软件-教你如何用cmd命令清除流氓软件
  有时候在使用电脑的时候会不小心下载安装到一些流氓软件预装恶意软件,卸载又卸载不掉,提示没有权限等情况怎么办呢?我们可以采用cmd删除软件的方法解决。很多网友不知道如何用cmd命令清除软件,下面小编就教下大家cmd命令清除流氓软件的方法。
宜轩
2022/12/29
1.5K0
揭秘“食鼠猫”病毒背后的灰色产业链
“食鼠猫”样本主要通过虚假色情播放器等流氓软件的捆绑安装进行传播,感染主机会被强制安装多款推广软件,病毒通过篡改浏览器快捷方式、Hosts文件等方式劫持用户电脑的导航网站流量,病毒导入根证书伪造数字签
FB客服
2018/02/05
1.4K0
揭秘“食鼠猫”病毒背后的灰色产业链
能ping通外网dns但不能上网一例
一个win7本本仅通过一个无线路由一个人上网,突然一天不能上网了,甚是奇怪,一看本地连接均是正常的.而且能ping通外网的dns,但无论如何就是打不开网页,表现为输入任何网址很迅速的显示该页无法显示,好像浏览器并没有提交任何url就做出了反应一样.其它客户端诸如QQ,迅雷等都一样不能访问因特网. 分析,由于能ping通外网,并且是自动从路由获得的ip,子网,网关,dns信息,所以可以肯定的是路由肯定是没有问题的,把dns手动更换为8.8.8.8也无济于事.由此可断问题,肯定出现在本机上. 这个现像就是Win
hbbliyong
2018/03/05
7.3K0
史上最全Windows安全工具锦集
近日,深信服安全团队整理了一些常见的PE工具、调试反汇编工具、应急工具、流量分析工具和WebShell查杀工具,希望可以帮助到一些安全行业的初学者。
FB客服
2019/10/16
3.4K0
CleanMyMac X最受欢迎的电脑清理软件
如果Mac 电脑经常卡机、死机、速度很慢,跳出“存储过满”等问题,那么就需要用到世界上最受欢迎的电脑清理软件之一CleanMyMac X,它提供免费试用版,会告诉您可以释放多少磁盘空间,使用更多功能的完整版更能优化和保护 Mac 计算机,让速度大大提升。网上对CleanMyMac X的评论有的超级正面,有的超级负面,甚至有的“专家”说它是流氓软件,然后我们从实际出发,在测评这款清理软件之后,我们100% 支持它,因为它真的效果好,确实比市面上任何Mac 清理软件好用,价格不是最便宜的,但值得拥有,它在清理文件、改善隐私、删除垃圾或恶意软件以及提高设备的使用寿命和保持性能方面创造了奇迹。
用户7442547
2022/08/20
5570
常见的木马分类你知道
木马又称“间谍软件spyware”、“后门程序backdoor”,最新发展为“恶意程序”或叫“流氓程序”。
知识与交流
2021/04/02
2.7K0
6款卸载软件,geek,HiBit uninstaller,SoftCnkiller,UninstallTool,RevoUnistaller,阿香婆卸载
本文将介绍6款专业的卸载软件,包括geek\HiBit ninstaller\SoftCnkiller\UninstallTool\RevoUnistaller\阿香婆卸载等。
小焱
2025/05/29
1.2K0
6款卸载软件,geek,HiBit uninstaller,SoftCnkiller,UninstallTool,RevoUnistaller,阿香婆卸载
披露报告:流氓家族窃取用户浏览隐私活动
近期毒霸安全团队通过“捕风”威胁感知系统监控到一起大规模窃取用户浏览器隐私的流氓病毒活动,源头为“上海**网络科技有限公司”旗下的“**看看”软件,除了收集主流浏览器的历史访问记录外,还会定向收集“m**v.com”的cookies上报,推测属于第三方广告营销平台合作行为,可能被用于广告营销商业效果评估等用途。
FB客服
2019/12/03
9560
CleanMyMac X免费试用版功能特点介绍
如果Mac 电脑经常卡机、死机、速度很慢,跳出“存储过满”等问题,那么就需要用到世界上最受欢迎的电脑清理软件之一CleanMyMac X,它提供免费试用版,会告诉您可以释放多少磁盘空间,使用更多功能的完整版更能优化和保护 Mac 计算机,让速度大大提升。网上对CleanMyMac X的评论有的超级正面,有的超级负面,甚至有的“专家”说它是流氓软件,然后我们从实际出发,在测评这款清理软件之后,我们100% 支持它,因为它真的效果好,确实比市面上任何Mac 清理软件好用,价格不是最便宜的,但值得拥有,它在清理文件、改善隐私、删除垃圾或恶意软件以及提高设备的使用寿命和保持性能方面创造了奇迹。
用户7442547
2022/10/01
6.1K0
揭秘恶意软件的罕见感染方式
当被问及“目标是如何感染恶意软件的?”我们的答案几乎总是一样的:(鱼叉式)网络钓鱼!当然也会有例外,因为我们会时不时地遇到远程代码执行(RCE)漏洞,或者如果攻击者已经在网络上,他们会使用PsExec之类的工具。但即便如此,大多数时候的感染途径确实是网络钓鱼。 不过,即便恶意行为者仍将电子邮件作为主要感染媒介,但也不应排除其他方法。恶意软件开发人员正在不断更新他们的传播方式。为了更好地识别和预防恶意软件攻击,接下来,我们为大家总结了一些罕见的恶意软件感染和传播路径。 Black Basta:一种新的传播
FB客服
2023/04/26
6760
揭秘恶意软件的罕见感染方式
新型勒索病毒软件GruxEr来袭:深度分析如何传播、加密及如何删除
本文旨在帮助您清除Gruxer ransomware感染,并通过此ransomware病毒恢复AES加密文件。 据报道,GruxEr名称的ransomware感染会加密其感染的计算机上的文件,然后在受害者的BitCoin中要求250美元的赎金来获取文件。该病毒已于二零一七年五月初发现,自此以来一直遭到破坏。它丢下一张赎金票据,要求受害者不要关闭他们的电脑,否则文件将永久丢失。如果您的计算机被GruxEr ransomware 威胁感染,您应该彻底阅读以下文章,了解如何从计算机中删除它并恢复受此感染加密的
FB客服
2018/02/24
1.4K0
新型勒索病毒软件GruxEr来袭:深度分析如何传播、加密及如何删除
QQ被曝自动读取浏览器记录,Chrome、Edge和360等无一幸免
这位网友在电脑上安装了火绒,原本只是用于保护重要数据。没想到,直接拦截了QQ的读取操作:
量子位
2021/01/28
7850
QQ被曝自动读取浏览器记录,Chrome、Edge和360等无一幸免
免杀入门教程及新手常见问题解答(一)
锦鲤安全的技术文章仅供参考,此文所提供的信息仅供网络安全人员学习和参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。如有侵权烦请告知,我们会立即删除并致歉。本文所提供的工具仅用于学习,禁止用于其他,请在24小时内删除工具文件!谢谢!
Creaper
2023/11/20
4K0
免杀入门教程及新手常见问题解答(一)
【应急响应】windows入侵排查思路
当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事故过程,同时给出解决方案与防范措施,为企业挽回或减少经济损失。
Bypass
2019/07/08
2.8K0
【应急响应】windows入侵排查思路
创建简单、免费的恶意软件分析环境
原文:https://www.malwaretech.com/2017/11/creating-a-simple-free-malware-analysis-environment.html 译者:hello1900@知道创宇404实验室 计算机要求: CPU支持AMD-V 或Intel VT-x(任何调试解调器CPU均适用); 4GB RAM(容量越大越好)。 确保启用BIOS虚拟化(AMD-V或Intel VT-x)。需要谷歌搜索“enable virtualization”以及BIOS或主板版本号并遵
Seebug漏洞平台
2018/03/30
1.7K0
windows 应急流程及实战演练
当企业发生黑客入侵、系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事故过程,同时给出解决方案与防范措施,为企业挽回或减少经济损失。
信安之路
2018/10/18
3.1K0
windows 应急流程及实战演练
Mac电脑垃圾清理软件CleanMyMac X4.13安装下载使用教程
当我们刚刚拿到那闪亮的新Mac时,是多么令人愉悦的一种感觉!随着时间的推移,你可能已经注意到它的速度减慢,磁盘空间逐渐减少。不用担心,CleanMyMac会为你的电脑带来焕然一新的体验。这篇文章将向你介绍CleanMyMac的奇妙之处,并通过实例和类比,帮助你更好地理解这款神奇软件的工作原理。cleanMyMac 是 Mac 上的一款系统清理软件,一直以来凭借着漂亮的外表与强大的内在独霸 Mac 清理领域,功能强大,界面优美,点按一下,即可优化调整整个 Mac!
用户7442547
2023/04/25
7670
相关推荐
预装恶意软件-教你如何用cmd命令清除流氓软件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档