发布自定义流
您可以创建自定义视频流,通 过发布资源方法发布到房间中。远端用户可使用订阅方法订阅此自定义视频流。
实现流程
1. 创建本地渲染视图
首先创建一个用于渲染自定义视频流的视图对象。
Objective C
#import <RongRTCLib/RongRTCLib.h>
// 创建本地渲染视图
RCRTCVideoView *localFileVideoView = [[RCRTCVideoView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
localFileVideoView.fillMode = RCRTCVideoFillModeAspectFit;
localFileVideoView.frameAnimated = NO;
[self.view addSubview:localFileVideoView];
2. 创建视频流配置
创建自定义视 频流配置 RCRTCVideoStreamConfig 对象,设置视频参数。
Objective C
#import <RongRTCLib/RongRTCLib.h>
// 创建自定义视频流配置
RCRTCVideoStreamConfig *videoConfig = [[RCRTCVideoStreamConfig alloc] init];
videoConfig.videoSizePreset = RCRTCVideoSizePreset720x480;
3. 创建自定义视频流
调用 createFileVideoOutputStream 创建一个自定义视频流 RCRTCFileVideoOutputStream 对象。
接口原型
Objective C
- (RCRTCFileVideoOutputStream *)createFileVideoOutputStream:(NSString *)path
replaceAudio:(BOOL)replaceAudio
playback:(BOOL)playback
tag:(NSString *)tag
config:(RCRTCVideoStreamConfig *)config;
参数说明
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| path | NSString * | 是 | 视频文件路径 |
| replaceAudio | BOOL | 是 | 是否用文件中的音频替换麦克风数据 |
| playback | BOOL | 是 | 是否在本端播放音频 |
| tag | NSString * | 是 | 自定义标识,不能包含 _ 和 RongCloudRTC |
| config | RCRTCVideoStreamConfig | 是 | 视频流配置对象 |
返回值
返回创建的 RCRTCFileVideoOutputStream 对象。
代码示例
Objective C
#import <RongRTCLib/RongRTCLib.h>
// 获取视频文件路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"video_demo1_low" ofType:@"mp4"];
// 创建自定义视频流
NSString *tag = @"RongRTCFileVideo";
RCRTCFileVideoOutputStream *fileVideoOutputStream = [[RCRTCEngine sharedInstance] createFileVideoOutputStream:path
replaceAudio:NO
playback:YES
tag:tag
config:videoConfig];
提示
tag 不能包含 _ 和 RongCloudRTC 字符串。
4. 渲染自定义视频流
将创建的自定义视频流绑定到渲染视图,并设置代理。
Objective C
#import <RongRTCLib/RongRTCLib.h>
// 设置渲染视图
[fileVideoOutputStream setVideoView:localFileVideoView];
// 设置代理(可选)
fileVideoOutputStream.delegate = self;
5. 发布自定义视频流
使用加入房间成功后返回的 RCRTCRoom 对象中的 RCRTCLocalUser 发布自定义视频流。
会议模式
会议模式下,使用 publishStream 方法发布自定义视频流。
接口原型
Objective C
- (void)publishStream:(nullable RCRTCOutputStream *)stream completion:(nullable RCRTCOperationCallback)completion;
参数说明
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| stream | RCRTCOutputStream * | 是 | 媒体流对象 |
| completion | RCRTCOperationCallback | 否 | 结果回调 |
代码示例
Objective C
#import <RongRTCLib/RongRTCLib.h>
// 会议模式下,发布自定义视频流
[[RCRTCEngine sharedInstance].room.localUser publishStream:fileVideoOutputStream
completion:^(BOOL isSuccess, RCRTCCode code) {
}];
直播模式
直播模式下,使用 publishLiveStream 方法发布自定义视频流。
接口原型
Objective C
- (void)publishLiveStream:(nullable RCRTCOutputStream *)stream completion:(nullable RCRTCLiveOperationCallback)completion;
参数说明
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| stream | RCRTCOutputStream * | 是 | 媒体流对象 |
| completion | RCRTCLiveOperationCallback | 否 | 结果回调 |
代码示例
Objective C
#import <RongRTCLib/RongRTCLib.h>
// 直播模式下,发布自定义视频流
[[RCRTCEngine sharedInstance].room.localUser publishLiveStream:fileVideoOutputStream
completion:^(BOOL isSuccess, RCRTCCode code, RCRTCLiveInfo * _Nullable liveInfo) {
}];