全部产品

基础播放器

更新时间:2019-04-18 15:22:18

一、概念说明

1. 基础播放器:提供播放视频的基础能力,仅支持URL的方式播放,建议使用阿里云CDN+OSS存储或使用其他第三方服务的用户使用。

2. 防盗链:通过判断request请求头的refer是否来源于本站的方式来决定视频是否能被播放。(在点播或CDN控制台设置referer)具体设置方法查看防盗链设置

3. 动态库:播放器SDK以动态库的方式提供链接,在iOS集成时需要注意将SDK在target-general-embedded binaries里面添加。

二、使用流程

2.1 基本流程

基础版播放器拥有普通播放器的基本功能(详见:产品介绍),配合CDN+OSS、点播服务和直播服务获取播放地址,集成基础播放器SDK框架(仅需集成AliyunPlayerSDK.framework即可),然后调用播放器的URL播放接口即可播放视频或观看直播。基础版使用流程

2.2 答题播放使用流程

直播答题通过定制版OBS或者阿里云OpenAPI在直播流中插入SEI信息(题目信息),当播放器解析到SEI信息后,会回调给用户的App,此时用户就可以将题目的具体题目内容展示出来。具体流程如下:答题流程

备注:详细接入请查看 直播答题方案,按照说明提交工单申请接入。

注意:答题直播间的Demo仅展示基本流程,由于没有做用户系统,在做测试时,杀死App会作为退出直播间来处理,不然如果用户一直在直播间,如果错过了前面的答题就相当于被淘汰了。

三、SDK集成

3.1 系统支持

播放器SDK支持iOS8.0以上。

3.2 运行环境

建议使用XCode8.0以上版本进行编译。

3.3 如何导入

播放器SDK支持普通导入和Cocoapods两种导入方式,选择一种即可。

3.3.1 普通导入

一、下载播放器SDK

  1. 需要导入AliyunPlayerSDK.frameworkAliyunLanguageSource.bundle到工程中。
  2. 播放器SDK_3.4.2版本以上需要添加 AliThirdparty.framework 到工程中。
动态库文件夹

动态库文件夹

  1. arm文件夹:release版本,用于应用发布。
  2. arm&simulator文件夹:debugrelease通用版本,用于模拟器和真机测试。
  3. AliyunLanguageSource.bundle 多语言库
  4. AliyunPlayerSDK.framework 基础播放器动态库
  5. AliyunVodPlayerSDK.framework :高级播放器动态库
  6. AliThirdparty.framework : ffmpeg3.3.0)等第三方库

备注:AliThirdparty.framework:播放器SDK version_3.4.2版本开始使用.

二、打开工程,选中目标target,依次选择”General”->”Embededed Binaries”,点击”+”号,点击“Add Other…”,基础播放器仅需导入下载好的AliyunPlayerSDK.framework到项目中,并勾选copy选项。

  1. 项目目录结构,以Demo项目为例。

04171814002

  1. 集成动态库

04171815003

  1. Build Phases目录结构

04171816004

  1. import

04171819006

三、设置Build Settings → Build Options → Enable Bitcode为YES。

备注:Bitcode参数,播放器SDK_3.4.2及以后版本都设置为YES;播放器SDK_3.4.2之前版本设置为NO,不包含3.4.2版本。

04171820007

3.3.2 Cocoapods导入

一、添加如下语句加入你的Podfile文件中。

  1. pod 'AliyunPlayer_iOS/AliyunPlayerSDK'

106

二、 执行pod install或者pod update后集成SDK到项目工程。

  1. pod install :每次你编辑你的Podfile(添加、移除、更新)的时候使用

三、 运行项目名.xcworkspace文件打开工程

四、SDK使用

4.1 播放器初始化

在需要使用播放器SDK的controller里面引入#import <AliyunPlayerSDK/AliVcMediaPlayer.h>

viewDidLoad里面添加如下初始化方法:

  1. //创建播放器
  2. self.mediaPlayer = [[AliVcMediaPlayer alloc] init];
  3. //创建播放器视图,其中contentView为UIView实例,自己根据业务需求创建一个视图即可
  4. /*self.mediaPlayer:NSObject类型,需要UIView来展示播放界面。
  5. self.contentView:承载mediaPlayer图像的UIView类。
  6. self.contentView = [[UIView alloc] init];
  7. [self.view addSubview:self.contentView];
  8. */
  9. [self.mediaPlayer create:self.contentView];
  10. //设置播放类型,0为点播、1为直播,默认使用自动
  11. self.mediaPlayer.mediaType = MediaType_AUTO;
  12. //设置超时时间,单位为毫秒
  13. self.mediaPlayer.timeout = 25000;
  14. //缓冲区超过设置值时开始丢帧,单位为毫秒。直播时设置,点播设置无效。范围:500~100000
  15. self.mediaPlayer.dropBufferDuration = 8000;

4.2 设置播放器通知事件

viewDidLoad里面注册播放器通知,具体代码如下

  1. //一、播放器初始化视频文件完成通知,调用prepareToPlay函数,会发送该通知,代表视频文件已经准备完成,此时可以在这个通知中获取到视频的相关信息,如视频分辨率,视频时长等
  2. [[NSNotificationCenter defaultCenter] addObserver:self
  3. selector:@selector(OnVideoPrepared:)
  4. name:AliVcMediaPlayerLoadDidPreparedNotification object:self.mediaPlayer];
  5. //二、播放完成通知。视频正常播放完成时触发。
  6. [[NSNotificationCenter defaultCenter] addObserver:self
  7. selector:@selector(OnVideoFinish:)
  8. name:AliVcMediaPlayerPlaybackDidFinishNotification object:self.mediaPlayer];
  9. //三、播放器播放失败发送该通知,并在该通知中可以获取到错误码。
  10. [[NSNotificationCenter defaultCenter] addObserver:self
  11. selector:@selector(OnVideoError:)
  12. name:AliVcMediaPlayerPlaybackErrorNotification object:self.mediaPlayer];
  13. //四、播放器Seek完成后发送该通知。
  14. [[NSNotificationCenter defaultCenter] addObserver:self
  15. selector:@selector(OnSeekDone:)
  16. name:AliVcMediaPlayerSeekingDidFinishNotification object:self.mediaPlayer];
  17. //五、播放器开始缓冲视频时发送该通知,当播放网络文件时,网络状态不佳或者调用seekTo时,此通知告诉用户网络下载数据已经开始缓冲。
  18. [[NSNotificationCenter defaultCenter] addObserver:self
  19. selector:@selector(OnStartCache:)
  20. name:AliVcMediaPlayerStartCachingNotification object:self.mediaPlayer];
  21. //六、播放器结束缓冲视频时发送该通知,当数据已经缓冲完,告诉用户已经缓冲结束,来更新相关UI显示。
  22. [[NSNotificationCenter defaultCenter] addObserver:self
  23. selector:@selector(OnEndCache:)
  24. name:AliVcMediaPlayerEndCachingNotification object:self.mediaPlayer];
  25. //七、播放器主动调用Stop功能时触发。
  26. [[NSNotificationCenter defaultCenter] addObserver:self
  27. selector:@selector(onVideoStop:)
  28. name:AliVcMediaPlayerPlaybackStopNotification object:self.mediaPlayer];
  29. //八、播放器状态首帧显示后发送的通知。
  30. [[NSNotificationCenter defaultCenter] addObserver:self
  31. selector:@selector(onVideoFirstFrame:)
  32. name:AliVcMediaPlayerFirstFrameNotification object:self.mediaPlayer];
  33. //九、播放器开启循环播放功能,开始循环播放时发送的通知。
  34. [[NSNotificationCenter defaultCenter] addObserver:self
  35. selector:@selector(onCircleStart:)
  36. name:AliVcMediaPlayerCircleStartNotification object:self.mediaPlayer];
  37. //十、直播答题接收的SEI数据消息,收到SEI通知后就可以展示SEI对应的题目了。
  38. [[NSNotificationCenter defaultCenter] addObserver:self
  39. selector:@selector(onSeiData:)
  40. name:AliVcMediaPlayerSeiDataNotification object:self.mediaPlayer];

注册通知后通过相关的事件去接收这些事件,记得在播放器或界面销毁时移除这些通知。

4.3 准备播放

在开始播放前,播放器必须先prepare,示例如下:

  1. //本地视频,填写文件路径
  2. NSURL *url = [NSURL fileURLWithPath:@""];
  3. //网络视频,填写网络url地址
  4. NSURL *url = [NSURL URLWithString:@""];
  5. //prepareToPlay:此方法传入的参数是NSURL类型.
  6. AliVcMovieErrorCode err = [self.mediaPlayer prepareToPlay:url];

4.4 播放器各种控制功能

用户自行创建播放器的播放控制按钮,在按钮事件里面实现播放器控制接口。基本控制功能有播放、停止、暂停、恢复、重播、Seek,其中Seek功能仅对点播有效,直播使用暂停时会停留在当前直播画面,恢复后进入当前直播画面。具体示例如下:

  1. //开始播放
  2. [self.mediaPlayer play];
  3. //停止播放
  4. [self.mediaPlayer stop];
  5. //暂停播放
  6. [self.mediaPlayer pause];
  7. //恢复播放,在暂停后再调用play接口即为恢复播放
  8. [self.mediaPlayer play];
  9. //重播
  10. //1.首先停止本次播放
  11. [self.mediaPlayer stop];
  12. //2.重新prepareToPlay
  13. AliVcMovieErrorCode err = [self.mediaPlayer prepareToPlay:url];
  14. //3.重新播放
  15. [self.mediaPlayer play];
  16. //Seek,跳转到指定时间点的视频画面,时间单位为毫秒
  17. [self.mediaPlayer seekTo:25000];

4.5 播放进度和时间

播放的当前时间和播放时长在prepare成功之后可以获取。

  1. //获取播放的当前时间,单位为毫秒
  2. NSTimeInterval currentTime = self.mediaPlayer.currentPosition
  3. //获取视频的总时长,单位为毫秒
  4. NSTimeInterval duration = self.mediaPlayer.duration
  5. //计算当前进度,可以把当前进度值设置给进度条在界面上显示
  6. float progress = currentTime/duration

4.6 倍数播放

在播放器创建之后可调用倍数播放功能,在开始播放之前和之后都可以起作用,此功能仅对点播有效。示例代码如下:

  1. //倍数播放支持0.5~2倍的设置,支持音频变速不变调。
  2. /*
  3. *playSpeed:范围0.5~2;playSpeed=1时,为正常播放速度;playSpeed<1时,慢速播放;playSpeed>1时,加速播放。
  4. */
  5. self.mediaPlayer.playSpeed = 1.5;

4.7 循环播放控制

用户是否开启循环播放功能,default:NO;YES:播放器结束自动在次播放当前视频。

  1. self.mediaPlayer.circlePlay = YES;

4.8 截取当前正在播放图像

获取当前播放器时间点播放图片,返回类型:UIImage。

  1. UIImage*image = [self.mediaPlayer snapshot];

4.9 渲染视图角度

设置渲染视图角度,可设置为0°,90°,180°和270°,默认为0°,角度按顺时针计算。

  1. [self.aliPlayer setRenderRotate:renderRotate0];

4.10 渲染镜像

设置渲染镜像,提供水平镜像和垂直镜像设置,默认为无镜像。

  1. [self.aliPlayer setRenderMirrorMode:renderMirrorModeNone];

4.11 后台播放

参考下图设置:Target-Capabilities-Background Modes 打开,选择Audio,AirPlay and Picture in Picture选项即可。后台播放

4.12 其他功能

播放器还提供了音量控制、静音、亮度调节、显示模式设置等接口。示例代码如下:

  1. //设置播放器音量(系统音量),值为0~1.0
  2. [self.mediaPlayer setVolume:0.8];
  3. //设置为静音
  4. [self.mediaPlayer setMuteMode:YES];
  5. //设置亮度(系统亮度),值为0~1.0
  6. [self.mediaPlayer setBrightness:0.5];
  7. //设置显示模式,可设置为fit方式填充或corp方式裁剪充满
  8. [self.mediaPlayer setScalingMode:scalingModeAspectFit];

4.13 referer设置

客户端发送视频播放器请求时带上referer信息。(同时支持地址和vid播放)。使用流程如下:

  1. 控制台-防盗链-开启防盗链
  2. 添加黑白名单(黑名单:如果设置referer是被添加的域名,则不能访问,白名单:如果设置的referer被添加到白名单的域名才可以访问)
  3. 默认不选中允许空referer,如果允许空refer,则客户端不设置referer是可以访问的。如果设置了,但是错误的,则不能访问。

示例代码:

  1. [self.mediaPlayer setReferer:@""];

更多请参功能和接口请参考接口文档

五、注意事项

  1. SDK提供的是动态链接库,请参考SDK导入说明中动态库的方式添加,集成后包大小增加 4MB。
  2. 当前SDK仅支持HLS、RTMP、HTTP FLV、mp4、mp3等流格式,支持的视频编码格式为H264,音频编码格式为AAC。建议使用MTS或点播平台转码后使用。
  3. 适配iPhone5S以上机型,低端机型在使用变速功能时可能存在性能问题。
  4. 当前ffmpeg版本为V3.3。