融云 CDN 播放器
融云 CDN 插件(RongRTCPlayer
) 从 5.3.0 版本开始提供 CDN 播放器 RCRTCMediaPlayer
。
融云 CDN 插件 RongRTCPlayer
中提供了 CDN 流播放组件 RCRTCMediaPlayer
,可用于播放第三方 CDN 直播流、获取 SEI 数据、或直接获取音视频帧数据用于自行处理。
- 仅支持播放 CDN 直播流,不支持点播文件或网络点播资源。
- 支持的 CDN 直播流协议:RTMP、HTTP-FLV、HLS
- 仅支持播放 60fps 以下(不含)帧率的视频。
适用场景
融云 CDN 插件(RongRTCPlayer
)直接在 RTC 房间内提供了 融云 CDN 服务的订阅、播放等处理逻辑,降低了 App 业务侧的接入成本。
CDN 流播放组件 RCRTCMediaPlayer
可直接输入 CDN 流地址进行播放,不依赖于用户加入 RTC 房,能有效降低 CDN 首屏打开延时,带来更优秀的用户体验。具体适用场景如下:
- 您的 App 自行接入了第三方 CDN 服务,希望通过融云 CDN 播放器组件播放第三方拉流地址。
- 您的 App 使用了融云 CDN 服务,按照融云指定的规则自行拼接生成推流、拉流地址后(详见融云 CDN 服务配置),通过融云客户端旁路推流或服务端旁路推流接口将 CDN 推流地址提交给融云。配置成功后,可在融云 CDN 播放器中输入您自行生成的 CDN 拉流地址进行播放。该方式要求您将融云 CDN 的「推拉流模式」配置为自行生成推拉流地址模式。
- 您的 App 使用了融云 CDN 服务,并直接使用融云服务端接口获取融云 CDN 拉流地址,您也可以通过融云 CDN 播放器组件进行播放。该方式要求您将融云 CDN 的「推拉流模式」配置为开播自动推流或开播手动推流模式。
集成 CDN 播放器组件
RCRTCMediaPlayer 在融云 CDN 插件(RongRTCPlayer
)中提供。融云 CDN 插件导入方法请参见导入 SDK。
集成融云 CDN 插件后请注意导入头文件:
#import <RongRTCPlayer/RongRTCPlayer.h>`
使用 CDN 播放器组件
-
创建
RCRTCMediaPlayer
实例,同时设置播放事件RCRTCMediaPlayerEventDelegate
的代理。注意,设置代理必须在加载资源(openWithUrl
)调用之前。self.mediaPlayer = [RCRTCMediaPlayer alloc] init];
self.mediaPlayer.delegate = self; -
加载资源。资源缓冲完成后,不会自动播放。
NSURL *url = [NSURL URLWithString:@"rtmps://......"];
int res = [self.mediaPlayer openWithUrl:url];
if (res != 0) {
NSLog(@"openWithUrl failed:%@",@(res));
} -
播放资源。
int res = [self.mediaPlayer play];
if (res != 0) {
NSLog(@"play failed:%@",@(res));
} -
获取渲染视图。如果在
openWithUrl
加载之前调用渲染视图,该接口返回为nil
。提示当设置
dataHandle
代理时播放器不执行内部渲染,该接口返回为nil
。UIView *videoView = [self.mediaPlayer videoView];
[self.view addSubview:videoView]; -
(可选)设置渲染模式。如不设置,默认为
RCRTCVideoFillMode.RCRTCVideoFillModeAspectFit
,等比例填充黑边,直到一个维度到达区域边界。//详细见 RCRTCVideoFillMode 枚举
int res = [self.mediaPlayer setRenderMode:RCRTCVideoFillModeAspectFit];
if (res != 0) {
NSLog(@"setRenderMode failed:%@",@(res));
} -
销毁当前播放资源。App 用户可能需要切换到另一个主播的 CDN 流,或者切换到不同分辨率的 CDN 流地址时,此时必须先 调用
destroy
,再加载另一个资源openWithUrl
。int res = [self.mediaPlayer destroy];
if (res != 0) {
NSLog(@"destroy failed:%@", @(res));
}
播放控制
-
在播放过程中可暂停。暂停后调用
play
方法可播放资源。int res = [self.mediaPlayer pause];
if (res != 0) {
NSLog(@"pause failed:%@",@(res));
}