Iphone 使用AVPlayer播放视频

Iphone 使用AVPlayer播放视频,iphone,ios,avplayer,Iphone,Ios,Avplayer,我正在使用avassetrader从视频文件中一个接一个地获取帧缓冲区,并对帧执行一些操作,然后使用avassetwriter将新帧保存到临时文件。现在我有了临时文件路径,其中所有新帧都在一个接一个地保存。 有没有办法在不断添加到临时文件的时间段播放视频 下面是从临时路径播放视频的代码(其中帧不断添加) 块内的代码永远不会运行。将视频分割为多个子视频对我来说很有效 我做了什么,而不是保存在一个临时路径完整的视频。我将该视频划分为多个子视频,然后相应地替换了AVPlayer的AVPlayerIte

我正在使用
avassetrader
从视频文件中一个接一个地获取帧缓冲区,并对帧执行一些操作,然后使用
avassetwriter
将新帧保存到临时文件。现在我有了临时文件路径,其中所有新帧都在一个接一个地保存。 有没有办法在不断添加到临时文件的时间段播放视频

下面是从临时路径播放视频的代码(其中帧不断添加)


块内的代码永远不会运行。

将视频分割为多个子视频对我来说很有效

我做了什么,而不是保存在一个临时路径完整的视频。我将该视频划分为多个子视频,然后相应地替换了
AVPlayer
AVPlayerItem
属性


因此,现在的功能与视频流相同。:)

您还可以将Avassetrader返回的CMSampleBuffer转换为CGImage,然后转换为UIImage,并在UIImageView中显示,以在帧从原始视频文件中拉出时渲染帧


中有示例代码显示了如何进行此转换。

正在寻找您的建议??仍在寻找解决方案它看起来像
loadValuesAsynchronouslyForKeys:completionHandler:
AVMetaDataItem
上的一个方法,而不是
AVURLAsset
AVAsset
。您能否确认
NSURL
对象不是
nil
?更正:
loadValuesAsynchronouslyForKeys:completionHandler:
avascheronouskeyvalueloading
协议所要求的一种方法,它符合
AVAsset
的要求。@sho它不是nil。代码有问题吗??
- (void)loadAssetFromFile {

    AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL fileURLWithPath:[(mMediaReader.mCameraRecorder) tempVideoFilePath ]] options:nil];
    NSString *tracksKey = @"tracks";

    [asset loadValuesAsynchronouslyForKeys:[NSArray arrayWithObject:tracksKey] completionHandler:
     ^{

         // Completion handler block.
         dispatch_async(dispatch_get_main_queue(),
                        ^{
                            NSError *error = nil;
                            AVKeyValueStatus status = [asset statusOfValueForKey:tracksKey error:&error];

                            if (status == AVKeyValueStatusLoaded) {
                                self.mPlayerItem = [AVPlayerItem playerItemWithAsset:asset];
                                [mPlayerItem addObserver:self forKeyPath:@"status"
                                                options:0 context:&ItemStatusContext];
                                [[NSNotificationCenter defaultCenter] addObserver:self
                                                                         selector:@selector(playerItemDidReachEnd:)
                                                                             name:AVPlayerItemDidPlayToEndTimeNotification
                                                                           object:mPlayerItem];
                               self.mPlayer = [AVPlayer playerWithPlayerItem:mPlayerItem];
                                [mPlayerView setPlayer:mPlayer];
                                [self play:nil];
                            }
                            else {
                                // You should deal with the error appropriately.
                                NSLog(@"The asset's tracks were not loaded:\n%@", [error localizedDescription]);
                            }
                        });
     }];
}

- (IBAction)play:sender {
    [mPlayer play];
}