功能介绍
除了音视频 SDK 音视频模块内部默认的采集和渲染外,下场景需求默认视频模块可能无法满足需求:
- 有自己的音频或者视频模块
- 希望推送非采集的视频源(如屏幕数据)
- 有自己的美颜或经过前处理后的数据
- 有自己视频采集设备管理
anyRTC 自采集和渲染包括 Push 和 mediaIO 两种自定义视频采集方式:
Push 方式: 调用 setExternalVideoSource
方法告知 SDK 使用外置的视频源。外置视频源通过 pushVideoFrame
发送给 SDK 。你可以使用自渲染模块对采集的视频进行渲染。
anyRTC SDK 对该模式不在支持渲染,渲染模块通过自采集自行处理;使用该模式无法切换回 SDK 采集。
mediaIO 方式: 调用 setVideoSource
方法告知 SDK 使用外置的视频源,外置视频源通过 consumeRawVideoFrame
发送给 SDK。你可以使用自渲染模块对采集的视频进行渲染。
C++ SDK 暂不提供专门的自定义视频渲染接口。你必须通过自采集的方式实现自渲染功能。即,自渲染模块的视频帧输入只能从自采集模块获取。
实现方法(Push 方式)
操作步骤
自定义视频采集和播放前,请确保已实现基本的音视频功能。
- 在
joinChannel
前通过调用setExternalVideoSource
指定外部视频采集设备。 - 指定外部采集设备后,开发者自行管理视频数据采集和处理。
- 完成视频数据处理后,再通过
pushVideoFrame
发送给 SDK 进行后续操作。
为满足实际使用需求,你可以在将视频数据发送回 SDK 前,通过 ExternalVideoFrame
修改视频数据。比如,设置 rotation
为 180,使视频帧顺时针旋转 180 度。
API 调用时序
示例代码
// 1. 调用 setExternalVideoSource 指定 SDK 之外的视频源。
nRet = mediaEngine->setExternalVideoSource(true, false);
// 2. 设置自采集模块,通过 ExternalVideoFrame 实例设置视频帧属性和 setVideoEncoderConfiguration 设置视频编码属性,并开始视频自采集
m_rtcEngine->setVideoEncoderConfiguration(config);
// 3. 调用 pushVideoFrame 将采集的视频帧推送至 SDK
mediaEngine->pushVideoFrame(VideoFrame);
// 4. 取消自定义视频源。
nRet = mediaEngine->setExternalVideoSource(false, false);
API 参考
实现方法(mediaIO 方式)
C++ 暂未实现
注意事项
-
回调函数里处理音视频数据要尽量高效,且保证算法稳定,避免影响整个客户端或产生崩溃。
-
音频部分需要设置
RAW_AUDIO_FRAME_OF_MODE_READ_WRITE
才可以读写和操作数据。 -
自定义渲染实现,也是使用裸数据接口,不调用
setupRemoteVideo
就可以不使用 SDK 渲染。自定义渲染要注意 Windows 平台的兼容性。 -
自定义视频采集和渲染场景中,需要开发者具有采集或渲染视频的能力:
- 自定义视频采集场景中,你需要自行管理视频数据的采集和处理。
- 自定义视频渲染场景中,你需要自行管理视频数据的处理和显示。
相关文档
如果你还想在项目中实现自定义的音频采集和渲染功能,请参考文档自定义音频采集和播放。