阿里云移动端播放器高级功能---视频下载

基本介绍
优酷、爱奇艺、腾讯等主流的视频类App都有视频离线下载的功能,主要目的是在wifi下将视频离线在本地,然后在无网或者4G的情况下去观看离线视频。那么阿里云播放器也提供了视频下载的功能。这个功能主要针对的是点播视频,也就是vid播放的视频的下载。

主要问题
m3u8如何下载?我们知道m3u8是一个索引文件,真正的视频文件是各个ts的分片,那么如何下载成一个完成的视频呢?
如何对视频下载进行多线程控制?在一些app中,多个视频同时下载被认为是高级VIP才有的功能。
如何实现断点续传?当在下载过程中突然中断了,那么下次再启动的时候要能够实现续传。
下载过程中sts等信息过期怎么处理?
加密的视频下载到本地如何保障安全性呢?
实现原理
下载过程
阿里云播放器支持mp4文件和m3u8视频文件两种格式下载。其下载过程基本一致。流程图如下:

从上述流程图中可以看到,m3u8文件的下载我们会mux成一个mp4文件,首先将各个ts文件分别下载,最后的过程中再进行mux。

多线程控制
/
功能:设置同时下载的数量,最大4个
参数:count:同时下载的个数
/
-(void)setMaxDownloadOperationCount:(int)count;

通过上述的接口,可以设置并行下载的个数。当添加到队列中的数量多于这个设定的个数后,会在队列中进行等待,当之前的下载完成后会自动进行下一个视频的下载。

异常中断
经常有的情况是:不小心将app杀掉了,或者手机没电关机了等其他中断的因素。这个时候下次下载的时候要能够恢复之前的现场。我们提供了一个回调来通知app:

/
功能:未完成回调,异常中断导致下载未完成,下次启动后会接收到此回调。
回调数据:AliyunDownloadMediaInfo数组
/
-(void) onUnFinished:(NSArray<AliyunDataSource>)mediaInfos;

过期处理
通过vid的方式进行下载,同样支持vid+playAuth,vid+sts,vid+mps的方式进行播放,将这些信息添加到队列中,如果之前一个视频下载时间较长,那么后面排队的视频的输入信息可能会过期。针对这种情况,我们增加了过期的回调来重新输入信息:

/
功能:开始下载后收到回调,更新最新的playAuth。主要场景是开始多个下载时,等待下载的任务自动开始下载后,playAuth有可能已经过期了,需通过此回调更新
参数:返回当前数据
返回:使用代理方法,设置playauth来更新数据。
备注:如通过请求数据来获取playAuth,请使用同步方法。此代理方法在其他线程里,不会存在卡线程问题。
/
-(NSString)onGetPlayAuth:(NSString)vid format:(NSString*)format quality:(AliyunVodPlayerVideoQuality)quality;

/
功能:开始下载后收到回调,更新最新的stsData。主要场景是开始多个下载时,等待下载的任务自动开始下载后,stsData有可能已经过期了,需通过此回调更新
参数:返回当前数据
返回:使用代理方法,设置AliyunStsData来更新数据。
备注:如通过请求数据来获取stsData,请使用同步方法。此代理方法在其他线程里,不会存在卡线程问题。
/

  • (AliyunStsData)onGetAliyunStsData:(NSString )videoID
    format:(NSString*)format
    quality:(AliyunVodPlayerVideoQuality)quality;

/
功能:开始下载后收到回调,更新最新的MtsData。主要场景是开始多个下载时,等待下载的任务自动开始下载后,MtsData有可能已经过期了,需通过此回调更新
参数:返回当前数据
返回:使用代理方法,设置AliyunMtsData来更新数据。
备注:如通过请求数据来获取mtsData,请使用同步方法。此代理方法在其他线程里,不会存在卡线程问题。
/

  • (AliyunMtsData)onGetAliyunMtsData:(NSString )videoID
    format:(NSString)format
    quality:(NSString
    )quality;

加密下载
加密下载到本地,如何保证安全呢?有几个问题就是下载后我们需要重新加密,防止密钥泄露。同时另外一个就是要防止视频被拷贝到其他app中进行播放。比如存在下面的场景。

所以我们通过将用户密钥和用户app绑定的方式来保证安全性。
那么如何来做呢?

控制台配置
如果希望实现加密下载,需要在阿里云控制台配置下载选项为安全下载。同时,填写校验及加密相关信息。截图如下:

填写完成之后,控制台将会生成一个dat校验文件。这个校验文件需要配置到阿里云下载模块中,供校验使用。

使用dat文件
有了dat文件后,我们将文件设置到播放器中,通过如下接口:

/
功能:设置加密文件
参数:encrptyFile为加密文件路径
/
-(void)setEncrptyFile:(NSString*)encrptyFile;

下载功能示例
以Android为例,Android 提供了AliyunDownloadManager这个单例类实现下载功能。

配置AliyunDownloadConfig
下载之前,需要配置AliyunDownloadConfig。AliyunDownloadConfig中需要配置如下几个参数:

setMaxNums: 设置最大同时下载的个数。
setDownloadDir: 设置下载的文件保存的位置。
setSecretImagePath: 设置校验文件的路径。 其中:setSecretImagePath只需要在加密下载的时候设置。其余两个参数均需要设置。
获取视频信息并下载
阿里云播放器支持 STS ,AUTH,MPS 等多种方式下载。以STS举例。

  1. 通过sts信息,调用prepare接口,获取可以下载的视频项:

//1.设置下载监听
downloadManager = AliyunDownloadManager.getInstance(getContext());
downloadInfoListener = new MyDownloadInfoListener(this);
downloadManager.addDownloadInfoListener(downloadInfoListener);
//2.使用vidsts准备下载资源。
AliyunVidSts adb = new AliyunVidSts();
adb.setVid(mVid);
adb.setAcId(akid);
adb.setAkSceret(akSecret);
adb.setSecurityToken(token);
downloadManager.prepareDownloadMedia(adb);

prepare成功后,添加某一项到AliyunDownloadManager中,并开始下载:阿里云移动端播放器高级功能---视频下载

原文地址:https://blog.51cto.com/14031893/2353621

时间: 2024-09-30 19:54:59

阿里云移动端播放器高级功能---视频下载的相关文章

阿里云移动端播放器高级功能---画面控制

基本介绍经常遇到一些开发者问:1.我们播放的时候,会有黑边怎么处理?尤其是在类似于抖音,直播这样的场景下,如果视频有黑边,很影响画面的视觉效果.而阿里云播放器提供了缩放功能,用来去除黑边,达到视频全屏的效果.2.直播时摄像头采集经常会遇到反向的问题,就是采集出来的视频画面中的字是反的,对于这种情况怎么处理呢?阿里云播放器提供了镜像的功能,可以水平和垂直镜像,让画面变成你想要的样子.3.对一些横屏拍摄的视频同时我们提供了旋转功能,可以选择90.270度,旋转之后就可以实现全屏渲染了. 渲染模式设置

阿里云移动端播放器高级功能---截图和音频波形

基本介绍如果用户对视频播放中的某一帧画面特别感兴趣,可以使用截图功能将这一帧视频保存起来.另外有一种场景想知道是否有声音,或者想感知声音的大小震动频率等,可以通过显示一个声音的波形来形象的表示.如下图所示:那么播放器提供了类似的方法可以让用户有办法去实现音频波形这个功能.那么这种通常在音乐播放器中比较常见,或者在直播场景中来标识对方讲话是否有声音等,有一定的应用场景. 视频截图实现接口iOS接口如下: /** 功能:截取当前正在播放图像 /-(UIImage) snapshot;Android接

【大数据技术干货】阿里云伏羲(fuxi)调度器FuxiMaster功能简介(三) 针对在线服务的资源强稳定

免费开通大数据服务:https://www.aliyun.com/product/odps 转载自xingbao 各位好,这是介绍阿里云伏羲(fuxi)调度器系列文章的第三篇,今天主要介绍针对在线服务的资源强稳定 一.FuxiMaster简介 FuxiMaster和Yarn非常相似,定位于分布式系统中资源管理与分配的角色:一个典型的资源分配流程图如下所示: 作为调度器,目前FuxiMaster支持的功能主要有: 1.多租户管理 2.支持FIFO/FAIR调度策略 3.针对在线服务保持资源强稳定(

实现了一下Mp3播放器的功能

实现了一下Mp3播放器的功能 简单的实现了一下Mp3播放器的功能,见面比较的不美好,讲 究看一下就好了. 主要功能: 1.显示文件列表,主要参照了一位前辈的代码,谢咯. 2.可以实现播放开始,暂停. 3.文件过滤 Java代码  收藏代码 return f.isDirectory() || f.getName().endsWith (".mp3"); 其实还有很多想实现的: 1.进度条. 2.按键进入下一首歌. 3.美化一下. =============================

高仿天天动听音乐播放器,可联网下载歌词_Android源码

Android源码仿天天动听音乐播放器,可联网下载歌词 功能分类:影音 支持平台:Android 运行环境:Eclipse 开发语言:Java 开发工具:Eclipse 源码大小:1.94MB 下载地址:http://www.dwz.cn/wGVt2 源码简介 Android源码仿天天动听音乐播放器,可联网下载歌词. 源码运行截图

你也可以用java的swing可以做出这么炫的mp3播放器_源码下载

I had published the blog : 你用java的swing可以做出这么炫的mp3播放器吗? and to display some screenshots about this MP3 Player. The target for this blog is that to publish the source code, and you can download the source code and give me some advices if possible. The

Android源码仿天天动听音乐播放器,可联网下载歌词

支持平台:Android      运行环境:Eclipse        开发语言:Java 下载地址:http://www.devstore.cn/code/info/203.html 源码简介 Android源码仿天天动听音乐播放器,可联网下载歌词. 源码运行截图

跟阿里云技术专家阙寒一起深度了解视频直播CDN技术

网络直播平台现下已经十分火热,很多常见的直播平台都采用了阿里云直播CDN来搭建自身业务.今天,我们请来了阿里云CDN团队技术专家阙寒,来介绍下视频的一些基础知识和视频直播的架构. 在进入正题之前,我们先来了解视频直播相关的名词含义是什么?扫个盲 通常我们所说的视频,是指连续的图象变化每秒超过24帧(Frame)画面以上时,根据视觉暂留原理,人眼无法辨别单幅的静态画面,看上去是平滑连续的视觉效果,这样连续的画面叫做视频. 而媒体转码是指将一段多媒体包括音频.视频或者其他的内容从一种编码格式转换成为

Android开发本地及网络Mp3音乐播放器(十八)新下载歌曲加载准备SdcardSearchToList

扫描本地文件加载到item 不限于应用到音乐播放器,其他Android工程,也可以使用SdcardSearchToList 其他Android工程也可以使用,我现在做了很小的Demo 后续将博文,将在播放器里,加入这一功能,来实现刚下载好的音乐,加载到播放器 这个Demo的源码下载: http://download.csdn.net/album/detail/3105 名称为:SdcardSearchToList,如果没有显示,可能还没有审核完成 不下载也可以,因为只有1个java文件,2个xm