ios webrtc 虚拟背景和滤镜

问题描述 投票:0回答:1

我想更改 rtccameravideocapture 的视频源以删除背景或添加过滤器。我所做的方法是将 initwithdelegate 更改为我创建的名为 myvideosourcefilter 的类,因此我无法使用 didcapturevideoframe 方法,但问题是 didcapturevideoframe 方法永远不会进入,我做错了什么,结果我可以initwithmyvideosource 类,但我无法使用 didcapturevideoframe 方法,我想知道我做错了什么。

MyVideoSourceFilter *filter = [[MyVideoSourceFilter alloc] initWithSource:videoSource];
     self.videoCapturer = [[RTCCameraVideoCapturer alloc] initWithDelegate:filter];
     self.videoCapturer.delegate = filter;

我想重写 didcapturevideoframe 方法,但是 didcaptureframe 方法永远不会进入,我做错了什么或者我应该添加什么

MyVideoSourceFilter *filter = [[MyVideoSourceFilter alloc] initWithSource:videoSource];      self.videoCapturer = [[RTCCameraVideoCapturer alloc] initWithDelegate:filter];      self.videoCapturer.delegate = filter;


- (instancetype)initWithSource:(RTCVideoSource *)source {
    NSLog(@"init with source ");
    self = [super init];
    self.videoSource = source;
    //if (self = [super init]) {


    //}
    return self;
}

- (void)capturer:(RTCVideoCapturer *)capturer didCaptureVideoFrame:(RTCVideoFrame *)frame {
     NSLog(@"did capture video frame ");

   if (self.videoSource != nil) {
        [self.videoSource capturer:capturer didCaptureVideoFrame:frame];
    }else{
         NSLog(@"self.source = nil ");
    }
}

我所做的方法是将 initwithdelegate 更改为我创建的名为 myvideosourcefilter 的类,因此我无法使用 didcapturevideoframe 方法,但问题是 didcapturevideoframe 方法永远不会进入,我做错了什么,结果是我可以 initwithmyvideosource 类,但我不能使用 didcapturevideoframe 方法,我想知道我做错了什么。

ios swift objective-c flutter webrtc
1个回答
0
投票

因为您的

filter
变量在函数完成运行后不会保持引用,就像
videoCapturer
变量一样,它在 self.让我们这样做吧,我认为它会起作用。现在在头文件中定义
filter
变量,如
videoCapturer
并编辑代码如下:

self.filter = [[MyVideoSourceFilter alloc] initWithSource:videoSource];
self.videoCapturer = [[RTCCameraVideoCapturer alloc] initWithDelegate:filter];
self.videoCapturer.delegate = self.filter;
© www.soinside.com 2019 - 2024. All rights reserved.