ios - 在 AVCaptureMovieFileOutput 之后使用 AVPlayer 播放视频

标签 ios avfoundation avplayer avcapturemoviefileoutput

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

我已经捕获了一个成功的视频文件,经过测试并与 MPMoviePlayer 一起使用,但无法在 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。 Assets 加载后我不能 [self.player play] 吗?我需要等待项目状态变为 AVPlayerItemStatusReadyToPlay


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

最佳答案

我正在使用 AVPlayerLayer 播放视频。我使用了以下代码并且运行良好。

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];

希望对您有所帮助。

关于ios - 在 AVCaptureMovieFileOutput 之后使用 AVPlayer 播放视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33070851/

相关文章:

ios - 将 NSUInteger 赋值给 BOOL 概念理解

ios - 在 iOS 模拟器中测试 iPhone 相机?

iphone - AV播放器状态?

ios - Swift:设备锁定时继续播放声音

ios - 播放长音乐时,AVPlayer 中的搜索时间更快

ios - 如何从 UINavigationBar 中删除背景图像

ios - 表达式太复杂而无法在 Xcode 9 中解决问题?

ios - AVCaptureDevice videoZoomFactor 始终超出范围

ios - XCode 7 Swift - 调用可以抛出,它没有标记为 'try' 并且错误没有被处理

swift - 如何在用户停止使用 Swift 2 说话时停止录制语音