自定义视频采集和渲染

  • C++

更新时间不可用

createCustomVideoTrack

创建一个自定义视频轨道。

C++
virtual video_track_id_t createCustomVideoTrack() = 0;

要发布自定义视频源,请按照以下步骤操作:

  1. 调用该方法创建一个视频轨道,并获取视频轨道 ID。
  2. 调用 joinChannel 加入频道。在 ChannelMediaOptions 中,将 customVideoTrackId 设置为你要发布的视频轨道 ID,并将 publishCustomVideoTrack 设置为 true。
  3. 调用 pushVideoFrame,并将 videoTrackId 设置为第 2 步中设置的视频轨道 ID,即可在频道中发布对应的自定义视频源。

返回值

  • 方法调用成功,返回视频轨道 ID,作为该视频轨道的唯一标识符。
  • 方法调用失败,返回 0xffffffff。

所属接口类

destroyCustomVideoTrack

销毁指定的视频轨道。

C++
virtual int destroyCustomVideoTrack(video_track_id_t video_track_id) = 0;

参数

参数名描述
video_track_id

视频轨道 ID,由调用 createCustomVideoTrack 返回。

表格内容超出当前宽度,可横向滚动查看更多列。

返回值

  • 0:方法调用成功。
  • < 0:方法调用失败。详见错误码了解详情和解决建议。

所属接口类

pushVideoFrame

通过视频轨道将外部原始视频帧推送到 SDK。

C++
virtual int pushVideoFrame(base::ExternalVideoFrame* frame, unsigned int videoTrackId = 0) = 0;

要发布自定义视频源,请按照以下步骤操作:

  1. 调用 createCustomVideoTrack 创建视频轨道并获取视频轨道 ID。
  2. 调用 joinChannel 加入频道。在 ChannelMediaOptions 中,将 customVideoTrackId 设置为要发布的视频轨道 ID,并将 publishCustomVideoTrack 设置为 true。
  3. 调用 pushVideoFrame,并将 videoTrackId 设置为第 2 步中设置的视频轨道 ID,即可在频道中发布对应的自定义视频源。

注: 如果你只需向频道中推送一个自定义视频源,可以直接调用 setExternalVideoSource 方法,SDK 会自动创建一个 videoTrackId 为 0 的视频轨道。 警告:调用 pushVideoFrame 后,即使你停止向 SDK 推送外部视频帧,自定义视频流仍会计入视频时长并产生费用。声网建议你根据实际情况采取适当措施以避免此类视频计费:

适用场景

自 v4.2.3 起,SDK 支持 ID3D11Texture2D 视频格式,该格式广泛应用于游戏场景。当你需要将此类视频帧推送到 SDK 时,调用 pushVideoFrame,并将 frame 中的 format 设置为 VIDEO_TEXTURE_ID3D11TEXTURE2D,设置 d3d11_texture_2d 和 texture_slice_index 成员,并将视频帧格式设置为 ID3D11Texture2D。

参数

参数名描述
frame

要推送的外部原始视频帧。详见 ExternalVideoFrame。

videoTrackId

调用 createCustomVideoTrack 返回的视频轨道 ID。

注: 如果你只需推送一个自定义视频源,请将 videoTrackId 设置为 0。

表格内容超出当前宽度,可横向滚动查看更多列。

返回值

  • 0:方法调用成功。
  • < 0:方法调用失败。详见错误码了解详情和解决建议。

所属接口类

setExternalRemoteEglContext

设置用于渲染远端视频流的 EGL 上下文。

C++
virtual int setExternalRemoteEglContext(void* eglContext) = 0;

该方法用于替换 SDK 默认的远端 EGL 上下文,便于你自行管理 EGL 上下文。当引擎被销毁时,SDK 会自动释放该上下文。

注: 该方法仅适用于 Android 平台。

调用时机

请在加入频道前调用该方法。

参数

参数名描述
eglContext

用于渲染远端视频流的 EGL 上下文。

表格内容超出当前宽度,可横向滚动查看更多列。

返回值

  • 0:方法调用成功。
  • < 0:方法调用失败。详见错误码了解详情和解决建议。

所属接口类

setExternalVideoSource

配置外部视频源。

C++
virtual int setExternalVideoSource(bool enabled, bool useTexture, EXTERNAL_VIDEO_SOURCE_TYPE sourceType = VIDEO_FRAME, rtc::SenderOptions encodedVideoOption = rtc::SenderOptions()) = 0;

调用该方法启用外部视频源后,可以调用 pushVideoFrame 向 SDK 推送外部视频数据。

注: 频道内不支持动态切换视频源。如需从外部视频源切换为内部视频源,必须先离开频道,调用该方法关闭外部视频源,再重新加入频道。

调用时机

请在加入频道前调用该方法。

参数

参数名描述
enabled

是否使用外部视频源:

  • true:使用外部视频源,SDK 会准备接收外部视频帧。
  • false:(默认)不使用外部视频源。
useTexture

是否使用 Texture 格式的外部视频帧:

  • true:使用 Texture 格式的视频帧。
  • false:(默认)不使用 Texture 格式的视频帧。
sourceType

外部视频帧类型,是否为编码格式。详见 EXTERNAL_VIDEO_SOURCE_TYPE。

encodedVideoOption

视频编码选项。仅当 sourceType 为 ENCODED_VIDEO_FRAME 时需设置该参数。

注: 设置该参数请联系技术支持。

表格内容超出当前宽度,可横向滚动查看更多列。

返回值

  • 0:方法调用成功。
  • < 0:方法调用失败。详见错误码了解详情和解决建议。

所属接口类