自定义视频采集和渲染
- Flutter
更新时间不可用
createCustomVideoTrack
创建一个自定义的视频轨道。
Future<int> createCustomVideoTrack();当你需要在频道中发布自定义采集视频时,可参考以下步骤:
- 调用该方法创建视频轨道并获得视频轨道 ID。
- 调用 joinChannel 加入频道时,将 ChannelMediaOptions 中的
customVideoTrackId设置为你想要发布的视频轨道 ID,并将publishCustomVideoTrack设置为 true。 - 调用 pushVideoFrame 将
videoTrackId指定为步骤 2 中指定的视频轨道 ID,即可实现在频道内发布对应的自定义视频源。
返回值
- 方法调用成功,返回视频轨道 ID 作为该视频轨道的唯一标识。
- 方法调用失败,返回 0xffffffff。详见错误码了解详情和解决建议。
所属接口类
destroyCustomVideoTrack
销毁指定的视频轨道。
Future<void> destroyCustomVideoTrack(int videoTrackId);参数
| 参数名 | 描述 |
|---|---|
videoTrackId | 调用 createCustomVideoTrack 方法返回的视频轨道 ID。 |
返回值
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。详见错误码了解详情和解决建议。
所属接口类
isPipActivated
检查画中画模式是否已激活。
Future<bool> isPipActivated();自从
自 v6.6.2 版本新增。
返回值
- true:画中画模式已激活。
- false:画中画模式未激活。
所属接口类
pipDispose
释放画中画相关的资源。
Future<void> pipDispose();自从
自 v6.6.2 版本新增。
所属接口类
pipIsAutoEnterSupported
检查是否支持自动进入画中画模式。
Future<bool> pipIsAutoEnterSupported();自从
自 v6.6.2 版本新增。
返回值
- true:支持自动进入画中画模式。
- false:不支持自动进入画中画模式。
所属接口类
pipIsSupported
检查当前设备是否支持画中画模式。
Future<bool> pipIsSupported();自从
自 v6.6.2 版本新增。
返回值
- true:当前设备支持画中画模式。
- false:当前设备不支持画中画模式。
所属接口类
pipSetup
配置画中画模式。
Future<bool> pipSetup(AgoraPipOptions options);自从
自 v6.6.2 版本新增。
参数
| 参数名 | 描述 |
|---|---|
options | 画中画配置选项,详见 AgoraPipOptions。 |
返回值
- true:方法调用成功。
- false:方法调用失败。
所属接口类
pipStart
启动画中画模式。
Future<bool> pipStart();自从
自 v6.6.2 版本新增。
返回值
- true:方法调用成功。
- false:方法调用失败。
所属接口类
pipStop
停止画中画模式。
Future<void> pipStop();自从
自 v6.6.2 版本新增。
所属接口类
pushVideoFrame
将外部原始视频帧通过自定义视频轨道发布到频道中。
Future<void> pushVideoFrame(
{required ExternalVideoFrame frame, int videoTrackId = 0});当你需要在频道中发布自定义采集视频时,可参考以下步骤:
- 调用 createCustomVideoTrack 方法创建视频轨道并获得视频轨道 ID。
- 调用 joinChannel 加入频道时,将 ChannelMediaOptions 中的
customVideoTrackId设置为你想要发布的视频轨道 ID,并将publishCustomVideoTrack设置为 true。 - 调用该方法将
videoTrackId指定为步骤 2 中指定的视频轨道 ID,即可实现在频道内发布对应的自定义视频源。
注: 调用该方法后,即使你停止推送外部视频帧到 SDK,自定义采集的视频流仍然会被计入视频时长用量并产生费用,声网建议你根据实际情况采取相应措施避免此类视频计费:
- 如果你不再需要采集外部视频数据,可以调用 destroyCustomVideoTrack 销毁自定义采集的视频轨道。
- 如果你只想将采集到的外部视频数据用于本地预览、而不在频道内发布,可以调用 muteLocalVideoStream 取消发送视频流,或调用 updateChannelMediaOptions 将
publishCustomVideoTrack设置为 false。
参数
| 参数名 | 描述 |
|---|---|
frame | 待推送的视频帧。详见 ExternalVideoFrame。 |
videoTrackId |
返回值
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。详见错误码了解详情和解决建议。
所属接口类
registerPipStateChangedObserver
注册画中画状态改变观测器。
Future<void> registerPipStateChangedObserver(AgoraPipStateChangedObserver observer);自从
自 v6.6.2 版本新增。
参数
| 参数名 | 描述 |
|---|---|
observer | 画中画状态改变观测器,详见 AgoraPipStateChangedObserver。 |
所属接口类
dispose
释放画中画相关的资源。
Future<void> dispose();自从
自 v6.6.2 版本新增。
所属接口类
setExternalRemoteEglContext
设置远端视频流渲染的 EGL 环境上下文。
Future<void> setExternalRemoteEglContext(int eglContext);通过设置该方法,开发者可以替换 SDK 内部默认的远端 EGL 环境上下文,便于实现统一的 EGL 上下文管理。 引擎销毁时,SDK 会自动释放 EGL 环境上下文。
注: 该方法仅适用于 Android。
适用场景
该方法适用于使用 Texture 格式的视频数据进行远端视频自渲染的场景。
调用时机
该方法需要在加入频道前调用。
参数
返回值
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。详见错误码了解详情和解决建议。
所属接口类
setExternalVideoSource
设置外部视频源。
Future<void> setExternalVideoSource(
{required bool enabled,
required bool useTexture,
ExternalVideoSourceType sourceType = ExternalVideoSourceType.videoFrame,
SenderOptions encodedVideoOption = const SenderOptions()});调用该方法启用外部视频源后,你可以调用 pushVideoFrame 向 SDK 推送外部视频数据。
注: 不支持在频道内动态切换视频源。如果已调用该方法启用外部视频源并加入频道,若想切换为内部视频源,必须先退出频道,然后调用该方法关闭外部视频源,再重新加入频道。
调用时机
该方法需要在加入频道前调用。
参数
| 参数名 | 描述 |
|---|---|
enabled | |
useTexture | |
sourceType | 外部视频帧是否编码,详见 ExternalVideoSourceType。 |
encodedVideoOption | 视频编码选项。如果 |
返回值
方法成功调用时,无返回值;方法调用失败时,会抛出 AgoraRtcException 异常,你需要捕获异常并进行处理。详见错误码了解详情和解决建议。
所属接口类
unregisterPipStateChangedObserver
取消注册画中画状态改变观测器。
Future<void> unregisterPipStateChangedObserver();自从
自 v6.6.2 版本新增。
所属接口类
onPipStateChanged
画中画状态改变回调。
final void Function(AgoraPipState state, String? error) onPipStateChanged;自从
自 v6.6.2 版本新增。
当画中画状态发生改变时,SDK 会触发此回调。
参数
| 参数名 | 描述 |
|---|---|
state | 新的画中画状态,详见 AgoraPipState。 |
error |