gpt4 book ai didi

ios - 如何在 iOS 中使用 WebRTC 捕获发布流的屏幕截图?

转载 作者:行者123 更新时间:2023-11-28 23:20:17 25 4
gpt4 key购买 nike

在 IOS 的 WebRTC 中,我使用 RTCCameraPreviewView 播放发布流,使用 RTCMTLVideoView 播放远程流。

我可以使用下面的代码为 Remote steam 拍摄快照:

UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 2.0f);
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

但是当我使用相同的代码为本地流捕获快照时,我得到的是一张空白图像。

请指教,如何为本地流拍摄快照。

最佳答案

在 webRTC 中,当使用 RTCCameraPreviewView 显示发布流时,您无法拍摄快照因为 ** RTCCameraPreviewView** 通过 AVCaptureVideoPreviewLayer 处理并将其实现为 OpenGL层,因此您不能使用常规 CoreGraphic 的上下文在 RTCCameraPreviewView 上拍摄快照。但是我们可以覆盖 RTCCameraPreviewView captchaSession 并在我们的 Controller 中设置 AVCaptureVideoDataOutput 委托(delegate)并获取 Frame 作为 CMSampleBufferRef 。为了让它工作,我们需要从“RTCCameraPreviewView”对象获取“AVCaptureSession”引用。

RTCCameraPreviewView *publisherView = [[RTCCameraPreviewView alloc]initWithFrame:self.frame];
AVCaptureSession *session = publisherView.captureSession;

现在我们可以从 **AVCaptureSession** 获取可用的 **AVCaptureVideoDataOutput** 列表

NSArray *dataOutputList = session.outputs

在获取 dataOutputList 列表后,过滤该数组并找到正确的 AVCaptureVideoDataOutput,您的发布者视频将在其上播放。

例如假设

AVCaptureVideoDataOutput*captureVideoOutput = dataOutputList[0];

这意味着索引“0”有本地发布者视频 AVCaptureVideoDataOutput 现引用老委托(delegate)设置如下

id capTchadelegate = captureVideoOutput.sampleBufferDelegate;

然后如下覆盖AVCaptureVideoDataOutputSampleBufferDelegate

[captureVideoOutput setSampleBufferDelegate:self  queue:dispatch_get_main_queue()];

覆盖委托(delegate)后实现AVCaptureVideoDataOutputSampleBufferDelegate 在你下面的 ab 类中

- (void)captureOutput:(AVCaptureOutput *)output didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection;

在这里我们将获取CMSampleBufferRef并将其转换为UIImage

在获取所需的CMSampleBufferRef 图像后,为AVCaptureVideoDataOutputSampleBufferDelegate 设置委托(delegate),这样您的发布流就不会卡在同一个调用中的其他接收者

[captureVideoOutput setSampleBufferDelegate:capTchadelegate queue:dispatch_get_main_queue()];

关于ios - 如何在 iOS 中使用 WebRTC 捕获发布流的屏幕截图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59733062/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com