音视频采集
音视频 Track 的配置
视频 Track 配置
如需指定视频码率,则需要在创建 Track 时设置指定的码率(单位为 bps)、分辨率及帧率。在 Track 的创建过程中,可以指定码率设置以及编码格式设置,编码格式可以设置分辨率及帧率,代码如下:
QNVideoFormat format = new QNVideoFormat(videoWidth, videoHeight, fps);
track = mEngine.createTrackInfoBuilder()
.setSourceType(QNSourceType.VIDEO_CAMERA)
.setVideoPreviewFormat(format)// 配置预览格式
.setVideoEncodeFormat(format)// 配置编码格式
.setBitrate(videoBitrate)// 配置码率
.create();
在 Track 创建时配置预览格式以及编码格式的参数是可选的。若在创建 Track 时不指定,那么将采用在初始化房间时 Setting 中配置的预览格式及编码格式。
预览格式及编码格式参数详情请见QNVideoFormat
需要注意的是,由于 Android 摄像头设备角度的原因,在竖屏情况下 SDK 内部会对图像进行旋转,在竖屏情况的宽高设置跟实际图像会有所差别。比如:在横屏情况下发布
1280 * 720
的视频图像,那么设置为new QNVideoFormat(1280, 720, DEFAULT_FPS)
即可;但如果想要在竖屏情况下发布720 * 1280
的视频图像,那么由于上述原因应设置为new QNVideoFormat(1280, 720, DEFAULT_FPS)
。另外,在合流配置中的宽高与此处的配置不同,合流配置的宽高需要以实际宽高为准。
音频 Track 配置
音频中没有分辨率的概念,如果需要指定音频 Track 的码率(单位为 bps),仅需在 Track 的创建过程中,指定码率设置,代码如下:
track = mEngine.createTrackInfoBuilder()
.setSourceType(QNSourceType.AUDIO)
.setBitrate(audioBitrate)// 配置码率
.create();
音视频数据采集
摄像头数据采集
开始/停止摄像头采集
通过调用 QNRTCEngine#startCapture()
接口进行摄像头采集,通过调用 QNRTCEngine#stopCapture()
接口停止摄像头采集,通过调用 QNRTCEngine#setCapturePreviewWindow
设置摄像头采集的预览窗口。
public void startCapture()
public void stopCapture()
public void setCapturePreviewWindow(QNSurfaceView previewWindow)
由于 Android 中的相机资源是单例的,若应用占用了相机资源则会导致其他应用无法获取到相机资源。SDK 支持在通话过程中可以通过
QNRTCEngine#startCapture()
获取相机资源,通过QNRTCEngine#stopCapture()
释放相机资源。
开启/关闭预览
通过调用 QNRTCEngine#setPreviewEnabled
接口进行预览画面的开关控制:
public void setPreviewEnabled(boolean isEnabled)
开启/关闭闪光灯
通过调用 QNRTCEngine#turnLightOn
接口开启闪光灯,通过调用 QNRTCEngine#turnLightOff
接口关闭闪光灯:
public boolean turnLightOn()
public boolean turnLightOff()
切换摄像头
通过调用 QNRTCEngine#switchCamera
接口进行摄像头的切换。
public void switchCamera(QNCameraSwitchResultCallback callback)
其中,切换成功与否会通过 QNCameraSwitchResultCallback 回调出来,若不需要结果回调,可以传入 null。
相机在启动或使用过程中可能会遇到一些问题,在此情况下 SDK 会在
QNRTCEngineEventListener#onError
回调中回调20503
错误码。
设置缩放
通过调用 QNRTCEngine.setZoom(float zoom) 接口对相机采集的画面进行缩放。需要注意的是 setZoom 里的参数必须是通过调用 QNRTCEngine.getZooms() 接口获取到的列表里的数值,如果 QNRTCEngine.getZooms() 接口获取到的列表为空,即代表不支持缩放设置:
public void setZoom(float zoom);
public List<Float> getZooms();
开启/关闭镜像
SDK 内提供了预览镜像和采集镜像两种镜像接口。通过调用 QNRTCEngine.setPreviewMirror(boolean mirror) 接口即可开启或关闭预览镜像,开启了预览镜像仅仅在本地预览才会镜像,远端看还是正常的画面;通过调用 QNRTCEngine.setMirror(boolean isMirrorEnabled) 接口即可开启或关闭采集镜像,若开启了采集镜像本地预览和远端都将会显示镜像画面:
public void setMirror(boolean isMirrorEnabled);
public void setPreviewMirror(boolean mirror);
美颜
通过调用 QNRTCEngine#setBeauty
接口进行内置美颜的参数配置。其中,美颜的开关可以通过 QNBeautySetting 来设置,具体的美颜配置可以参考QNBeautySetting。
public void setBeauty(QNBeautySetting beautySetting)
如需接入外部美颜或滤镜,可以通过 QNRTCEngine#setCaptureVideoCallBack
接口设置 QNCaptureVideoCallback 回调来对接外部第三方美颜或者滤镜。
屏幕录制采集
调用屏幕录制作为视频 Track 只需要在调用创建该 Track 前使用 QNScreenCaptureUtil 工具类申请屏幕录制权限 (链接中有指导)。
外部数据导入
导入视频数据
如需导入视频数据作为视频源,在创建 Track 时将 SourceType 设置为 QNSourceType.VIDEO_EXTERNAL 即可创建一个外部视频导入的 Track,然后通过调用 QNRTCEngine.pushVideoBuffer(String trackId, QNVideoFrame frame) 接口进行外部视频数据的导入。
支持视频格式为:NV21 格式,为兼容所有机型,建议选择软编码的方式进行导入。
public void pushVideoBuffer(String trackId, QNVideoFrame frame);
导入音频数据
如需导入音频数据作为音频源,创建一个 Audio Track 即可,然后通过调用 QNRTCEngine.pushAudioBuffer(byte[] buffer) 进行外部音频数据的导入。
支持的音频数据格式为:PCM 格式,16 位宽;请在 inputFormat 填充正确的采样率和声道数。
public void pushAudioBuffer(byte[] buffer, QNAudioFormat inputFormat);
由于 SDK 仅支持一路音频 Track,若要使用导入外部音频功能,需要在初始化我们的 QNRTCEngine 时,需要在 QNRTCSetting 中设置 setExternalAudioInputEnabled 为 true。