本文介绍如何对采集到的原始视频数据进行前处理和后处理。
在实时音视频互动过程中,你可以对音视频数据进行前处理和后处理,并对它们进行修改,获取想要的播放效果。
声网 SDK 运用 AgoraVideoFrameDelegate
类来提供原始视频数据功能。你可以在将数据发送给编码器前进行前处理,对捕捉到的视频帧进行修改;也可以在将数据发送给解码器后进行后处理,对接收到的视频帧进行修改。
使用原始视频数据功能会增加资源消耗,可能会影响设备性能。
在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。详见快速开始:
参考如下步骤,在你的项目中实现原始视频数据功能:
setVideoFrameDelegate
注册视频观测器对象。onCaptureVideoFrame
,onScreenCaptureVideoFrame
和 onRenderVideoFrame
回调。以上回调会对视频帧进行采集和处理。// swift
class RawVideoDataMain: BaseViewController {
var localVideo = Bundle.loadVideoView(type: .local, audioOnly: false)
var remoteVideo = Bundle.loadVideoView(type: .remote, audioOnly: false)
@IBOutlet weak var container: AGEVideoContainer!
// 定义 agoraKit 变量
var agoraKit: AgoraRtcEngineKit!
...
// 初始化 agoraKit,并注册相应回调
agoraKit = AgoraRtcEngineKit.sharedEngine(with: config, delegate: self)
// 调用 setVideoFrameDelegate 注册视频观测器对象。
agoraKit.setVideoFrameDelegate (self)
...
// 在当前类下,实现 AgoraVideoFrameDelegate 协议的 extension
extension RawVideoDataMain: AgoraVideoFrameDelegate {
// 实现 onCaptureVideoFrame 回调
func onCaptureVideoFrame(_ videoFrame: AgoraOutputVideoFrame) -> Bool {
return true;
}
// 实现 onScreenCaptureVideoFrame 回调
func onScreenCaptureVideoFrame(_ videoFrame: AgoraOutputVideoFrame) -> Bool {
return true;
}
// 实现 onRenderVideoFrame 回调
func onRenderVideoFrame(_ videoFrame: AgoraOutputVideoFrame, uid: UInt, channelId: String) -> Bool {
return true;
}
本节介绍本文中使用方法的更多信息以及相关页面的链接。