WebRTC iOS:从RTCCameraVideoCapturer过滤摄像机流。从RTCFrame转换为CVPixelBuffer

时间:2019-02-09 05:53:01

标签: ios webrtc video-capture cvpixelbuffer

通过使用$('#process').modal(); $(document).ready(function () { $.ajax({ url: "reopen_account.php", type: "POST", data: {'reopen': 'reopen', 'status_val': status_val, 'ac_no': ac_no}, success: function (output) { if (output != 1) alert('Error occured'); setTimeout(function () { $('#process').modal('hide'); }, 1000); }, }); }); 中的func capturer(_ capturer: RTCVideoCapturer, didCapture frame: RTCVideoFrame),我发现下面的git简单有效。您得到RTCVideoCapturerDelegate,然后转换为RTCVideoFrame进行修改。

https://gist.github.com/lyokato/d041f16b94c84753b5e877211874c6fc

但是,我发现Chronium表示获取PixelBuffer的nativeHandle不再可用(下面的链接)。我尝试了frame.buffer.pixelbuffer ...,但是,在查看框架>标头> RTCVideoFrameBuffer.h时,我发现CVPixelBuffer也从这里消失了!

https://codereview.webrtc.org/2990253002

是否有将CVPixelBuffer转换为RTCVideoFrame的好方法? 还是我们有更好的方法来修改从RTCCameraVideoCapturer捕获的视频?

下面的链接建议直接修改sdk,但希望我们可以在Xcode上实现。

How to modify (add filters to) the camera stream that WebRTC is sending to other peers/server

1 个答案:

答案 0 :(得分:1)

您能指定您的期望吗?因为您可以轻松地从RTCVideoframe获得像素缓冲区,但是我认为如果要过滤视频缓冲区而不是发送给Webrtc,则可以找到更好的解决方案,因此应该使用 RTCVideoSource

您可以通过以下方式获得缓冲    as seen

    RTCCVPixelBuffer *buffer = (RTCCVPixelBuffer *)frame.buffer;
    CVPixelBufferRef imageBuffer = buffer.pixelBuffer;

(仅具有最新的SDK和本地摄像机缓冲区)

但是在示例中,我可以看到该过滤器不适用于远程。 enter image description here

我已经附上了屏幕截图,这也是您可以检查预览的方式。