推流
如果登录房间时选择了主播或者互动连麦角色,需要进行推流操作,其他人才能看到直播画面。
即将自己的视频画面通过调用推流方法推送到服务端,观看者通过从服务端拉流,才可以看到推流者的视频画面。
步骤
1、启用采集预览
推流端开启本端采集画面预览需要传入显示预览的容器View,设置预览的填充模式和推流的视频输出格式。
//设置本地视图
ChuangVideoCanvas localCanvas = new ChuangVideoCanvas();
localCanvas.view = mainView.getSurfaceView();
localCanvas.videoMirrorMode = ChuangVideoMirrorMode.MIRROR_AUTO;
localCanvas.videoRenderMode = ChuangVideoRenderMode.ASPECT_FILL;
mLiveEngine.setPreviewCanvas(localCanvas);
mLiveEngine.startPreview();
方法参数说明:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
videoCanvas | ChuangVideoCanvas | 必传 | 设置本端视图显示信息对象,该方法初始化本地视图并设置本地用户视频显示信息,只影响本地用户看到的视频画面,不影响本地发布视频。调用该方法绑定本地视频流的显示视窗(view),并设置本地用户视图的渲染模式和镜像模式,详情参照ChuangVideoCanvas |
2、设置推流配置
2.1 设置推流的流质量配置
(1)设置推流视频质量配置:
推流前需要初始化流视频质量配置类ChuangVideoConfig,并设置推流的分辨率、比特率、帧率等数据,一定要在推流前设置,推流后设置或者修改不会生效。如果需要修改配置,需要停止推流,修改配置后,重新发起推流新的配置才会生效。
ChuangVideoConfig videoConfig = new ChuangVideoConfig();
videoConfig.encodeWidth = mVideoWidth;
videoConfig.encodeHeight = mVideoHeight;
videoConfig.fps = mVideoFps;
videoConfig.bitrateKbps = mVideoBitrate;
videoConfig.videoRenderMode = ChuangVideoRenderMode.ASPECT_FIT;
mLiveEngine.setVideoConfig(videoConfig);
方法参数说明:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
videoConfig | ChuangVideoConfig | 必传 | 推流配置信息:推流分辨率、帧率、码率 |
推流参数众多,具体可参考demo代码示例。
(2)设置推流音频质量配置:
设置音频质量配置类ChuangAudioConfig,通过该函数可以设置推流音频的编码类型、码率、音频声道等,如果不调用此函数,则默认标准音质,目前仅支持推流前设置,推流后设置或者修改不会生效。如果需要修改配置,需要停止推流,修改配置后,重新发起推流新的配置才会生效。
mLiveEngine.setAudioConfig(config);
方法参数说明:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
config | ChuangAudioConfig | 必传 | 音频配置Id。仅在推流前设置生效。 |
2.2 发起推流
登录房间成功返回后,比如主播或者多人视频场景下,需要将自己流信息推送给他人看到,则必须调用以下推流接口,将上述初始化的配置类传入推流接口。
推流前初始化ChuangStreamConfig,内部包括RTMP服务地址(rtmpAddress)和流类型(streamMode),默认流类型是音视频,如果不需要转推流到RTMP,推流类型也是音视频流。
注意
如果推流时需要同时推流到RTMP服务则必须给ChuangStreamConfig的rtmpAddress参数传入正确的RTMP服务地址,RTMP地址内容请参考以下方法参数说明;如果不需要同时推流到RTMP,则RTMP地址传空。
如果推流不是默认的音视频,比如推纯音频,则可以给ChuangStreamConfig的streamMode传相应纯音频推流的值。
ChuangStreamConfig chuangStreamConfig = new ChuangStreamConfig();
chuangStreamConfig.streamId = pushStreamId; // 流的唯一标识
chuangStreamConfig.streamMode = ChuangStreamMode.NOMAL;//默认音视频
chuangStreamConfig.rtmpAddress = rtmpAddress;//传入自己的RTMP地址,不需要转推则不传
mLiveEngine.startPublishStream(chuangStreamConfig);
方法参数说明:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
streamConfig | ChuangStreamConfig | 必传 | 推流配置参数对象,详情参照 ChuangStreamConfig |
3、停止推流
需要停止推流时调用:stopPublishStream
mLiveEngine.stopPublishStream();
4、媒体设备控制
4.1 设置本端麦克风是否静音
即推流时是否采集本端的声音,如果不采集设置true,如果采集则设置false,推流中可以实时修改该参数,会立即生效。如果不设置,推流默认是采集声音。
mLiveEngine.muteLocalAudio(pushStreamId, mute)
方法参数说明:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
streamId | String | 必传 | 流Id |
mute | boolean | 必传 | 本端是否静音,如果静音(即不采集麦克风声音)设置true,如果不静音(即采集麦克风声音)设置false |
4.2 关闭本机摄像头采集
即推流时是否采集本端的摄像头视频画面,默认采集,如果不采集设置true,如果采集则设置false,推流中可以实时修改该参数,会立即生效。如果不设置,推流默认是采集摄像头画面的。
mLiveEngine.muteLocalVideo(pushStreamId,mute);
方法参数说明:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
streamId | String | 必传 | 流Id |
mute | boolean | 必传 | 本地摄像头是否关闭,如果关闭(即不采集摄像头画面)设置true,如果不关闭(即采集摄像头画面)设置false |
4.3 切换前、后摄像头
推流过程中支持前后置摄像头切换,如果不设置,默认是前置摄像头。cameraType 摄像头类型,0:前置摄像像头 1:后置摄像头
mLiveEngine.switchCamera(cameraType)
方法参数说明:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
cameraType | ChuangCameraType | 必传 | 摄像头类型,详情参照ChuangCameraType |
4.4 改变本地预览视频画面镜像模式
一般在上面设置本地视图的方法中可以设置前置摄像头预览的镜像模式,如果开始推流或开始预览后想单独修改本地前置摄像头预览画面镜像模式,可重复调用mLiveEngine.setPreviewCanvas(videoCanvas);仅支持前置摄像头的镜像设置且默认是前置镜像显示,后置摄像头不支持镜像
5、实现推流相关回调
当调用了开始推流方法,就会触发推流结果回调方法。可在回调方法中处理推流返回的结果。
5.1 推流状态变化回调
/**
* 推流状态变化通知
* @param streamId 推流Id
* @param chuangPublishState 推流状态
* @param errorCode 错误码
*/
public void onPublishStreamStateUpdate(String streamId, ChuangPublishState chuangPublishState, int errorCode) {
}
5.2 推流质量变化回调【仅用于调试,上线时不要使用】
当开始推流后,会每隔1秒返回推流的流质量数据,调试阶段可以通过该回调了解流质量情况。
/**
* 推流质量回调
* @param streamId 流Id
* @param quality 流质量信息
*/
public void onPublishStreamQualityUpdate(String streamId, ChuangPublishStreamQuality quality) {
}
5.3 推流音量大小变化回调
当开始推流后会按照内部设定频率收到回调,如果没有推流,则不收到该回调。ChuangSoundLevel为音量类。
/**
* 推流音量大小回调
* @param soundLevel 音量信息
*/
public void onCaptureSoundLevelUpdate(ChuangSoundLevel soundLevel) {
}