推流

推流

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

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

步骤

1、启用推流预览

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

// Objective-C

//设置本地视图
[self.liveSDkManager setLocalView:self.mainView videoRenderMode:CCVideoRenderModePerfectFill  andPixelBufferType:kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange];

方法参数说明:

参数 类型 是否必传 描述
localView UIView 必传 展示本端视频预览的容器View界面
videoRenderMode CCVideoRenderMode 选传 预览画面在容器view上的填充模式,默认等比例缩放填满,详情参照CCVideoRenderMode
pixelBufferTypeKey OSType 选传 视频输出格式 ,如kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange或kCVPixelFormatType_32BGRA 默认kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange

2、设置推流配置

2.1 设置推流的流属性配置

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

为了快速实现推流,CCStreamConfig中有提供推荐常用推流属性快速设置项:videoConfigPreset,可以只设置该参数即可实现推流分辨率、比特率、帧率的设置,他们的对应关系见下表:

参数 分辨率(宽*高) 帧率 比特率(kbps)
CC_VIDEO_CONFIG_PRESET_180X320_15_300 180 X 320 15 300
CC_VIDEO_CONFIG_PRESET_270X480_15_400 270 X 480 15 400
CC_VIDEO_CONFIG_PRESET_360X640_15_600 360 X 640 15 600
CC_VIDEO_CONFIG_PRESET_540X960_15_1200 540 X 960 15 1200
CC_VIDEO_CONFIG_PRESET_720X1280_15_1500 720 X 1280 15 1500
CC_VIDEO_CONFIG_PRESET_1080X1920_15_3000 1080 X 1920 15 3000
// Objective-C

self.configInfo = [[CCStreamConfig alloc] init];
self.configInfo.videoConfigPreset = CC_VIDEO_CONFIG_PRESET_540X960_15_1200;//设置推流属性快速设置项

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

// Objective-C

self.configInfo = [[CCStreamConfig alloc] init];
self.configInfo.videoResolution = CGSize(540,960); //设置推流视频分辨率(宽X高),推荐值:540x960
self.configInfo.videoBitrate = 600;             //设置推流的视频比特率(单位:kbps),推荐值:600kbps
self.configInfo.videoFPS = 15;     //设置推流的视屏帧率,推荐值:15

方法参数说明:

参数 类型 是否必传 描述
videoResolution CGSize 必传 设置推流视频分辨率,推荐值:540x960
videoBitrate NSUInteger 必传 设置推流的视频比特率(单位:kbps),推荐值:600 kbps
videoFPS NSUInteger 必传 设置推流的视屏帧率,推荐值:15

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

2.2 发起推流

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

注意:如果需要同时推流到RTMP服务则必须传入正确的RTMP服务地址,rtmp地址内容请参考以下方法参数说明;如果不需要同时推流到RTMP,则rtmp地址传空。

// Objective-C

//开始推流

[self.liveSDkManager publishStream:[CYUserInfo sharedInstance].streamId withStreamConfig:self.configInfo];

方法参数说明:

参数 类型 是否必传 描述
streamConfig CCStreamConfig 必传 推流配置参数对象,详情参照CCStreamConfig
streamId NSString 必传 流ID,流信息唯一标识,注意流ID在APP内不能重复,流ID仅支持’0’-‘9’,’a’-‘z’,’A’-‘Z',‘-’,'_'字符,不超过256个字符

3、停止推流

需要停止推流时调用:stopPublishStream

// Objective-C

[self.liveSDkManager stopPublishStream];

4、媒体设备控制

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

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

// Objective-C

[self.mainManage setMicMute:NO];

方法参数说明:

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

4.2 切换前、后摄像头

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

// Objective-C

[self.mainManage switchCamera:0];

方法参数说明:

参数 类型 是否必传 描述
cameraType int 必传 摄像头类型,0:前置摄像像头 1:后置摄像头,默认前置摄像头

5、实现推流相关回调

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

5.1 推流开始运行回调

当发起推流后,会收到该回调表示推流成功。

// Objective-C
- (void)onPublishDidStartCallBack{

   //处理推流成功的操作,比如更新推流状态等操作,如果需要混流,可以在这里调用混流方法

}

5.2 推流停止运行回调

当调用停止推流后,会收到停止推流的回调。

// Objective-C

/*!
 @brief 推流停止运行回调

 @param errorCode 0 代表正常结束,其他值均代表异常结束
 */
- (void)onPublishDidStopCallBack:(NSInteger)errorCode{
    if (errorCode == 0) {
        self.publishStatus = PublishEnd;
    }else{
        self.publishStatus = PublishFailed;
    }

}

5.3 推流质量监控回调【仅用于调试,上线时不要使用】

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

// Objective-C

/*!
 @brief (可选)回调发布流网络状态(推荐仅在调试时使用)
 @param dicStatus  @“streamID”(流名称) @"videoFps"(当前视频帧率), @"videoBitrateKbps"(当前视频码率),@“delay”(延时),"networkLost"(丢包)
 */
- (void)onPublishStreamStatusCallback:(NSDictionary *)dicStatus
{

}