通过阅读本文,您可以了解iOS端阿里云播放器SDK实现超低延时直播的方法。
前提条件
环境中已安装CocoaPods。
SDK集成
使用pod方式添加阿里云播放器SDK的依赖文件。
打开终端窗口。
进入项目所在路径,创建Podfile文件。
pod init
编辑Podfile文件,添加最新版本的依赖。
player_sdk_version = 'x.x.x' # 建议使用最新版本 rts_sdk_version = '7.8.0' # 独立版本号,目前最新版本 # 播放器SDK pod 'AliPlayerSDK_iOS' , player_sdk_version # 播放器与Rts低延时直播组件的桥接层(AlivcArtc),版本号需要与播放器一致,需要和 Rts低延时直播组件 一起集成 pod 'AliPlayerSDK_iOS_ARTC' , player_sdk_version # Rts低延时直播组件 pod 'RtsSDK' , rts_sdk_version重要播放器与RTS低延时直播组件的桥接层(AlivcArtc)需与播放器版本号保持一致,且必须与RTS低延时直播组件同时集成。
播放器版本请参考SDK下载,建议使用最新版本。阿里云播放器版本要求:推荐V7.5.0或以上版本,最低支持V5.4.5.0。
常见问题请参见iOS播放器常见问题。
安装SDK。执行之后,会生成*.xcworkspace文件,表示SDK集成完毕。
pod install
阿里云播放器SDK接口使用
调用阿里云播放器SDK接口实现超低延时直播功能。更多阿里云播放器SDK功能,请参见进阶功能和API说明。
以下为示例代码。详细代码请参见API-Example RTS超低延迟直播播放模块,该工程是基于Objective-C的阿里云播放器SDK iOS示例工程,能够帮助开发者快速掌握SDK核心功能集成。
基于阿里云播放器实现RTS拉流时,不能调用pause暂停直播流。您可以先调用stop停止播放,再调用prepare重新播放。
不支持seek(拖动)。
创建播放器
创建播放器。
创建AliPlayer播放器。
// 创建播放器实例 AliPlayer mAliPlayer = [[AliPlayer alloc] init]; // 创建用于承载播放画面的视图容器,并设置播放器渲染视图 UIView playerView = [[UIView alloc] initWithFrame:self.view.bounds]; [self.view addSubview:playerView]; mAliPlayer.playerView = playerView; [mAliPlayer setTraceID:traceId];说明播放器提供的播放质量监控(可查看播放器整体播放质量相关数据)、单点追查(可定位到具体的用户或设备,分析其播放行为,快速定位播放异常等问题)及视频播放统计功能都依赖埋点日志上报功能而实现。
在创建播放器时,根据
setTraceID参数的设置不同,其后续可实现的功能不同,具体如下:setTraceID参数不传(默认):埋点日志上报功能开启,后续可以使用播放质量监控和视频播放统计功能,无法使用单点追查功能。setTraceID参数传入traceid:traceid的值由您自行定义,需为您的用户或用户设备的唯一标识符,例如传入您业务的userid或者IMEI、IDFA等您业务用户的设备ID。传入traceid后,埋点日志上报功能开启,后续可以使用播放质量监控、单点追查和视频播放统计功能。setTraceID参数设置为DisableAnalytics:关闭埋点日志上报,后续无法使用播放质量监控、单点追查和视频播放统计功能。
设置播放源。
播放器支持4种播放源:VidSts、VidAuth、VidMps和UrlSource。其中UrlSource是直接URL播放,需要将URL设置为
artc://协议,才可以使用RTS服务。AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:"artc://<播流地址>"]; [mAliPlayer setUrlSource:urlSource];说明更多设置播放源方法,请参见基础功能。
配置播放参数。
配置播放参数,提升超低延时直播效果。
说明6.3.0版本以及之后的播放器SDK均支持自动低延时最佳配置,当播放URL为“artc://”开头,且客户没有手工修改过
AVPConfig的MaxDelayTime、HighBufferDuration、StartBufferDuration值时,SDK会自动分别使用1000、10、10值进行实际的播放。若想自定义控制,请参考如下示例:
//1. 获取并修改配置 AVPConfig *config = mAliPlayer.getConfig; if ([playUrl hasPrefix:@"artc://"]) { //最大延时为1秒 [config setMaxDelayTime:1000]; //起播缓存时长 [config setStartBufferDuration:10]; //卡顿恢复缓存时长 [config setHighBufferDuration:10]; } else { //config使用默认配置或自定义为其他配置 } //2. 应用配置 [mAliPlayer setConfig:config];开始播放。
// 准备播放 [mAliPlayer prepare]; // prepare 以后可以同步调用 start 操作,onPrepared 回调完成后会自动起播 [mAliPlayer start];
控制播放
iOS播放器SDK支持开始、从指定时间点播放等主流操作。
开始播放
开始播放视频,由start接口实现。示例如下:
[mAliPlayer start];停止播放
停止播放视频,由stop接口实现。示例如下:
[mAliPlayer stop];销毁播放器
销毁播放器实例,有同步和异步两种销毁方式,示例如下:
//同步销毁,内部会自动调用stop接口
[mAliPlayer destroy];
//异步销毁,内部会自动调用stop接口
[mAliPlayer destroyAsync];调用同步销毁接口需等待播放器资源完全释放后才返回。如果您对界面的响应速度有较高要求,建议使用异步销毁接口,并注意以下几点:
避免在异步销毁过程中对播放器对象执行任何其他操作。
无需在调用异步销毁之前手动停止播放器,因为该过程内部已经包含了异步化的停止流程。
辅助功能
日志开关
// 开启日志 [mAliPlayer setEnableLog:YES]; [mAliPlayer setLogCallbackInfo:LOG_LEVEL_TRACE callbackBlock:nil]; // 关闭日志 [mAliPlayer setEnableLog:NO]; [mAliPlayer setLogCallbackInfo:LOG_LEVEL_NONE callbackBlock:nil];直播降级
说明播放失败降级仅针对超时场景,播放超时场景下若配置了以下任一降级方案,则会进行降级播放处理;否则触发播放器onError回调。例如404、403或主播断流等异常不会触发降级。
RTS自动降级使用相同域名实现RTS至FLV降级。若您的RTS与FLV域名不一样,需配置RTS自定义降级方案以指定目标FLV域名。
RTS自动降级(默认开启)
在使用超低延时直播RTS地址播放的场景下,当未配置RTS自定义降级且RTS拉流失败时,会自动降级到RTS对应的默认FLV地址进行播放。示例如下:
// 1表示开启,0表示关闭。默认开启 [AliPlayerGlobalSettings setOption:ALLOW_PRE_RENDER valueInt:1];RTS自定义降级
在使用超低延时直播RTS地址播放的场景下,通过设置RTS的降级地址(如HLS地址或FLV地址),当RTS拉流失败时,会自动降级到该地址播放。
//设置降级源downgradeUrl AVPUrlSource *urlSource = [[AVPUrlSource alloc] urlWithString:downgradeUrl]; //可选,配置config其他项 AVPConfig *config = [mAliPlayer getConfig]; //设置降级URL [mAliPlayer enableDowngrade:urlSource config:config];
获取TraceID
每一次低延时播放都会有一个traceId,可用于问题排查,可以通过播放器事件回调拿到traceid
//监听播放器 onPlayerEvent 回调,并解析 DemuxerTraceID 消息 - (void)onPlayerEvent:(AliPlayer*)mAliPlayer eventWithString:(AVPEventWithString)eventWithString description:(NSString *)description { switch (eventWithString) { case EVENT_PLAYER_DEMUXER_TRACE_ID: { NSString *traceId = description; } break; default: break; } }