Swift 对WebRTC采集的视频流设置美颜效果

本文分享从WebRTC中使用RTCCameraVideoCapturer采集到的相机数据美颜处理的过程。

思路:在RTCCameraVideoCapturer(视频数据捕捉器)--> RTCVideoSource(视频数据使用者)之间,进行美颜设置。

第一步、截取视频数据

    private func createVideoTrack() -> RTCVideoTrack {
        let videoSource = WebRTCClient.factory.videoSource()
        
        #if targetEnvironment(simulator)
        /// your simulator code
        self.videoCapturer = RTCFileVideoCapturer(delegate: videoSource)
        #else
        /// your real device code
//        self.videoCapturer = RTCCameraVideoCapturer(delegate: videoSource)
        // 1、将相机获取的数据代理给自己,用于对数据进行美颜设置
        self.videoCapturer = RTCCameraVideoCapturer(delegate: self)
        #endif
        
        let videoTrack = WebRTCClient.factory.videoTrack(with: videoSource, trackId: "video0")
        return videoTrack
    }

第二步、响应代理,对相机获取的数据进行美颜处理,处理完之后再返回给数据源videoSource

extension WebRTCClient: RTCVideoCapturerDelegate {
    // RTCFileVideoCapturer的代理方法,相机采集的数据都会通过这个方法返回出来,只需要对这个数据进行处理就行
    func capturer(_ capturer: RTCVideoCapturer, didCapture frame: RTCVideoFrame) {
        // 1、美颜处理,美颜采用的是相芯SDK FURenderKit
        guard let buffer: RTCCVPixelBuffer = frame.buffer as? RTCCVPixelBuffer else {
            print("error - 1")
            return
        }
        let input: FURenderInput = FURenderInput()
        input.pixelBuffer = buffer.pixelBuffer
        let output: FURenderOutput = FURenderKit.share().render(with: input)
        let nrwbuffer: RTCCVPixelBuffer = RTCCVPixelBuffer.init(pixelBuffer: output.pixelBuffer)
        let newframe = RTCVideoFrame(buffer: nrwbuffer, rotation: frame.rotation, timeStampNs: frame.timeStampNs)
        // 2、显示画面
//            self.renderView?.renderFrame(newframe)
        // 3、重新把代理响应给videoSource
        self.localVideoTrack?.source.capturer(capturer, didCapture: newframe)
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容