收发多路视频
简介
Pano SDK 支持同时发送多路视频,适用于一些特殊设备或特殊场景,例如双师课堂、娃娃机等。
[注意] 如果应用在同一时刻只需发送一路视频,例如,手机的前后置摄像头切换,则无需参考此文档。
各端 SDK 相关接口,请查看下列介绍:
Windows (C++)
获取视频采集设备及本地预览
请参考 快速接入 文档的章节:获取视频采集设备 和 本地预览。
如需收发多路视频,请忽略快速接入文档中的 操作视频 章节,改为根据本文档来操作视频。
获取视频流管理器及注册回调
通过 RtcEngine
实例的 getVideoStreamManager
方法获取视频流管理器(VideoStreamManager)。
通过 VideoStreamManager
实例的 setCallback
方法设置视频流管理器的回调。
完整的回调事件列表,请 点此查看。
创建视频流
- 通过
VideoStreamManager
实例的createVideoStream
方法创建视频流,该方法需要传入两个参数。deviceId
参数为设备ID,可以通过前述 获取视频采集设备 部分获取设备ID。streamId
创建成功后此参数返回相应的视频流ID。
- 通过
VideoStreamManager
实例的getCaptureDevice
方法获取当前视频流使用的采集设备,setCaptureDevice
方法更新视频流的采集设备。 - 通过
VideoStreamManager
实例的destroyVideoStream
方法销毁一个视频流。
发送视频流
- 通过
VideoStreamManager
实例的startVideo
方法发送视频流。
该方法有两个重载方法,参数类型不同,一个传入显示窗口和RenderConfig
,一个传入数据接收漕和VideoProfileType
。 - 通过
VideoStreamManager
实例的stopVideo
方法停止发送视频流。
其他用户开启视频流的通知
- 当其他用户通过
VideoStreamManager
发送视频流,会触发VideoStreamManager::Callback
的onUserVideoStart
通知。 - 当其他用户通过
VideoStreamManager
停止发送视频流,会触发VideoStreamManager::Callback
的onUserVideoStop
通知。
订阅其他用户的视频流
- 收到其他用户开启视频流的通知后,可以通过
VideoStreamManager
实例的subscribeVideo
方法订阅其视频流。
subscribeVideo
有两个重载方法,参数类型不同,一个传入显示窗口和VideoConfig
,一个传入数据接收漕和VideoProfileType
。 - 订阅其他用户的视频流后,会触发
VideoStreamManager::Callback
的onUserVideoSubscribe
通知,其中的result
参数表示订阅结果,Success
表示订阅成功。 - 通过
VideoStreamManager
实例的unsubscribeVideo
方法取消订阅视频流。
视频流首帧通知
当自己发送或收到其他用户视频流首帧时,会触发VideoStreamManager::Callback
的 onFirstVideoFrameRendered
通知,其中返回 userId
和 streamId
。
Android (Java)
获取视频采集设备
通过 RtcEngine
实例的 getVideoDeviceManager
方法获取视频设备管理器(RtcVideoDeviceManager
),再通过其 getCaptureDeviceList
方法获取视频采集设备列表,将返回 RtcDeviceInfo
列表,每个元素包含属性: deviceId
(设备ID)和 deviceName
(设备名称)。
RtcDeviceInfo[] videoDevices = mRtcEngine.getVideoDeviceManager().getCaptureDeviceList();
还可以通过
RtcVideoDeviceManager
的setDeviceOrientation
方法设置视频设备的初始方位,setMirrorCorrection
方法设置视频设备的镜像纠正以满足特殊场景的需求。
获取视频流管理器及注册回调
通过 RtcEngine
实例的 getVideoStreamManager
方法获取视频流管理器(RtcVideoStreamManager)。
通过 RtcVideoStreamManager
实例的 setCallback
方法设置视频流管理器的回调。
完整的回调事件列表,请 点此查看。
创建视频流
- 通过
RtcVideoStreamManager
实例的createVideoStream
方法创建视频流,该方法需要传入deviceId
参数(设备ID,可以通过前述 获取视频采集设备 部分获取),如果创建成功,将返回相应的视频流ID。 - 通过
RtcVideoStreamManager
实例的getCaptureDevice
方法获取当前视频流使用的采集设备,setCaptureDevice
方法更新视频流的采集设备。 - 通过
RtcVideoStreamManager
实例的destroyVideoStream
方法销毁一个视频流。
发送视频流
- 通过
RtcVideoStreamManager
实例的startVideo
方法发送视频流,stopVideo
方法停止发送视频流。 - 通过
RtcVideoStreamManager
实例的setLocalVideoRender(int streamId, IVideoRender render)
方法设置本地用户的视频画布。
关于视频画布
render
的用法示例,请 点此查看。
其他用户开启视频流的通知
- 当其他用户通过
RtcVideoStreamManager
发送视频流,会触发RtcVideoStreamManager::Callback
的onUserVideoStart
通知。 - 当其他用户通过
RtcVideoStreamManager
停止发送视频流,会触发RtcVideoStreamManager::Callback
的onUserVideoStop
通知。
订阅其他用户的视频流
- 收到其他用户开启视频流的通知后,可以通过
RtcVideoStreamManager
实例的subscribeVideo
方法订阅其视频流,unsubscribeVideo
方法取消订阅视频流。 - 通过
RtcVideoStreamManager
实例的setRemoteVideoRender
方法设置远端用户的视频画布。
视频流首帧通知
当自己发送或收到其他用户视频流首帧时,会触发RtcVideoStreamManager.Callback
的 onFirstVideoFrameRendered
通知,其中返回 userId
和 streamId
。
macOS (Objective-C)
获取视频采集设备
通过 PanoRtcEngineKit
的 - enumerateDevices:
方法枚举设备,type
参数传入 kPanoDeviceVideoCamera
表示摄像设备。
将返回 PanoRtcDeviceInfo
数组,每个元素包含属性: deviceId
(设备ID)和 deviceName
(设备名称)。
本地预览
通过 PanoRtcEngineKit
的 - startPreview:withView:config:
或 - startPreview:withDelegate:profile:
方法开启视频预览。前者随带渲染视图,后者随带外置渲染器。
获取视频流管理器及注册回调
通过 PanoRtcEngineKit
实例的 - videoStreamManager
方法获取视频流管理器(PanoRtcVideoStreamManager)。
通过 PanoRtcVideoStreamManager
实例的 - setDelegate:
方法设置视频流管理器的回调对象。
完整的回调事件列表,请 点此查看。
创建视频流
- 通过
PanoRtcVideoStreamManager
实例的- createVideoStream:
方法创建视频流,该方法需要传入deviceId
参数(设备ID,可以通过前述 获取视频采集设备 部分获取),如果创建成功,将返回相应的视频流ID。 - 通过
PanoRtcVideoStreamManager
实例的- getCaptureDevice:
方法获取当前视频流使用的采集设备,- setCaptureDevice:stream:
方法更新视频流的采集设备。 - 通过
PanoRtcVideoStreamManager
实例的- destroyVideoStream:
方法销毁一个视频流。
发送视频流
- 通过
PanoRtcVideoStreamManager
实例的- startVideo:view:config:
或- startVideo:delegate:profile:
方法发送视频流。前者随带渲染视图,后者随带外置渲染器。 - 通过
PanoRtcVideoStreamManager
实例的- stopVideo:
方法停止发送视频流。
其他用户开启视频流的通知
- 当其他用户通过
PanoRtcVideoStreamManager
发送视频流,会触发PanoRtcVideoStreamDelegate
的- onUserVideoStart:stream:maxProfile:
通知。 - 当其他用户通过
PanoRtcVideoStreamManager
停止发送视频流,会触发PanoRtcVideoStreamDelegate
的- onUserVideoStop:stream:
通知。
订阅其他用户的视频流
- 收到其他用户开启视频流的通知后,可以通过
PanoRtcVideoStreamManager
实例的- subscribeVideo:stream:view:config:
或- subscribeVideo:stream:delegate:profile:
方法订阅其视频流。前者随带渲染视图,后者随带外置渲染器。 - 订阅其他用户的视频流后,会触发
PanoRtcVideoStreamDelegate
的- onUserVideoSubscribe:stream:result:
通知,其中的result
参数表示订阅结果,kPanoSubscribeSuccess
表示订阅成功。 - 通过
PanoRtcVideoStreamManager
实例的- unsubscribeVideo:stream:
方法取消订阅视频流。
视频流首帧通知
当自己发送或收到其他用户视频流首帧时,会触发PanoRtcVideoStreamDelegate
的 - onFirstVideoFrameRendered:stream:
通知,其中返回 userId
和 streamId
。