
使用Cocoapods接入手段相当简单,可移步Cocoapods接入手段。
或者使用Cocoapods接入手段,可跳过上面的 开发前打算 和 XCode工程配置。
从 iOS 9.0 和 OS X v10.11 开始,默认开启 App Transport Security (ATS) 功能。ATS 强制使用 HTTPS 访问 Web 服务,如果必须使用 TLS v1.2 以上版本确保通信的安全性。ATS 的详实需求请参考:
或者 app 支持 iOS 9.0 而且需要访问不满足上述要求的 Web 服务,必须在 info.plist 文件中使用 NSAppTransportSecurity 元素添加例外处理规则。NSAppTransportSecurity 的应用原理请参考:
所以 AK 鉴权所访问的服务也不满足 ATS 的需求, 需要在 info.plist 文件设置如下配置,改动 ATS 对域名 drm.media.baidubce.com 的访问行为。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>drm.media.baidubce.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowInsecureHTTPSLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.0</string>
</dict>
</dict>
</dict>
将Baidu-T5Player-SDK-iOS-x.x.x/include 目录下的头文件 CyberPlayerController.h 添加到 Xcode 工程。
请在“Build Phases->Link Binary with Libraries” 添加iOS SDK的静态链接库。
请在“Build Phases->Link Binary with Libraries” 添加下表所列的系统库
表 6 SDK 依赖的框架
框架名 说明
libbz2.tbd
压缩工具
libz.tbd
压缩工具
AudioToolbox.framework
音频处理工具
将iOS SDK的静态链接库和功能的动态链接库设置完毕,下图所示:

上面介绍怎么读取播放器 SDK 中已封装的 API 完成各项操作。
CyberPlayerController 是iOS SDK的体系API,开发者必须先创建上述的事例才能播放音视频。需要分别设置视频播映地址和百度智能云Access Key

以上代码展示怎么用视频播映地址 URL 和 Access Key 创建并增设 CyberPlayerController。
CyberPlayerController *cbPlayerController = [[CyberPlayerController alloc] init];
NSURL *url = [NSURL URLWithString:@”<video url>”];
cbPlayerController.contentURL = url;
NSString* msAK=@"<AccessKey>";
[cbPlayerController setAccessKey:msAK];
注意
播放器在增设播放视频地址后播放器build,需要调用 prepareToPlay 方法对视频文件进行初始化工作。
初始化完成后将发送 CyberPlayerLoadDidPreparedNotification 通知,并将 isPreparedToPlay 属性置为 YES。
初始化完成后,或者 shouldAutoplay 属性为 YES,则自动读取 play 方法进行播放;如果 shouldAutoplay 属性为 NO,则等待调用 play 或 start 方法播放。
在开始阶段,播放器会先暂停一段时间,以便于缓存一定量的集锦,用来冲销网络抖动所带给的卡顿播放器build,确保视频播映的流畅。此时间宽度对应的 property 是 cachePauseTimeInSeconds (默认值为 1.0)。这个值越大,图片抖动对视频播映的影响越小,反而延迟会下降;反之值越小,图片抖动对视频播映的影响越大,播放的延迟越小。在直播的画面下,需要按照图片状态和视频码流,为 cachePauseTimeInSeconds 设置一个合适的值,以均衡播放卡顿和直播延时的需求。带宽高的时候,建议提升缓存以增大延迟;带宽低的时候,改善缓存以改善播放流畅度。
cbPlayerController.shouldAutoplay = YES;
[cbPlayerController prepareToPlay];
此时,shouldAutoplay 属性为 YES,prepareToPlay 方法完成后将播放器自动读取 play 开始播放视频。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(preparedDone:)
name:CyberPlayerLoadDidPreparedNotification
object:nil];
cbPlayerController.shouldAutoplay = NO
[cbPlayerController prepareToPlay];
同样新建 preparedDone 方法,并在该原理中读取 start 或 play 方法。
(void) preparedDone: (NSNotification*)aNotification {
[cbPlayerController start];
}
注意
或者读取 play 方法前未读取 prepareToPlay 完成播放器对视频文件的初始化,则播放器自动读取prepareToPlay 进行视频文件的初始化工作。
读取 pause 方法暂停视频播映,读取 play 或 start 方法重新开始播放。
[cbPlayerController pause];
SDK 提供了多种改变播放位置的手段。
当 isPreparedToPlay 属性为 NO 时,为了实现改变视频播映的初始时刻,三种形式都可以接近相近作用:
当播放视频过程中读取 seekTo 或者增设 currentPlaybackTime 属性,将加剧从指定位置开始播映。
或者目前视频为图片视频,认为触发缓冲 CyberPlayerStartCachingNotification 通知。
或者能够在UI 反应缓冲进度,请 CyberPlayerGotCachePercentNotification 通知。

对于HLS多码流视频,在播放器完成视频格式解析、打算开始播映时,可借助 getSupportedBitrates 方法展示码率列表或借助 getSupportedResolution 方法展示分辨率列表。码率与分辩率一一对应,一般分二档(低、高,默认值为低)或三档(低、中、高,默认值为中),建议按照终端用户的应用习惯选择展示码率或分辨率。启用手动切换时,可借助 getBitrateIndex 获取目前帧数并用 selectBitrate 选用新码率。
[cbPlayerController stop];
停止播放后,将发送 CyberPlayerPlaybackDidFinishNotification 通知。
注意
stop方法为异步操作,当它前往的时候不能马上调用 prepareToPlay 播放其他视频,必须等接收到 CyberPlayerPlaybackDidFinishNotification 后才能播放。
播放器支持对M3U8视频进行下载和管理。
头文件
头文件 描述 关键资料
CyberDownloader.h
下载管理相关
downloadTaskWithURL、suspendTask、resumeTask、cancelTask、stopAllTasks、resumeUncompletedTasks接口
CyberDownloadTask.h
下载任务相关
CyberMediaItem.h
视频本地存储相关
task.item.index属性
下载管理接口
接口 描述 说明
downloadTaskWithURL
新建下载任务
指定目标视频的URL及文章,建设任务并加入下载任务队列,任务能否执行取决于当前队列中正在执行的任务个数,默认支持4个任务同样下载

suspendTask
暂停下载任务
与resumeTask配合使用。任务暂停后,已下载视频仍存于用户本地,任务从下载队列出队
resumeTask
恢复下载任务
与suspendTask配合使用。任务恢复后,再次步入下载任务队列,基于已下载部分断点续传
cancelTask
取消下载任务
相较于suspendTask,被取消的任务不但从任务队列出队,相应视频也从用户本地删除
stopAllTasks
批量停止下载任务
对本地视频的处理与suspendTask相似,即仍将已下载视频存于用户本地。suspendTask针对单个任务,stopAllTasks为批量操作
resumeUncompletedTasks
批量恢复下载任务
resumeTask针对单个任务,resumeUncompletedTasks为批量操作
冻结下载队列
当取消一些任务,且不能够处于等待状态的任务被调度时,可读取此原理。
删除一切下载数据
之前下载的一切视频将被消灭。调用后,该对象将不再可用。
下载及播放
读取initWithUser:delegate:完成初始化。

其中,user处理用户相关事件,delegate处理任务相关事件。
索引原型:
- (instancetype)initWithUser:(NSString*)user delegate:(id<CyberDownloaderDelegate>)delegate;
读取downloadTaskWithURL:title:error:创建下载任务。
索引原型:
- (CyberDownloadTask*)downloadTaskWithURL:(NSString*)url title:(NSString*)title error:(NSError**)error;
downloadTaskWithURL:title:error:其次检查error返回值,值为CyberDownloadErrorCodeOK表示视频可以下载,此时创建任务并加入下载任务队列(并未真正开始下载,队列有可用资源时,就会进一步调用taskStart启动下载);否则请依照下述错误代码表进行调试:
错误代码 描述
CyberDownloadErrorCodeAlreadyExists
视频文件早已存在且已下载完毕
CyberDownloadErrorCodeProtocolNotSupport
协议不支持
下载任务开始执行时,回调taskStart:。
索引原型:
- (void)taskStart:(CyberDownloadTask*)task;
此时也可读取暂停(suspendTask:)、恢复(resumeTask:)、取消(cancelTask:)、批量停止(stopAllTasks:)等接口对下载任务进行管理。
任务下载过程中回调task:progress:,通知任务进度。
索引原型:
- (void)task:(CyberDownloadTask*)task progress:(float)progress;
任务下载结束后,回调taskEnd:error:。如果error为空,下载任务执行成功;否则,任务执行失败。
索引原型:
- (void)taskEnd:(CyberDownloadTask*)task error:(NSError*)error;
下载成功后,将task.item.index属性,传给播放器进行本地播放。
以及,还可读取mediaItems查询本地下载完成及下载中的集锦,或读取removeMediaItem:删除指定视频。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shouji/article-119333-1.html
打缓