2011-05-31 128 views
6

HI我正在使用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]]; 
+0

当然,请给些建议,我的问题,请.... – Ganesh 2011-05-31 07:05:55

回答

4

我不知道逐帧缓慢,但你正在做一些你不需要做的事情。在iPhone的文档中,苹果公司的人完全与内存管理混为一谈,使得它的方式比它所需要的更复杂,所以我会告诉你关键的东西,使它发挥:

首先,保留播放器,而不是图层。如果您不知道为什么,请阅读本书或“视图手册”。 (其中填写了同音字型拼写错误,但比购买厚厚的书更容易)。

第二,您没有投射图层并使用setPlayer :,确切的说法是在Apple的文档中。你必须使用类型转换来转换self.layer。

+1

忘了注意,AVPlayer类引用有一些有趣的错别字太多,像上市ASPECTRATIO常数然后说默认是“玩家”,与文档无关。我没有向他们报告,因为他们对这些东西很混乱,但你仍然可以弄明白 – fightingshadow 2011-06-03 14:59:23

+0

谢谢,我用示例代码完成了我的过程。 – Ganesh 2011-06-04 06:21:28

11

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

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

这需要被投票多次许多次。 使用URLWithString将导致无提示错误 - 错误== nil,player.status == AVPlayerStatusUnknown。 切换到fileURLWithPath立即解决了非播放问题。 – mahboudz 2014-10-14 00:19:14

+1

@mahboudz同意了!这也解决了我的问题。谢谢! – unicornherder 2014-12-23 17:42:49

+0

我正在使用''[NSURL urlWithString:]',谢谢! – Mike 2017-06-27 13:35:36