自定义视频采集和渲染

最近更新时间:2022-09-20 05:17:40

功能介绍

除了音视频 SDK 音视频模块内部默认的采集和渲染外,下场景需求默认视频模块可能无法满足需求:

  • 有自己的音频或者视频模块
  • 希望推送非采集的视频源(如屏幕数据)
  • 有自己的美颜或经过前处理后的数据
  • 有自己视频采集设备管理

anyRTC 自采集和渲染包括 Push 和 mediaIO 两种自定义视频采集方式:

Push 方式: 调用 setExternalVideoSource 方法告知 SDK 使用外置的视频源。外置视频源通过 pushVideoFrame 发送给 SDK 。你可以使用自渲染模块对采集的视频进行渲染。

anyRTC SDK 对该模式不在支持渲染,渲染模块通过自采集自行处理;使用该模式无法切换回 SDK 采集。

mediaIO 方式: 调用 setVideoSource 方法告知 SDK 使用外置的视频源,外置视频源通过 consumeRawVideoFrame 发送给 SDK。你可以使用自渲染模块对采集的视频进行渲染。

C++ SDK 暂不提供专门的自定义视频渲染接口。你必须通过自采集的方式实现自渲染功能。即,自渲染模块的视频帧输入只能从自采集模块获取。

实现方法(Push 方式)

操作步骤

自定义视频采集和播放前,请确保已实现基本的音视频功能。

  1. joinChannel 前通过调用 setExternalVideoSource 指定外部视频采集设备。
  2. 指定外部采集设备后,开发者自行管理视频数据采集和处理。
  3. 完成视频数据处理后,再通过 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 平台的兼容性。

  • 自定义视频采集和渲染场景中,需要开发者具有采集或渲染视频的能力:

    • 自定义视频采集场景中,你需要自行管理视频数据的采集和处理。
    • 自定义视频渲染场景中,你需要自行管理视频数据的处理和显示。

相关文档

如果你还想在项目中实现自定义的音频采集和渲染功能,请参考文档自定义音频采集和播放