Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何将GPUImage过滤视频与音频一起保存?_Ios_Objective C_Iphone_Ios9_Gpuimage - Fatal编程技术网

Ios 如何将GPUImage过滤视频与音频一起保存?

Ios 如何将GPUImage过滤视频与音频一起保存?,ios,objective-c,iphone,ios9,gpuimage,Ios,Objective C,Iphone,Ios9,Gpuimage,我已经在视频上应用了过滤器。但问题在于将其保存在带有音频输出的摄像机滚动中。但不幸的是,我没能挽救它 请参阅下面的代码 -(IBAction)saveVideo:(id)sender{ NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.mov"]; unlink([pathToMovie UTF8String]); // If a file al

我已经在视频上应用了过滤器。但问题在于将其保存在带有音频输出的摄像机滚动中。但不幸的是,我没能挽救它

请参阅下面的代码

-(IBAction)saveVideo:(id)sender{

    NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.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(720.0, 1280.0)];
    _movieWriter.shouldPassthroughAudio = YES;
    //_movieWriter.assetWriter.movieFragmentInterval = kCMTimeInvalid;
    _movieWriter.hasAudioTrack = YES;
    _movieFile.audioEncodingTarget = self.movieWriter;
    [_filter addTarget:_movieWriter];
    [_movieFile enableSynchronizedEncodingUsingMovieWriter:_movieWriter];

    [_movieWriter startRecording];
    __block GPUImageOutput<GPUImageInput> *weekfilter = _filter;
    __block GPUImageMovieWriter *weekMovieWriter = _movieWriter;
    ViewControllerFilters* __weak weakSelf = self;

    [_movieWriter setCompletionBlock:^{
        [weekfilter removeTarget:weekMovieWriter];
        [weekMovieWriter finishRecording];

        dispatch_async(dispatch_get_main_queue(), ^{
            // [timer invalidate];
            //self.progressLabel.text = @"100%";
//            [[SoundManager sharedManager] stopAnimating];
//            [weakSelf performSegueWithIdentifier:export sender:movieURL];
            [weakSelf saveToCameraRoll:movieURL];
        });
    }];
}
-(iAction)保存视频:(id)发件人{
NSString*pathToMovie=[NSHomeDirectory()stringByAppendingPathComponent:@“Documents/Movie.mov”];
取消链接([pathToMovie UTF8String]);//如果文件已经存在,AVAssetWriter将不允许您录制新帧,因此请删除旧电影
NSURL*movieURL=[NSURL fileURLWithPath:pathToMovie];
_movieWriter=[[GPUImageMovieWriter alloc]initWithMovieURL:movieURL大小:CGSizeMake(720.01280.0)];
_movieWriter.shouldPassthroughAudio=是;
//_movieWriter.assetWriter.movieFragmentInterval=KCMTIMEIVALID;
_movieWriter.hasaAudioTrack=是;
_movieFile.audioEncodingTarget=self.movieWriter;
[_filteraddtarget:_movieWriter];
[_MovieFileEnableSynchronizedEncodingingingMovieWriter:_movieWriter];
[电影编剧startRecording];
__块GPUImageOutput*weekfilter=\u filter;
__块GPUImageMovieWriter*周movieWriter=\u movieWriter;
ViewControllerFilters*\uuu弱弱弱自我=自我;
[\u movieWriter setCompletionBlock:^{
[weekfilter removeTarget:weekMovieWriter];
[weekMovieWriter finishRecording];
dispatch\u async(dispatch\u get\u main\u queue()^{
//[计时器失效];
//self.progressLabel.text=@“100%”;
//[[SoundManager sharedManager]停止设置动画];
//[weakSelf performsguewithidentifier:export sender:movieURL];
[weakSelf saveToCameraRoll:movieURL];
});
}];
}

我得到的日志无法写入帧。并接收内存警告和应用程序崩溃。

确保
电影文件
声明为strong

-(void)saveVideo{
    NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:self.url options:nil];
    AVAssetTrack *videoAssetTrack = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
    //CGAffineTransform videoTransform = CGAffineTransformMakeRotation(self.ValueOrientation);

    self.movieFile1 = [[GPUImageMovie alloc] initWithURL:self.url];
    self.movieFile1.runBenchmark = YES;
    self.filterExport = self.filterobject;
    [self.movieFile1 addTarget:self.filterExport];

    [self.filterExport removeAllTargets];

    NSString* filteredFile= [documentsDirectory stringByAppendingPathComponent:@"MovieFiltered.m4v"];
    unlink([filteredFile UTF8String]);
    NSURL *movieURL = [NSURL fileURLWithPath:filteredFile];

    self.movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(videoAssetTrack.naturalSize.width, videoAssetTrack.naturalSize.height)];
    [self.filterExport addTarget:self.movieWriter];

    self.movieWriter.shouldPassthroughAudio = YES;
    self.movieFile1.audioEncodingTarget = self.movieWriter;
    [self.movieFile1 enableSynchronizedEncodingUsingMovieWriter:self.movieWriter];
     [self.movieWriter startRecording];
    [self.movieFile1 startProcessing];

    __weak typeof(self) weakSelf = self;

    [self.movieWriter setCompletionBlock:^{
        NSLog(@"Recording done");
        [weakSelf.movieWriter finishRecording];
       // [weakSelf writeToAlbum:movieURL];
    }];
}