IAgoraRtcVideoFrameObserver
视频观测器。
你可以调用 RegisterVideoFrameObserver 注册或取消注册 IAgoraRtcVideoFrameObserver 视频观测器。
GetObservedFramePosition
设置视频观测位置。
public virtual VIDEO_OBSERVER_POSITION GetObservedFramePosition() { return VIDEO_OBSERVER_POSITION.POSITION_POST_CAPTURER | VIDEO_OBSERVER_POSITION.POSITION_PRE_RENDERER; }
成功注册视频数据观测器后,SDK 会在每个特定的视频帧处理节点通过该回调来判断是否触发 OnCaptureVideoFrame、 OnRenderVideoFrame 和 OnPreEncodeVideoFrame 回调,供你观测本地采集视频数据、远端发送的视频数据以及编码前的视频数据。你可以根据场景需求,通过修改该方法的返回值,设置你需要观测的某个或多个位置:
- (1 << 0),本地采集视频数据后的位置,对应 OnCaptureVideoFrame 回调。
- (1 << 1),接收远端发送视频前的位置,对应 OnRenderVideoFrame 回调。
- (1 << 2),本地视频编码前的位置,对应 OnPreEncodeVideoFrame 回调。
- 观测多个位置时,需要使用 '|' (或)运算符。
- 该回调默认观测 (1 << 0) 和 (1 << 1)。
- 为降低设备耗能,你可以根据实际需求适当减少观测位置。
返回值
GetVideoFormatPreference
请求视频数据格式。
public virtual VIDEO_FRAME_TYPE GetVideoFormatPreference() { return VIDEO_FRAME_TYPE.FRAME_TYPE_RGBA; }
如果你想获取 420 格式以外的视频数据,需要在调用 RegisterVideoFrameObserver 方法时注册该回调。 成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调,你需要在该回调返回值中设置期望的视频数据格式。
返回值
设置 SDK 输出的原始数据格式 VIDEO_FRAME_TYPE。
IsMultipleChannelFrameWanted
多频道场景下,设置是否获取多个频道的视频数据。
public virtual bool IsMultipleChannelFrameWanted() { return true; }
- 自从
- v3.0.1
成功注册视频观测器后,SDK 会在捕捉到每个视频帧的时候触发该回调。
在多频道场景下,如果你希望从多个频道获取视频数据,则需要将该回调的返回值设为 true。 成功设置后,SDK 会触发 OnRenderVideoFrameEx 回调,向你发送接收的远端视频帧,并报告该视频帧来自哪个频道。
- 如果你将该回调的返回值设为 true,则 SDK 触发 OnRenderVideoFrameEx 来返回接收到的混音前的视频数据。OnRenderVideoFrame 将不会被触发。在多频道场景下,我们建议你将该回调的返回值设为 true。
- 如果你将该回调的返回值设为 false,则 SDK 触发 OnRenderVideoFrame 来返回接收到的视频数据。
返回值
true
: 获取多个频道的视频帧。false
: 不获取多个频道的视频帧。
OnCaptureVideoFrame
获取本地摄像头采集到的视频数据。
public virtual bool OnCaptureVideoFrame(VideoFrame videoFrame) { return true; }
成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调。你可以在回调中获取本地摄像头采集到的视频数据,然后根据场景需要,对视频数据进行前处理。
完成前处理后,你可以在该回调中,传入处理后的视频数据将其发送回 SDK。
- 如果你获取到的视频数据类型为 RGBA,声网不支持将处理后的 RGBA 数据通过该回调再发送回 SDK。
- 此处获取的视频数据未经过前处理,如水印、裁剪、旋转和美颜等。
参数
- videoFrame
- 视频帧数据。详见 VideoFrame。
返回值
true
:不忽略。false
:忽略,则该帧数据不再发送回 SDK。
OnPreEncodeVideoFrame
获取本地视频编码前的视频数据。
public virtual bool OnPreEncodeVideoFrame(VideoFrame videoFrame) { return true; }
成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调。你可以在回调中获取编码前的视频数据,然后根据场景需要,对视频数据进行处理。
完成处理后,你可以在该回调中,传入处理后的视频数据将其发送回 SDK。
- 你需要通过 GetObservedFramePosition 设置观测 (1 << 2) 后,才能使用该回调获取本地视频编码前的视频数据。
- 此处获取的视频数据已经过前处理,如裁剪、旋转和美颜等。
- 如果你获取到的视频数据类型为 RGBA,声网不支持将处理后的 RGBA 数据通过该回调再发送回 SDK。
参数
- videoFrame
- 视频帧数据。详见 VideoFrame。
返回值
true
:不忽略。false
:忽略,则该帧数据不再发送回 SDK。
OnRenderVideoFrame
获取远端发送的视频数据。
public virtual bool OnRenderVideoFrame(uint uid, VideoFrame videoFrame) { return true; }
- 自从
- v3.0.0
成功注册视频数据观测器后,SDK 会在捕捉到每个视频帧时触发该回调。你可以在回调中获取远端发送的视频数据,然后根据场景需要,对视频数据进行处理。
完成处理后,你可以在该回调中,传入处理后的视频数据将其发送回 SDK。
参数
- uid
- 发送该帧视频的远端用户 ID。
- videoFrame
- 视频帧数据。详见 VideoFrame。
返回值
true
:不忽略。false
:忽略,则该帧数据不再发送回 SDK。
OnRenderVideoFrameEx
获取各频道的视频播放数据。
public virtual bool OnRenderVideoFrameEx(string channelId, uint uid, VideoFrame videoFrame) { return true; }
成功注册视频观测器后,如果你将 IsMultipleChannelFrameWanted 的返回值设为 true,则 SDK 会在捕捉到各频道内的视频数据时,触发该回调,将视频数据发送给你。
获取该回调中的视频数据后,你可以根据场景需要,对视频数据进行美颜、滤镜等后处理,然后将处理后的视频数据再通过该回调的 videoFrame 参数发送回 SDK。
参数
- channelId
- 该视频帧所在的频道名。
- uid
- 发送该帧视频的用户 ID。
- videoFrame
- 视频帧数据。详见 VideoFrame。
返回值
true
: 发送false
: 不发送