AVPlayer不播放视频文件

时间:2011-05-31 04:02:27

标签: iphone objective-c ipad ipod avplayer

我正在使用AVPlayer逐帧慢慢播放视频。我用这个编码。我无法播放视频。请注意我的问题。

UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 440)];
newView.backgroundColor = [UIColor yellowColor];

NSString *videoName = [fileNameArray objectAtIndex:indexPath.section];
NSString *url = [Utilities documentsPath:[NSString stringWithFormat:@"OSC/%@/%@.mov",videoName,videoName]];

AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:url]];
//AVPlayer *avPlayer = [[AVPlayer playerWithURL:[NSURL URLWithString:url]] retain];
AVPlayer *avPlayer = [[AVPlayer playerWithPlayerItem:playerItem] retain];
AVPlayerLayer *avPlayerLayer = [[AVPlayerLayer playerLayerWithPlayer:avPlayer] retain];

avPlayerLayer.frame = self.view.frame;
[newView.layer addSublayer:avPlayerLayer];
[self.view addSubview:newView];
[avPlayer play];

avPlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone; 

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(playerItemDidReachEnd:)
                                             name:AVPlayerItemDidPlayToEndTimeNotification
                                           object:[avPlayer currentItem]];

2 个答案:

答案 0 :(得分:11)

因为您使用本地文件,所以最好使用[NSURL fileURLWithPath:url]将NSString转换为NSURL。所以将代码更改为:

AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:url]];

答案 1 :(得分:4)

我不知道逐帧慢,但你正在做一些你不需要做的事情。在iPhone文档中,Apple人员完全搞乱了内存管理,使其变得比它需要的更复杂,所以我会告诉你使它发挥作用的关键因素:

首先,保留播放器,而不是图层。如果您不知道原因,请阅读书籍或“意见手册”。 (其中充满了谐音式的拼写错误,但它比购买厚书更容易。)

第二,你没有施放图层并使用setPlayer:,确切的行在Apple的文档中。你必须使用类型转换来转换self.layer。