Simultaneous AVCaptureVideoDataOutput and AVCaptureMovieFileOutput

前端 未结 3 2020
独厮守ぢ
独厮守ぢ 2020-11-28 07:13

I need to be able to have AVCaptureVideoDataOutput and AVCaptureMovieFileOutput working at the same time. The below code works, however, the video

3条回答
  •  挽巷
    挽巷 (楼主)
    2020-11-28 07:42

    Although you cannot use AVCaptureVideoDataOutput, you can use AVCaptureVideoPreviewLayer simultaneously with AVCaptureMovieFileOutput. See the "AVCam" example on Apple's Website.

    In Xamarin.iOS, the code looks like this:

    var session = new AVCaptureSession();
    
    var camera = AVCaptureDevice.DefaultDeviceWithMediaType(AVMediaType.Video);
    var  mic = AVCaptureDevice.DefaultDeviceWithMediaType(AVMediaType.Audio);
    if(camera == null || mic == null){
        throw new Exception("Can't find devices");
    }
    
    if(session.CanAddInput(camera)){
        session.AddInput(camera);
    }
    if(session.CanAddInput(mic)){
       session.AddInput(mic);
    }
    
    var layer = new AVCaptureVideoPreviewLayer(session);
    layer.LayerVideoGravity = AVLayerVideoGravity.ResizeAspectFill;
    layer.VideoGravity = AVCaptureVideoPreviewLayer.GravityResizeAspectFill;
    
    cameraView = new UIView();
    cameraView.Layer.AddSublayer(layer);
    
    var filePath = System.IO.Path.Combine( Path.GetTempPath(), "temporary.mov");
    var fileUrl = NSUrl.FromFilename( filePath );
    
    var movieFileOutput = new AVCaptureMovieFileOutput();
    var recordingDelegate = new MyRecordingDelegate();
    session.AddOutput(movieFileOutput);
    
    movieFileOutput.StartRecordingToOutputFile( fileUrl, recordingDelegate);
    

提交回复
热议问题