推流

如果登录房间时选择了主播或者互动身份,需要进行推流操作,其他人才能看到直播画面。

即将自己的视频画面通过调用推流方法推送到服务端,观看者通过从服务端拉流,才可以看到推流者的视频画面。

步骤

1、启用采集预览

推流端开启本端采集画面预览需要传入显示预览的容器View,设置预览的填充模式和推流的视频输出格式。

如果推流中需要修改预览的显示填充模式,只需修改canvas配置后再次调用该方法即可。

// Objective-C

//设置本地视图
ChuangVideoCanvas *canvas = [[ChuangVideoCanvas alloc] init];
canvas.renderMode = ChuangVideoRenderModePerfectFill;
canvas.view = self.view;
[self.liveEngine setPreview:canvas];

方法参数说明:

参数 类型 是否必传 描述
videoCanvas ChuangVideoCanvas 必传 设置本端视图显示信息对象,该方法初始化本地视图并设置本地用户视频显示信息,只影响本地用户看到的视频画面,不影响本地发布视频。调用该方法绑定本地视频流的显示视窗(view),并设置本地用户视图的渲染模式,详情参照ChuangVideoCanvas

2、设置推流配置

2.1 设置推流的流质量配置

(1)设置推流视频质量配置:

推流前需要初始化流视频质量配置类ChuangVideoConfig,并设置推流的分辨率、比特率、帧率等数据,一定要在推流前设置,推流后设置或者修改不会生效。如果需要修改配置,需要停止推流,修改配置后,重新发起推流新的配置才会生效。

除上述分别给ChuangVideoConfig各属性赋值外,可以通过configWithPreset:方法实现ChuangVideoConfig的快捷初始化,其中参数videoConfigPreset提供了常用推流属性设置,可以实现推流分辨率、比特率、帧率的快捷设置,他们对应的关系见下表:

参数 分辨率(宽*高) 帧率 比特率(kbps)
ChuangVideoConfigPreset180X320_15_300 180 X 320 15 300
ChuangVideoConfigPreset270X480_15_400 270 X 480 15 400
ChuangVideoConfigPreset360X640_15_600 360 X 640 15 600
ChuangVideoConfigPreset540X960_15_1200 540 X 960 15 1200
ChuangVideoConfigPreset720X1280_15_1500 720 X 1280 15 1500
ChuangVideoConfigPreset1080X1920_15_3000 1080 X 1920 15 3000

如果上面推荐的推流属性快速设置项的列表里都不能满足推流需求,可以自定义分辨率、比特率、帧率。即通过专门设置ChuangVideoConfig 中的对应的分辨率(encodeSize)、比特率(bitrateKbps)、帧率(fps)的值来实现。


// Objective-C
ChuangVideoConfig *videoConfig = [[ChuangVideoConfig alloc] init];
videoConfig.bitrateKbps = 600; //设置推流的视频比特率(单位:kbps)
videoConfig.fps = 15;//设置推流的视屏帧率
videoConfig.encodeSize = CGSizeMake(360, 640); //设置推流视频分辨率(宽X高)
[self.liveEngine setVideoConfig:videoConfig];

方法参数说明:

参数 类型 是否必传 描述
encodeSize CGSize 必传 设置推流视频分辨率
bitrateKbps NSUInteger 必传 设置推流的视频比特率(单位:kbps)
fps NSUInteger 必传 设置推流的视屏帧率

推流参数众多,具体可参考demo代码示例。

(2)设置推流音频质量配置:

设置音频质量配置类ChuangAudioConfig,通过该函数可以设置推流音频的编码类型、码率、音频声道等,如果不调用此函数,则默认标准音质,目前仅支持推流前设置,推流后设置或者修改不会生效。如果需要修改配置,需要停止推流,修改配置后,重新发起推流新的配置才会生效。

// Objective-C
ChuangAudioConfig *audioConfig = [[ChuangAudioConfig alloc] init];
audioConfig.profileId = ChuangAudioProfileIdDefault;
[self.liveEngine setAudioConfig:audioConfig];

方法参数说明:

参数 类型 是否必传 描述
profileId ChuangAudioProfileId 必传 音频配置ID。仅在推流前设置生效。

2.2 发起推流

登录房间成功返回后,比如主播或者多人视频场景下,需要将自己音视频流推送给他人看到,则必须调用以下推流接口,将上述初始化的配置类传入推流接口。

推流前初始化ChuangStreamConfig,内部包括RTMP服务地址(rtmpAddress)和流类型(streamMode),默认流类型是音视频,如果不需要转推流到RTMP,推流类型也是音视频流。

注意

如果推流时需要同时推流到RTMP服务则必须给ChuangStreamConfig的rtmpAddress参数传入正确的RTMP服务地址,RTMP地址内容请参考以下方法参数说明;如果不需要同时推流到RTMP,则RTMP地址传空。为了保证RTMP推流和RTC推流状态一致,如果RTMP地址传了值则必须保证RTMP地址正确,否则会影响正常的RTC推流。

如果推流不是默认的音视频,比如推纯音频,则可以给ChuangStreamConfig的streamMode传相应纯音频推流的值。

// Objective-C

//开始推流

ChuangStreamConfig *configInfo = [[ChuangStreamConfig alloc] init];
configInfo.rtmpAddress = @"rtmp://xxxxxx";//传入自己的RTMP地址,不需要转推则不传
configInfo.streamMode = ChuangStreamModeVideo;//默认是音视频,
configInfo.streamId = @"xxx"; // 流的唯一标识
[self.liveEngine startPublishStream:configInfo];

方法参数说明:

参数 类型 是否必传 描述
streamConfig ChuangStreamConfig 必传 推流配置参数对象,详情参照 ChuangStreamConfig

3、停止推流

需要停止推流时调用:stopPublishStream

// Objective-C

[self.liveEngine stopPublishStream];

4、媒体设备控制

4.1 设置本端麦克风是否静音

即推流时是否采集本端的声音,如果不采集设置YES,如果采集则设置NO,推流中可以实时修改该参数,会立即生效。如果不设置,推流默认是采集声音。

// Objective-C

[self.liveEngine muteLocalAudio:streamId mute:NO];

方法参数说明:

参数 类型 是否必传 描述
streamId NSString 必传 流ID
mute BOOL 必传 本端是否静音,如果静音(即不采集麦克风声音)设置YES,如果不静音(即采集麦克风声音)设置NO

4.2 关闭本机摄像头采集

即推流时是否采集本端的摄像头视频画面,默认采集,如果不采集设置Yes,如果采集则设置NO,推流中可以实时修改该参数,会立即生效。如果不设置,推流默认是采集摄像头画面的。

// Objective-C

[self.liveEngine muteLocalVideo:streamId mute:NO];

方法参数说明:

参数 类型 是否必传 描述
streamId NSString 必传 流ID
mute BOOL 必传 本地摄像头是否关闭,如果关闭(即不采集摄像头画面)设置YES,如果不关闭(即采集摄像头画面)设置NO

4.3 切换前、后摄像头

推流过程中支持前后置摄像头切换,如果不设置,默认是前置摄像头。cameraType 摄像头类型,0:前置摄像像头 1:后置摄像头

// Objective-C

[self.liveEngine switchCamera:ChuangCameraTypeFront];

方法参数说明:

参数 类型 是否必传 描述
cameraType int 必传 摄像头类型,详情参照ChuangCameraType

4.4 设置预览视图填充模式设置

如果需要在推流中修改本端推流的预览填充模式renderMode ,也是直接调用上文中setPreview:接口修改填充模式的。

// Objective-C
ChuangVideoCanvas *canvas = [[ChuangVideoCanvas alloc] init];
canvas.view = weakSelf.localView.renderView;
canvas.renderMode = ChuangVideoRenderModePerfectFill;
[self.liveEngine setPreview:canvas];//更新本地预览填充模式

4.5 设置预览或推流视频镜像模式

预览镜像模式仅对前置摄像头有效,后置摄像头无效,默认预览启用镜像,推流不启用镜像,可以通过以下方式设置预览和推流的镜像模式,详细镜像模式参照ChuangVideoMirrorMode

 // Objective-C
 [self.liveEngine setVideoMirrorMode:ChuangVideoMirrorModeOnlyPreviewMirror];//设置仅本地前置预览镜像模式

5、实现推流相关回调

当调用了开始推流、停止推流等方法,会触发ChuangLiveEngineDelegate协议中的推流结果回调代理方法。可在回调方法中处理推流返回的结果。

5.1 推流状态变化回调

当主动调用了开始推流、停止推流或者网络异常引起推流状态变化都会触发推流状态变化回调。推流状态state详情参照ChuangPublishState。errorCode为0表示用户正常调用成功返回,非0表示其他原因引起状态变化,错误码详情参照errorCode

// Objective-C

/*!
 @brief 推流状态变化回调
 @param streamId 流ID
 @param state 推流状态
 @param code 异常码
 */
- (void)onPublishStreamStateUpdate:(NSString *)streamId state:(ChuangPublishState)state errorCode:(int)code {

}

5.2 推流质量变化回调【仅用于调试,上线时不要使用】

当开始推流后,会每隔1秒返回推流的流质量数据,调试阶段可以通过该回调了解流质量情况。quality的详情参照ChuangPublishStreamQuality

// Objective-C

/*!
 @brief 推流质量变化回调
 @param streamId 流ID
 @param quality 流质量
 */
- (void)onPublishStreamQualityUpdate:(NSString *)streamId quality:(ChuangPublishStreamQuality *)quality

5.3 推流音量大小变化回调

前提是调用了开启音量监听(startSoundLevelMonitor),并设置了音量回调间隔(setSoundLevelMonitorInterval:),当开始推流后会按照内部设定频率收到回调,如果没有推流,则不收到该回调。当调用了停止音量监听(stopSoundLevelMonitor)后,也不会收到该回调。

ChuangSoundLevel为音量类。

/*!
@brief 推流音量大小变化回调 当开始推流后按照设定频率进行回调,如果没有推流,则不回调
@param soundLevel 音量变化信息
*/
- (void)onCaptureSoundLevelUpdate:(ChuangSoundLevel *)soundLevel {

}

results matching ""

    No results matching ""