自定义视频采集和渲染
createCustomVideoTrack
创建一个自定义视频轨道。
C++
virtual video_track_id_t createCustomVideoTrack() = 0;
要发布自定义视频源,请按照以下步骤操作:
- 调用该方法创建一个视频轨道,并获取视频轨道 ID。
- 调用
joinChannel加入频道。在 ChannelMediaOptions 中,将customVideoTrackId设置为你要发布的视频轨道 ID,并将publishCustomVideoTrack设置为 true。 - 调用 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;
要发布自定义视频源,请按照以下步骤操作:
- 调用 createCustomVideoTrack 创建视频轨道并获取视频轨道 ID。
- 调用
joinChannel加入频道。在 ChannelMediaOptions 中,将customVideoTrackId设置为要发布的视频轨道 ID,并将publishCustomVideoTrack设置为 true。 - 调用 pushVideoFrame,并将
videoTrackId设置为第 2 步中设置的视频轨道 ID,即可在频道中发布对应的自定义视频源。
信息
如果你只需向频道中推送一个自定义视频源,可以直接调用 setExternalVideoSource 方法,SDK 会自动创建一个
videoTrackId 为 0 的视频轨道。 警告:调用 pushVideoFrame 后,即使你停止向 SDK 推送外部视频帧,自定义视频流仍会计入视频时长并产生费用。声网建议你根据实际情况采取适当措施以避免此类视频计费: - 如果你不再需要采集外部视频数据,可以调用 destroyCustomVideoTrack 销毁自定义视频轨道。
- 如果你只想将外部视频数据用于本地预览而不在频道中发布,可以调用 muteLocalVideoStream 停止发送视频流,或调用 updateChannelMediaOptions 将
publishCustomVideoTrack设置为 false。
适用场景
自 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
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
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。