在AVCaptureMovieFileOutput之后使用AVPlayer播放视频 [英] Play video with AVPlayer after AVCaptureMovieFileOutput

查看:353
本文介绍了在AVCaptureMovieFileOutput之后使用AVPlayer播放视频的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用AVFoundation创建了一个类似于Snapchat的自定义相机。图片方面有效:拍照并显示图片。现在我正在尝试拍摄视频并显示视频。

I've created a custom camera similar to snapchat with AVFoundation. The picture aspect works: take a picture and I display the picture. Now I'm trying to take a video and display the video.

我已经捕获了一个成功的视频文件,经过测试并与MPMoviePlayer配合使用,但无法在AVPlayer上播放。

I have captured a successful video file, tested and works with MPMoviePlayer, but am unable to play it back on AVPlayer.

- (void)takeVideoAction:(id)sender {
    NSString *outputPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"output.mp4"];

    NSFileManager *manager = [[NSFileManager alloc] init];
    if ([manager fileExistsAtPath:outputPath]){
        [manager removeItemAtPath:outputPath error:nil];
    }
   [movieFileOutput startRecordingToOutputFileURL:[NSURL fileURLWithPath:outputPath] recordingDelegate:self];
}







- (void)captureOutput:(AVCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL fromConnections:(NSArray *)connections error:(NSError *)error{


            AVURLAsset *asset = [AVURLAsset URLAssetWithURL:outputFileURL options:nil];
            [asset loadValuesAsynchronouslyForKeys:@[@"tracks"] completionHandler:^{
            dispatch_async(dispatch_get_main_queue(), ^{
                 NSError *error = nil;
                 if([asset statusOfValueForKey:@"tracks" error:&error] == AVKeyValueStatusFailed){
                    NSLog(@"error: %@", [error description]);
                }
                else{
                    self.playerItem = [AVPlayerItem playerItemWithAsset:asset];
                    self.player = [AVPlayer playerWithPlayerItem:self.playerItem];
                    self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
                    self.playerLayer.frame = self.view.bounds;
                    [self.view.layer addSublayer:self.playerLayer];

                    [self.player play];
                }
            });
        }];
    }

这是我第一次使用AVFoundation& AVPlayer。在资产加载后,我不能 [self.player play] 吗?我需要等待商品状态为 AVPlayerItemStatusReadyToPlay

This is my first time using AVFoundation & AVPlayer. Is it that I can not [self.player play] after the asset loads right? I need to wait for item status to be AVPlayerItemStatusReadyToPlay?

错误:错误域= NSURLErrorDomain代码= -1100在此服务器上找不到请求的URL。

推荐答案

我正在使用AVPlayerLayer播放视频。我使用下面的代码,它工作正常。

I am using AVPlayerLayer for playing video. I used the below code and it worked fine.

AVPlayer *avPlayerq = [AVPlayer playerWithURL:NSURL];
avPlayerq.actionAtItemEnd = AVPlayerActionAtItemEndNone;
AVPlayerLayer *videoLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayerq];
videoLayer.frame= self.view.bounds;
videoLayer.videoGravity=AVLayerVideoGravityResizeAspectFill;
[self.view.layer addSublayer:videoLayer];
[avPlayerq play];

希望这可以帮到你。

这篇关于在AVCaptureMovieFileOutput之后使用AVPlayer播放视频的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆