ios сохранить видео GPUImage

Я добавляю наложение поверх своего видео с помощью GPUImage. На предварительном просмотре все выглядит отлично, но как я могу записать свое видео в файл? Я использую GPUMovieWriter, но не могу найти этот файл и даже не знаю, работает ли он. Вот мой код:

-(void)setUpCameraWithPosition:(bool)switchToFrontCamera
{
    if(videoCamera != nil)
    {
        [videoCamera stopCameraCapture];
    }

    if(switchToFrontCamera) {
        videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionFront];
    }
    else {
        videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
    }

    videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
    videoCamera.horizontallyMirrorFrontFacingCamera = NO;
    videoCamera.horizontallyMirrorRearFacingCamera = NO;

    filter = [GPUImageiOSBlurFilter new];
    filter.blurRadiusInPixels = 3.0;

    GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
    blendFilter.mix = 1.0;

    NSDate *startTime = [NSDate date];

    UILabel *timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 240.0f, 320.0f)];
    timeLabel.font = [UIFont systemFontOfSize:17.0f];
    timeLabel.text = @"Time: 0.0 s";
    timeLabel.textAlignment = UITextAlignmentCenter;
    timeLabel.backgroundColor = [UIColor clearColor];
    timeLabel.textColor = [UIColor whiteColor];

    [videoCamera addTarget:filter];
    GPUImageView *filterView = (GPUImageView *)self.preview;
    filterView.fillMode = kGPUImageFillModePreserveAspectRatioAndFill;

    NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"file.mov"];
    unlink([pathToMovie UTF8String]); // If a file already exists, AVAssetWriter won't let you record new frames, so delete the old movie
    NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];
    movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0)];
    movieWriter.encodingLiveVideo = YES;

    [filter addTarget:movieWriter];

    uiElementInput = [[GPUImageUIElement alloc] initWithView:timeLabel];
    [filter addTarget:blendFilter];
    [uiElementInput addTarget:blendFilter];

    [blendFilter addTarget:filterView];

    __unsafe_unretained GPUImageUIElement *weakUIElementInput = uiElementInput;

    [filter setFrameProcessingCompletionBlock:^(GPUImageOutput * filter, CMTime frameTime){
        timeLabel.text = [NSString stringWithFormat:@"Time: %f s", -[startTime timeIntervalSinceNow]];
        [weakUIElementInput update];
    }];

    [videoCamera startCameraCapture];
}

Как я могу записать свой фильм в AssetsLibrary?


person AYMADA    schedule 15.05.2014    source источник


Ответы (1)


Я предполагаю, что под наложением вы имеете в виду, что хотите записать видео с UIElement в качестве наложения?

В этом случае вы хотели бы записывать через свой «blendFilter», а не «filter».

Удалить эту строку

[filter addTarget:movieWriter];

и добавьте это после инициализации blendFilter

[blendFilter addTarget:movieWriter];
[blendFilter addTarget:filterView];

Ваша инициализация movieWriter выглядит нормально, единственная разница в том, что я использую «.m4v» в качестве формата видео. Это стандартный формат Apple.

Видео должно сохраниться в домашнюю папку приложения. Используйте «Организатор» («CMD + SHIFT + 2») в XCode, чтобы посмотреть папку приложений, видео должно быть в разделе «Документы».

person System123    schedule 16.05.2014