自定义视频采集和渲染
createCustomVideoTrack
创建一个自定义视频轨道。
Java
public abstract int createCustomVideoTrack();
调用该方法创建一个视频轨道,并获取视频轨道 ID。该 ID 可用于发布自定义视频源。要发布自定义视频源,请按照以下步骤操作:
- 调用该方法创建一个视频轨道,并获取视频轨道 ID。
- 调用
joinChannel加入频道。在 ChannelMediaOptions 中,将customVideoTrackId设置为要发布的视频轨道 ID,并将publishCustomVideoTrack设置为 true。 - 调用
pushExternalVideoFrameById,并将videoTrackId设置为第 2 步中指定的视频轨道 ID,即可在频道中发布对应的自定义视频源。
返回值
- 方法调用成功,返回视频轨道的唯一标识符,即视频轨道 ID。
- 方法调用失败,返回 0xffffffff。
destroyCustomVideoTrack
销毁指定的视频轨道。
Java
public abstract int destroyCustomVideoTrack(int video_track_id);
参数
- video_track_id
- 调用 createCustomVideoTrack 返回的视频轨道 ID。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
isTextureEncodeSupported
pushExternalVideoFrameById [1/2]
通过视频轨道向 SDK 推送外部原始视频帧。
Java
public abstract int pushExternalVideoFrameById(VideoFrame frame, int videoTrackId);
要发布自定义视频源,请按照以下步骤操作:
- 调用 createCustomVideoTrack 创建视频轨道并获取视频轨道 ID。
- 调用
joinChannel加入频道。在 ChannelMediaOptions 中,将customVideoTrackId设置为要发布的视频轨道 ID,并将publishCustomVideoTrack设置为 true。 - 调用
pushExternalVideoFrameById,并将videoTrackId设置为第 2 步中设置的视频轨道 ID,即可在频道中发布对应的自定义视频源。
pushExternalVideoFrameById 或调用 pushExternalVideoFrameById(参数为 AgoraVideoFrame)推送视频帧。两者的区别在于本方法支持纹理格式的视频数据。信息
如果你只需向频道中推送一个自定义视频源,可以直接调用 setExternalVideoSource,SDK 会自动创建一个
videoTrackId 为 0 的视频轨道。 危险:调用本方法后,即使你停止向 SDK 推送外部视频帧,自定义视频流仍会计入视频时长并产生费用。声网建议你根据实际情况采取适当措施以避免此类视频计费: - 如果你不再需要采集外部视频数据,可以调用 destroyCustomVideoTrack 销毁自定义视频轨道。
- 如果你只想将外部视频数据用于本地预览而不发布到频道中,可以调用 muteLocalVideoStream 取消发送视频流,或调用 updateChannelMediaOptions 将
publishCustomVideoTrack设置为 false。
参数
- frame
- 要推送的视频帧。
- videoTrackId
- 调用 createCustomVideoTrack 返回的视频轨道 ID。信息如果你只需推送一个自定义视频源,请将
videoTrackId设置为 0。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
pushExternalVideoFrame [1/2]
将外部原始视频帧推送至 SDK。
Java
public abstract boolean pushExternalVideoFrame(VideoFrame frame)
废弃
调用 setExternalVideoSource 方法并将 enabled 参数设置为 true,encodedFrame 参数设置为 false 后,可以使用该方法将外部原始视频帧推送至 SDK。你可以调用该方法或 pushExternalVideoFrame 推送视频帧。两者的区别在于该方法支持纹理格式的视频数据。
参数
- frame
- 要推送的视频帧。
返回值
- true:推送视频帧成功。
- false:推送视频帧失败。
pushExternalVideoFrameById [2/2]
通过视频轨道向 SDK 推送外部原始视频帧。
Java
public abstract int pushExternalVideoFrameById(AgoraVideoFrame frame, int videoTrackId);
要发布自定义视频源,请按照以下步骤操作:
- 调用 createCustomVideoTrack 创建视频轨道并获取视频轨道 ID。
- 调用
joinChannel加入频道。在 ChannelMediaOptions 中,将customVideoTrackId设置为要发布的视频轨道 ID,并将publishCustomVideoTrack设置为 true。 - 调用
pushExternalVideoFrameById,并将videoTrackId设置为步骤 2 中设置的视频轨道 ID,即可在频道中发布对应的自定义视频源。
pushExternalVideoFrameById 或调用 pushExternalVideoFrame 推送视频帧。两者的区别在于 pushExternalVideoFrameById 不支持 Texture 格式的视频数据。信息
如果你只需向频道中推送一个自定义视频源,可以直接调用 setExternalVideoSource 方法,SDK 会自动创建一个
videoTrackId 为 0 的视频轨道。 警告:调用 pushExternalVideoFrameById 后,即使你停止向 SDK 推送外部视频帧,自定义视频流仍会被计入视频时长并产生费用。声网建议你根据实际情况采取适当措施以避免此类视频计费: - 如果你不再需要采集外部视频数据,可以调用 destroyCustomVideoTrack 销毁自定义视频轨道。
- 如果你只想将外部视频数据用于本地预览而不在频道中发布,可以调用 muteLocalVideoStream 取消发送视频流,或调用 updateChannelMediaOptions 将
publishCustomVideoTrack设置为 false。
参数
- frame
- 要推送的外部原始视频帧。详见 AgoraVideoFrame。
- videoTrackId
- 调用 createCustomVideoTrack 返回的视频轨道 ID。信息如果你只需推送一个自定义视频源,请将
videoTrackId设置为 0。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
pushExternalVideoFrame [2/2]
将外部原始视频帧推送至 SDK。
Java
public abstract boolean pushExternalVideoFrame(AgoraVideoFrame frame)
废弃
调用 setExternalVideoSource 方法并将 enabled 参数设置为 true,encodedFrame 参数设置为 false 后,可以使用 pushExternalVideoFrame 将外部原始视频帧推送至 SDK。你也可以调用 pushExternalVideoFrame 推送视频帧。不同之处在于,此方法不支持 Texture 格式的视频数据。
参数
- frame
- 要推送的外部原始视频帧。详见 AgoraVideoFrame。
返回值
- true:推送成功。
- false:推送失败。
setExternalRemoteEglContext
设置用于渲染远端视频流的 EGL 上下文。
Java
public abstract int setExternalRemoteEglContext(Object eglContext);
该方法用于替换 SDK 默认的远端 EGL 上下文,便于你自行管理 EGL 上下文。当引擎销毁时,SDK 会自动释放该上下文。
适用场景
该方法适用于使用自定义渲染方式(如 Texture 格式)替代 SDK 默认渲染方式渲染远端视频帧的场景。
调用时机
请在加入频道前调用该方法。
参数
- eglContext
- 用于渲染远端视频流的 EGL 上下文。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。
setExternalVideoSource
配置外部视频源。
Java
public abstract int setExternalVideoSource(boolean enable, boolean useTexture, Constants.ExternalVideoSourceType sourceType);
调用该方法后,可以调用 pushExternalVideoFrameById 向 SDK 推送外部视频数据。
信息
频道内不支持动态切换视频源。若需从外部视频源切换为内部视频源,必须先离开频道,调用该方法关闭外部视频源,再重新加入频道。
调用时机
请在加入频道前调用该方法。
参数
- enable
- 是否使用外部视频源:
- true:使用外部视频源,SDK 会准备接收外部视频帧。
- false:(默认)不使用外部视频源。
- useTexture
- 是否使用 Texture 格式的外部视频帧:
- true:使用 Texture 格式的外部视频帧。
- false:(默认)不使用 Texture 格式的外部视频帧。
- sourceType
- 外部视频帧是否为编码格式,详见 ExternalVideoSourceType。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。详见错误码了解详情和解决建议。