自定义视频采集和渲染
- C++
更新时间不可用
createCustomVideoTrack
创建一个自定义视频轨道。
virtual video_track_id_t createCustomVideoTrack() = 0;要发布自定义视频源,请按照以下步骤操作:
- 调用该方法创建一个视频轨道,并获取视频轨道 ID。
- 调用
joinChannel加入频道。在 ChannelMediaOptions 中,将customVideoTrackId设置为你要发布的视频轨道 ID,并将publishCustomVideoTrack设置为 true。 - 调用 pushVideoFrame,并将
videoTrackId设置为第 2 步中设置的视频轨道 ID,即可在频道中发布对应的自定义视频源。
返回值
- 方法调用成功,返回视频轨道 ID,作为该视频轨道的唯一标识符。
- 方法调用失败,返回
0xffffffff。
所属接口类
destroyCustomVideoTrack
销毁指定的视频轨道。
virtual int destroyCustomVideoTrack(video_track_id_t video_track_id) = 0;参数
| 参数名 | 描述 |
|---|---|
video_track_id | 视频轨道 ID,由调用 createCustomVideoTrack 返回。 |
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
所属接口类
pushVideoFrame
通过视频轨道将外部原始视频帧推送到 SDK。
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 |
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
所属接口类
setExternalRemoteEglContext
设置用于渲染远端视频流的 EGL 上下文。
virtual int setExternalRemoteEglContext(void* eglContext) = 0;该方法用于替换 SDK 默认的远端 EGL 上下文,便于你自行管理 EGL 上下文。当引擎被销毁时,SDK 会自动释放该上下文。
注: 该方法仅适用于 Android 平台。
调用时机
请在加入频道前调用该方法。
参数
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
所属接口类
setExternalVideoSource
配置外部视频源。
virtual int setExternalVideoSource(bool enabled, bool useTexture, EXTERNAL_VIDEO_SOURCE_TYPE sourceType = VIDEO_FRAME, rtc::SenderOptions encodedVideoOption = rtc::SenderOptions()) = 0;调用该方法启用外部视频源后,可以调用 pushVideoFrame 向 SDK 推送外部视频数据。
注: 频道内不支持动态切换视频源。如需从外部视频源切换为内部视频源,必须先离开频道,调用该方法关闭外部视频源,再重新加入频道。
调用时机
请在加入频道前调用该方法。
参数
| 参数名 | 描述 |
|---|---|
enabled | |
useTexture | |
sourceType | 外部视频帧类型,是否为编码格式。详见 EXTERNAL_VIDEO_SOURCE_TYPE。 |
encodedVideoOption |
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。