共性约定
Apple 平台上 TRTC 自定义前处理常用 OpenGL 纹理;声网 / LiveKit 更常见
CVPixelBuffer。两种路径都可,不要混用同一台引擎的两种模式。
共用:处理纹理
共用:处理 CVPixelBuffer(NV12 示意)
声网 / LiveKit 回调里常见 NV12。平面指针与 stride 取自CVPixelBuffer;写回对方帧的方式随厂商版本变化。
externalContext = NO。凭证:订阅服务、授权与许可。
TRTC(腾讯云)
挂钩 API:setLocalVideoProcessDelegete:pixelFormat:bufferType:(官方拼写为 Delegete)。像素格式 TRTCVideoPixelFormat_Texture_2D,缓冲类型 TRTCVideoBufferType_Texture。
实现 TRTCVideoFrameDelegate:在 onGLContextCreated 创建引擎;在 onProcessVideoFrame:dstFrame: 写回 dstFrame.textureId;在 onGLContextDestory 将引擎置 nil。
FacebetterPlugin.processTexture)。
声网 Agora
挂钩 API:AgoraRtcEngineKit.setVideoFrameDelegate:(Video SDK 4.x)。iOS 上采集帧多为 CVPixelBuffer(textureBuf / format 12),而不是 Android 那种 GL_TEXTURE_2D id。
需要:
getVideoFrameProcessMode返回 ReadWrite- 在
onCapture:sourceType:(或旧名onCaptureVideoFrame)里取出CVPixelBuffer - 用
createWithNV12:/createWithBGRA:等喂给 Facebetter,再把结果写回AgoraOutputVideoFrame
setVideoFrameDelegate:nil,并将 beautyEngine 置 nil。
LiveKit
挂钩方式:实现 SwiftVideoProcessor,在 process(frame:) 里处理,再返回新帧(或 nil 丢帧)。创建相机轨时传入 processor:,或之后设置 track.processor。
BackgroundBlurVideoProcessor。自研 capturer 时,也可在送入编码器前先跑 Facebetter。

