如果登录房间时选择了主播或者互动连麦角色,需要进行推流操作,其他人才能看到直播画面。
即将自己的视频画面通过调用推流方法推送到服务端,观看者通过从服务端拉流,才可以看到自己的视频画面。
推流端开启本端画面预览需要传入显示预览的容器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 |
推流前需要初始化流属性配置类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代码示例。
登陆房间成功返回后,比如主播或者多人视频场景下,需要将自己流信息推送给他人看到,则必须调用以下推流接口,将上述初始化的配置类传入推流接口。
注意:如果需要同时推流到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个字符 |
需要停止推流时调用:stopPublishStream
// Objective-C
[self.liveSDkManager stopPublishStream];
即推流时是否采集本端的声音,如果不采集设置Yes,如果采集则设置NO,推流中可以实时修改该参数,会立即生效。如果不设置,推流默认是采集声音。
// Objective-C
[self.mainManage setMicMute:NO];
方法参数说明:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
isMute | BOOL | 必传 | 本端是否静音,如果静音(即不采集麦克风声音)设置YES,如果不静音(即采集麦克风声音)设置NO |
推流过程中支持前后置摄像头切换,如果不设置,默认是前置摄像头。cameraType 摄像头类型,0:前置摄像像头 1:后置摄像头
// Objective-C
[self.mainManage switchCamera:0];
方法参数说明:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
cameraType | int | 必传 | 摄像头类型,0:前置摄像像头 1:后置摄像头,默认前置摄像头 |
当调用了开始推流方法,就会触发CCLiveEngineDelegate协议中的推流结果回调代理方法。可在回调方法中处理推流返回的结果。
当发起推流后,会收到该回调表示推流成功。
// Objective-C
- (void)onPublishDidStartCallBack{
//处理推流成功的操作,比如更新推流状态等操作,如果需要混流,可以在这里调用混流方法
}
当调用停止推流后,会收到停止推流的回调。
// Objective-C
/*!
@brief 推流停止运行回调
@param errorCode 0 代表正常结束,其他值均代表异常结束
*/
- (void)onPublishDidStopCallBack:(NSInteger)errorCode{
if (errorCode == 0) {
self.publishStatus = PublishEnd;
}else{
self.publishStatus = PublishFailed;
}
}
当开始推流后,会每隔1秒返回推流的流质量数据,调试阶段可以通过该回调了解流质量情况。
// Objective-C
/*!
@brief (可选)回调发布流网络状态(推荐仅在调试时使用)
@param dicStatus @“streamID”(流名称) @"videoFps"(当前视频帧率), @"videoBitrateKbps"(当前视频码率),@“delay”(延时),"networkLost"(丢包)
*/
- (void)onPublishStreamStatusCallback:(NSDictionary *)dicStatus
{
}