本文为您提供了使用iOS端播放器功能的操作步骤及SDK示例,通过本文内容您可以快速了解如何通过SDK使用iOS端播放器功能。

播放功能

  1. 创建播放器

    可以创建两种播放器:

    • AliPlayer
    • AliListPlayer
    AliListPlayer比AliPlayer多了列表播放的功能,其余功能是一致的。示例如下:
    self.player = [[AliPlayer alloc] init];
    self.listPlayer = [[AliListPlayer alloc] init];
    如果播放的视频是安全下载后的本地文件(即经过阿里云加密转码过后的),那么还需要设置一个加密校验信息(建议在Application中配置一次即可),示例如下:
    NSString *encrptyFilePath = [[NSBundle mainBundle] pathForResource:@"encryptedApp" ofType:@"dat"];
    [AliPrivateService initKey:encrptyFilePath];
    注意 如果没有设置正确的校验文件,播放安全下载后的文件会报错:ERROR_DEMUXER_OPENSTREAM。
  2. 设置播放器Delegate
    播放器提供了Delegate回调,比如: onPlayerEventonError等事件,回调参数详细说明,请参见 接口说明。示例如下:
    @interface SimplePlayerViewController ()<AVPDelegate>
    @end
    - (void)viewDidLoad {
        self.player = [[AliPlayer alloc] init];
        self.player.playerView = self.avpPlayerView.playerView;
        self.player.delegate = self;
        //...
    }
    /**
     @brief 错误代理回调
     @param player 播放器player指针
     @param errorModel 播放器错误描述,参考AliVcPlayerErrorModel
     */
    - (void)onError:(AliPlayer*)player errorModel:(AVPErrorModel *)errorModel {
        //提示错误,及stop播放
    }
    /**
     @brief 播放器事件回调
     @param player 播放器player指针
     @param eventType 播放器事件类型,@see AVPEventType
     */
    -(void)onPlayerEvent:(AliPlayer*)player eventType:(AVPEventType)eventType {
        switch (eventType) {
            case AVPEventPrepareDone: {
                // 准备完成
            }
                break;
            case AVPEventAutoPlayStart:
                // 自动播放开始事件
                break;
            case AVPEventFirstRenderedStart:
                // 首帧显示
                break;
            case AVPEventCompletion:
                // 播放完成
                break;
            case AVPEventLoadingStart:
                // 缓冲开始
                break;
            case AVPEventLoadingEnd:
                // 缓冲完成
                break;
            case AVPEventSeekEnd:
                // 跳转完成
                break;
            case AVPEventLoopingStart:
                // 循环播放开始
                break;
            default:
                break;
        }
    }
    /**
     @brief 视频当前播放位置回调
     @param player 播放器player指针
     @param position 视频当前播放位置
     */
    - (void)onCurrentPositionUpdate:(AliPlayer*)player position:(int64_t)position {
        // 更新进度条
    }
    /**
     @brief 视频缓存位置回调
     @param player 播放器player指针
     @param position 视频当前缓存位置
     */
    - (void)onBufferedPositionUpdate:(AliPlayer*)player position:(int64_t)position {
        // 更新缓冲进度
    }
    /**
     @brief 获取track信息回调
     @param player 播放器player指针
     @param info track流信息数组 参考AVPTrackInfo
     */
    - (void)onTrackReady:(AliPlayer*)player info:(NSArray<AVPTrackInfo*>*)info {
        // 获取多码率信息
    }
    /**
     @brief 字幕显示回调
     @param player 播放器player指针
     @param index 字幕显示的索引号
     @param subtitle 字幕显示的字符串
     */
    - (void)onSubtitleShow:(AliPlayer*)player index:(int)index subtitle:(NSString *)subtitle {
        // 获取字幕进行显示
    }
    /**
     @brief 字幕隐藏回调
     @param player 播放器player指针
     @param index 字幕显示的索引号
     */
    - (void)onSubtitleHide:(AliPlayer*)player index:(int)index {
        // 隐藏字幕
    }
    /**
     @brief 获取截图回调
     @param player 播放器player指针
     @param image 图像
     */
    - (void)onCaptureScreen:(AliPlayer *)player image:(UIImage *)image {
        // 预览,保存截图
    }
    /**
     @brief track切换完成回调
     @param player 播放器player指针
     @param info 切换后的信息 参考AVPTrackInfo
     */
    - (void)onTrackChanged:(AliPlayer*)player info:(AVPTrackInfo*)info {
        // 切换码率结果通知
    }
    //...
  3. 创建DataSource,准备播放
    播放器支持4种播放源:
    • AVPVidStsSource播放
    • AVPVidAuthSource播放
    • AVPVidMpsSource播放
    • AVPUrlSource播放
    说明 AVPUrlSource是直接通过URL进行播放,其余的三种是通过vid进行播放,点播用户推荐使用AVPVidAuthSource;AVPVidMpsSource仅限MPS用户使用。
    以VidSts举例。示例如下:
        //创建VidSts
        AVPVidStsSource *source = [[AVPVidStsSource alloc] init];
        source.region = self.接入区域;
        source.vid = self.视频vid;
        source.securityToken = self.安全token;
        source.accessKeySecret = self.临时akSecret;
        source.accessKeyId = self.临时akId;
         //设置播放源
        [self.player setStsSource:source];
         //准备播放
        [self.player prepare];
    说明

    MPS视频播放的流程与概念,请参见视频播放

    通过播放凭证VidAuth播放的流程,请参见通过播放凭证播放

    接入区域Region的设置,请参见点播中心和访问域名

  4. 设置显示的view
    如果播放源有画面,那么需要设置显示的view到播放器中,用来显示画面。示例如下:
    self.player.playerView = self.avpPlayerView.playerView;//用户显示的view
  5. 播放控制

    您可以自行创建播放器的播放控制按钮,在按钮事件里面实现播放器控制接口。

    基本控制功能有播放、停止、暂停、拖动(Seek),其中Seek功能仅对点播有效,直播使用暂停功能时会使画面停留在当前画面,使用恢复后会开始播放当前画面。示例如下:
        // 开始播放。
        [self.player start];
        //暂停播放
        [self.player pause];
        //停止播放
        [self.player stop];
        // 跳转到。目前只支持不精准。
        [self.player seekToTime:position seekMode:AVP_SEEKMODE_INACCURATE];
         // 重置
        [self.player reset];
        //释放。释放后播放器将不可再被使用。
        [self.player destroy];
        self.player = nil;
  6. 切换多码率
    播放器SDK支持HLS多码率地址播放。在 prepare成功之后,通过 getMediaInfo可以获取到各个码流的信息,即 TrackInfo
    AVPMediaInfo *info = [self.player getMediaInfo];
    NSArray<AVPTrackInfo*>* tracks = info.tracks;
    在播放过程中,可以通过调用播放器的selectTrack方法切换播放的码流。
    [self.player selectTrack:track.trackIndex];
    切换的结果会在 onTrackChanged回调:
    - (void)onTrackChanged:(AliPlayer*)player info:(AVPTrackInfo*)info {
        if (info.trackType == AVPTRACK_TYPE_VIDEO) {
            // video changed
        }
        // etc
    }
  7. 自动播放
    播放器SDK支持自动播放视频的设置。在 prepare之前设置autoPlay。
    self.player.autoPlay = YES;
    设置自动播放之后, prepare成功之后,将会自动播放视频。示例如下:
    -(void)onPlayerEvent:(AliPlayer*)player eventType:(AVPEventType)eventType {
        switch (eventType) {
            case AVPEventPrepareDone: {
                break;
            case AVPEventAutoPlayStart:
                break;
        }
    }
    注意 自动播放的时候将不会回调 AVPEventPrepareDone回调,而会回调 AVPEventAutoPlayStart回调。
  8. 循环播放
    播放器SDK提供了循环播放视频的功能。设置 loop开启循环播放,播放完成后,将会自动从头开始播放视频。示例如下:
    self.player.loop = YES;

    同时循环开始的回调将会使用AVPEventLoopingStart中通知。

  9. 画面旋转、填充、镜像操作
    播放器SDK提供过了多种设置,可以对画面进行精确的控制。包括设置画面旋转模式,设置画面缩放模式,设置镜像模式。示例如下:
    //设置画面的镜像模式:水平镜像,垂直镜像,无镜像。
    self.player.mirrorMode = AVP_MIRRORMODE_NONE;
    //设置画面旋转模式:旋转0度,90度,180度,270度
    self.player.rotateMode = AVP_ROTATE_0;
    //设置画面缩放模式:宽高比填充,宽高比适应,拉伸填充
    self.player.scalingMode = AVP_SCALINGMODE_SCALEASPECTFIT;

    画面的旋转模式包括:

    说明
    AVP_ROTATE_0 顺时针旋转0度
    AVP_ROTATE_90 顺时针旋转90度
    AVP_ROTATE_180 顺时针旋转180度
    AVP_ROTATE_270 顺时针旋转270度

    画面的缩放模式包括:

    说明
    AVP_SCALINGMODE_SCALEASPECTFIT 宽高比适应(将按照视频宽高比等比缩小到view内部,不会有画面变形)
    AVP_SCALINGMODE_SCALEASPECTFILL 宽高比填充(将按照视频宽高比等比放大,充满view,不会有画面变形)
    AVP_SCALINGMODE_SCALETOFILL 拉伸填充(如果视频宽高比例与view比例不一致,会导致画面变形)

    镜像模式包括:

    说明
    AVP_MIRRORMODE_NONE 无镜像
    AVP_MIRRORMODE_HORIZONTAL 水平镜像
    AVP_MIRRORMODE_VERTICAL 垂直镜像
  10. 静音、音量控制
    播放器SDK提供了对视频的音量控制功能。设置muted播放器静音,设置volume控制音量大小,范围是 0~1。示例如下:
    //设置播放器静音
    self.player.muted = YES;
    //设置播放器音量,范围0~1.
    self.player.volume = 1.0f;
  11. 倍数播放
    播放器SDK 提供了倍数播放视频的功能,通过设置rate方法,能够以0.5倍~2倍数去播放视频。同时保持变声不变调。示例如下:
    //设置倍速播放:支持0.5~2倍速的播放
    self.player.rate = 1.0f;
  12. 截图功能
    播放器SDK提供了对当前视频截图的功能 snapshot。截取的是原始的数据,并转为 bitmap返回。回调接口为 onCaptureScreen。示例如下:
    //截图回调
    - (void)onCaptureScreen:(AliPlayer *)player image:(UIImage *)image {
        // 处理截图
    }
    //截取当前播放的画面
    aliyunVodPlayer.snapshot();
    说明 截图是不包含界面的。
  13. 边播边缓存
    播放器SDK提供了边播边缓存的功能,能够让用户重复播放视频时,达到省流量的目的。只需在 prepare之前给播放器配置 AVPCacheConfig即可实现此功能。示例如下:
        AVPCacheConfig *config = [[AVPCacheConfig alloc] init];
        //开启缓存功能
        config.enable = YES;
        //能够缓存的单个文件最大时长。超过此长度则不缓存
        config.maxDuration = 100;
        //缓存目录的位置,需替换成app期望的路径
        config.path = @"please use your cache path here";
        //缓存目录的最大大小。超过此大小,将会删除最旧的缓存文件
        config.maxSizeMB = 200;
        //设置缓存配置给到播放器
        [self.player setCacheConfig:config];
    缓存成功之后,以下情况将会利用缓存文件(必须已经设置了setCacheConfig)
    • 如果设置了循环播放,那么第二次播放的时候,将会自动播放缓存的文件。
    • 缓存成功后,重新创建播放器,播放同样的资源,也会自动使用缓存文件。
      说明 vid的缓存文件是通过vid等信息定位的,所以对于vid的缓存文件,将需要网络请求信息之后才能确定使用哪个缓存文件。
    播放器提供了获取缓存文件路径的接口,示例如下:
    API接口 描述 参数 返回值
    (NSString *) getCacheFilePath:(NSString *)URL 根据URL获取缓存的文件名。必须先调用setCacheConfig才能获取到。 URL 最终缓存的文件绝对路径。
    (NSString *) getCacheFilePath:(NSString *)vid format:(NSString *)format definition:(NSString *)definition 根据vid获取缓存的文件名。
    • vid:视频ID
    • format:视频格式
    • definition:视频清晰度
    • previewTime:试看时长
    最终缓存的文件绝对路径。
    边播边缓存并不是所有的视频都会缓存,有些情况是不会缓存的。示例如下:
    • 对于直接播放URL的方式,即AVPUrlSource。如果是HLS(即M3U8)地址,将不会缓存。如果是其他支持的格式,则根据缓存配置进行缓存。
    • 对于VID的方式播放,将会根据缓存配置进行缓存。
    • 播放器读取完全部的数据则视为缓存成功。如果在此之前,调用stop,或者出错onError,则缓存将会失败。
    • cache内的seek的操作不会影响缓存结果。cache外的seek会导致缓存失败。
    • 如果加密文件与App信息不一致,将会缓存失败。
    • cache的结果回调,会通过onPlayerEventInfo回调。
    -(void)onPlayerEvent:(AliPlayer*)player eventWithString:(AVPEventWithString)eventWithString description:(NSString *)description {
        if (eventWithString == EVENT_PLAYER_CACHE_SUCCESS) {
            //缓存成功事件。
        }else if (eventWithString == EVENT_PLAYER_CACHE_ERROR) {
            //缓存失败事件。
        }
    }
  14. 试看功能

    当设置试看的时长,通过播放器SDK播放视频时,服务端将不会返回完整的视频内容,而是返回试看时间段的内容。

    播放器SDK通过配合点播服务配置,可以实现试看功能,支持VidSts和VidAuth两种方式。如何配置和使用试看功能参考 点播试看。配置试看功能之后,通过SDK的VidPlayerConfigGen接口的 setPreviewTime方法设置播放器的试看时长。以AVPVidStsSource为例,示例如下:
    AVPVidStsSource *source = [[AVPVidStsSource alloc] init];
    ....
    VidPlayerConfigGenerator* vp = [[VidPlayerConfigGenerator alloc] init];
    [vp setPreviewTime:20];//20秒试看
    source.playConfig = [vp generatePlayerConfig];//设置给播放源
    ...
    说明 VidPlayerConfigGen支持设置服务端支持的请求参数。请参见 请求参数说明
  15. 硬解开关
    播放器SDK提供了H.264,H.265的硬解码能力,同时提供了 enableHardwareDecoder提供开关。默认开,并且在硬解初始化失败时,自动切换为软解,保证视频的正常播放。示例如下:
    //开启硬解。默认开启
    self.player.enableHardwareDecoder = YES;
    如果从硬解自动切换为软解,将会通过 onPlayerEvent回调,示例如下:
    -(void)onPlayerEvent:(AliPlayer*)player eventWithString:(AVPEventWithString)eventWithString description:(NSString *)description {
        if (eventWithString == EVENT_SWITCH_TO_SOFTWARE_DECODER) {
            //切换到软解
        }
    }
  16. 设置Referer
    播放器SDK提供了 AVPConfig用来设置请求referer。配合控制台的黑白名单referer,可以控制访问权限。播放器SDK的设置示例如下:
    //先获取配置
    AVPConfig *config = [self.player getConfig];
    //设置referer
    config.referer = referer;
    ....//其他设置
    //设置配置给播放器
    [self.player setConfig:config];
  17. 设置UserAgent
    播放器SDK提供了 AVPConfig用来设置请求UA。设置之后,播放器请求的过程中将会带上UA信息。播放器SDK的设置,示例如下:
    //先获取配置
    AVPConfig *config = [self.player getConfig];
    //设置userAgent
    config.userAgent = userAgent;
    ....//其他设置
    //设置配置给播放器
    [self.player setConfig:config];
  18. 配置网络重试时间和次数
    通过 AVPConfig,用户可以设置播放器SDK的网络超时的时间和重试次数。播放器SDK的设置,示例如下:
    //先获取配置
    AVPConfig *config = [self.player getConfig];
    //设置网络超时时间,单位ms
    config.networkTimeout = 5000;
    //设置超时重试次数。每次重试间隔为networkTimeout。networkRetryCount=0则表示不重试,重试策略app决定,默认值为2
    config.networkRetryCount = 2;
    ....//其他设置
    //设置配置给播放器
    [self.player setConfig:config];
    说明
    • 如果设置了networkRetryCount:如此时发生网络问题,导致出现loading后,那么将会重试networkRetryCount次,每次的间隔时间为networkTimeout。
    • 如果重试多次之后,还是loading的状态,那么就会回调onError事件,此时AVPErrorModel.code为ERROR_LOADING_TIMEOUT。
    • 如果networkRetryCount设置为0,当网络重试超时的时候,播放器就会回调onPlayerEvent,参数eventWithString为EVENT_PLAYER_NETWORK_RETRY。此时,可以调用播放器的reload方法进行重新加载网络,或者进行其他的处理。
  19. 配置缓存和延迟控制
    对于播放器来说,缓存的控制非常重要。合理的配置可以有效的加快起播速度,减少卡顿。播放器SDK通过 AVPConfig提供了设置缓存和延迟的控制接口。示例如下:
    //先获取配置
    AVPConfig *config = [self.player getConfig];
    //最大延迟。注意:直播有效。当延时比较大时,播放器sdk内部会追帧等,保证播放器的延时在这个范围内。
    config.maxDelayTime = 5000;
    // 最大缓冲区时长。单位ms。播放器每次最多加载这么长时间的缓冲数据。
    config.maxBufferDuration = 50000;
    //高缓冲时长。单位ms。当网络不好导致加载数据时,如果加载的缓冲时长到达这个值,结束加载状态。
    config.highBufferDuration = 3000;
    // 起播缓冲区时长。单位ms。这个时间设置越短,起播越快。也可能会导致播放之后很快就会进入加载状态。
    config.startBufferDuration = 500;
    //其他设置
    //设置配置给播放器
    [self.player setConfig:config];
    注意 三个缓冲区时长的大小关系必须为:startBufferDuration<=highBufferDuration<=maxBufferDuration。
  20. 支持HTTP Header设置
    播放器通过 AVPConfig参数,可以给播放器中的请求加上HTTP的 header参数。示例如下:
    //先获取配置
    AVPConfig *config = [self.player getConfig];
    //定义header
    NSMutableArray *httpHeaders = [[NSMutableArray alloc] init];
    //比如使用httpdns时,需要设置Host。
    [httpHeaders addObject:@"Host:xxx.com"];
    //设置header
    config.httpHeaders = httpHeaders;
    ....//其他设置
    //设置配置给播放器
    [self.player setConfig:config];

列表播放功能

当前短视频列表播放比较流行。阿里播放器提供了完整的列表播放功能,内部包含预加载机制,大幅提高了视频的起播速度。

  1. 创建播放器
    AliListPlayerAliPlayer多了列表播放的功能,其余功能是一致的。列表播放请使用 AliListPlayer。示例如下:
    self.listPlayer = [[AliListPlayer alloc] init];
  2. 设置预加载个数
    合理设置预加载个数,能够有效的提高起播的速度。示例如下:
        //设置预加载个数。总共加载的个数为: 1 + count*2。
        self.listplyer.preloadCount = 2;
  3. 添加/移除多个播放源
    列表播放支持两种播放源:AVPVidStsSource和AVPUrlSource。url为直接的播放地址,vid为点播视频id。示例如下:
    //添加vid源
    [self.listPlayer addVidSource:videoId uid:UUIDString];
    //添加URL源
    [self.listPlayer addUrlSource:URL uid:UUIDString];
    //移除某个源
    [self.listPlayer removeSource:UUIDString];
    注意
    • 不支持VidAuth和VidMps的方式。
    • uid是视频的唯一标志。用于区分视频是否一样。如果uid一样,则认为是一样的。如果播放出现串流的情况,请注意查看是不是在不同的界面设置了同一个uid。
  4. 播放视频源
    添加了一个或多个播放源之后,便可以播放某个源。接口如下:
        //url时使用此接口
        - (BOOL) moveTo:(NSString*)uid;
          //vid的时候使用此接口,需要传递stsInfo,保证不会失效
        - (BOOL) moveTo:(NSString*)uid accId:(NSString*)accId accKey:(NSString*)accKey token:(NSString*)token region:(NSString*)region;
  5. 播放上一个、下一个视频
    播放器提供了moveToPrev,moveToNext接口用于播放上一个,下一个视频。示例如下:
        //移动到下一个视频。 注意:只能用于url的源。这个方法不适用于vid的播放。
        - (BOOL) moveToNext;
        //移动到上一个视频。注意:只能用于url的源。这个方法不适用于vid的播放。
        - (BOOL) moveToPre;
          //移动到下一个视频。注意:只能用于vid的播放。
        - (BOOL) moveToNext:(NSString*)accId accKey:(NSString*)accKey token:(NSString*)token region:(NSString*)region;
        // 移动到上一个视频。注意:只能用于vid的播放。
        - (BOOL) moveToPre:(NSString*)accId accKey:(NSString*)accKey token:(NSString*)token region:(NSString*)region;

视频下载功能

阿里云SDK提供了点播服务视频的下载功能,能够通过VidSts和VidAuth下载点播服务上的视频。同时,下载的方式提供了安全下载和普通下载的模式(在控制台设置)。
  • 普通下载:下载后的视频数据未经过阿里云加密,用户可以用第三方播放器播放。
  • 安全下载:下载后的视频数据经过阿里云加密。第三方播放器无法播放。仅支持使用阿里云的播放器进行播放。
  1. 创建并设置下载器
    创建下载器。示例如下:
    AliMediaDownloader *downloader = [[AliMediaDownloader alloc] init];
    [downloader setSaveDirectory:self.downLoadPath];
    [downloader setDelegate:self];
    下载SDK支持私有加密的下载。为了保证安全性,需要配置一个加密校验文件到播放器。(建议在Application中配置一次即可)。示例如下:
    NSString *encrptyFilePath = [[NSBundle mainBundle] pathForResource:@"encryptedApp" ofType:@"dat"];
    [AliPrivateService initKey:encrptyFilePath];
    注意 如果是安全下载,并且加密校验文件与App信息不一致,会导致下载失败。
  2. 设置监听事件
    下载器提供了多个事件监听。示例如下:
    -(void)onPrepared:(AliMediaDownloader *)downloader mediaInfo:(AVPMediaInfo *)info {
        //准备下载项成功
    }
    -(void)onError:(AliMediaDownloader *)downloader errorModel:(AVPErrorModel *)errorModel {
        //下载出错
    }
    -(void)onDownloadingProgress:(AliMediaDownloader *)downloader percentage:(int)percent {
        //下载进度百分比
    }
    -(void)onProcessingProgress:(AliMediaDownloader *)downloader percentage:(int)percent {
        //处理进度百分比
    }
    -(void)onCompletion:(AliMediaDownloader *)downloader {
        //下载成功
    }
  3. 准备下载源
    通过 preapre方法准备下载源。下载源支持AVPVidStsSource和AVPVidAuthSource两种。以AVPVidStsSource举例,示例如下:
    //创建VidSts
    AVPVidStsSource* stsSource = [[AVPVidStsSource alloc] init];
    stsSource.vid = source.vid;//视频vid
    stsSource.region = DEFAULT_SERVER.region;//接入区域
    stsSource.securityToken = DEFAULT_SERVER.securityToken;//安全token
    stsSource.accessKeySecret = DEFAULT_SERVER.accessKeySecret;//临时akSecret
    stsSource.accessKeyId = DEFAULT_SERVER.accessKeyId;//临时akId
    //准备下载源
    [downloader prepareWithVid:stsSource];
  4. 准备成功后选择下载项
    准备成功后,会回调 onPrepared方法。选择某个Track进行下载:
    -(void)onPrepared:(AliMediaDownloader *)downloader mediaInfo:(AVPMediaInfo *)info {
        NSArray<AVPTrackInfo*>* tracks = info.tracks;
        //比如:下载第一个TrackInfo
        [downloader selectTrack:[tracks objectAtIndex:0].trackIndex];
    }
  5. 更新下载源并开始下载
    为了防止VidSts和VidAuth过期,建议更新下载源的信息后开始下载。示例如下:
    //更新下载源
    [downloader updateWithVid:vidSource]
    //开始下载
    [downloader start];
  6. 下载成功/失败后,释放下载器
    下载成功后,调用 destroy释放下载器。
    [self.downloader destroy];
    self.downloader = nil;

加密直播播放功能

阿里云播放器支持加密直播的播放。播放器的创建与使用方式,具体操作,请参见播放功能

  1. 设置播放源
    需传递AVPLiveStsSource作为播放源。示例如下:
    //创建LiveSts
    AVPLiveStsSource *liveStsSource = [[AVPLiveStsSource alloc] initWithUrl:@"加密直播url" accessKeyId:@“临时akId”accessKeySecret:@"临时akId" securityToken:@"安全token" region:@"region值" domain:@"url播流域名" app:@"播流应用名" stream:@"播流流名"];
     //设置播放源
     [self.aliPlayer setLiveStsSource:liveStsSource];
     ......
     //准备播放
     [self.aliPlayer prepare];
  2. 监听STS是否无效
    加密直播播放过程中可能会有换加密Key的过程,换Key时则会通过STS去请求到最新的Key。开发者需要监听STS是否有效。如果无效则会影响加密直播流的播放。监听设置示例如下:
     __weak typeof(self) weakSelf = self;
    [self.aliPlayer setVerifyStsCallback:^AVPStsStatus(AVPStsInfo info) {
        if (info 可以使用) {
            return Valid;
        }
        if(可以获取有效的STS){
            获取STS();//异步同步均可。
            return Pending;
        }
        [weakSelf.aliPlayer stop];
        return Invalid;
    }];
    获取STS成功之后,需要调用 updateLiveStsInfo方法去更新STS。如果获取失败,则建议停止播放。
    [self.aliPlayer updateLiveStsInfo:self.liveStsSource.accessKeyId accKey:self.liveStsSource.accessKeySecret token:self.liveStsSource.securityToken region:self.liveStsSource.region];
    说明 如果不调用,超时之后播放器会继续使用之前的STS去获取Key。如果STS失效,则可能会出现花屏或者播放失败。