AVPlayer 不播放视频文件
Posted
技术标签:
【中文标题】AVPlayer 不播放视频文件【英文标题】:AVPlayer not playing Video file 【发布时间】:2011-05-31 04:02:27 【问题描述】:您好,我正在使用 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]];
【问题讨论】:
好的,请对我的问题提出一些建议...... 【参考方案1】:因为你使用本地文件,所以最好使用[NSURL fileURLWithPath:url]
将NSString 转换为NSURL。所以把代码改成:
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:url]];
【讨论】:
这需要多次投票。使用 URLWithString 将导致静默错误 - error == nil, player.status == AVPlayerStatusUnknown。切换到 fileURLWithPath 立即解决了无法播放的问题。 @mahboudz 同意!这也解决了我的问题。谢谢!【参考方案2】:我不知道逐帧缓慢,但你正在做一些你不需要做的事情。在 iPhone 文档中,Apple 的家伙完全搞砸了内存管理,使它变得比它需要的复杂得多,所以我会告诉你让它发挥作用的关键因素:
首先,保留播放器,而不是图层。如果您不知道原因,请阅读一本书或 Views Manual。 (里面充斥着谐音式的错别字,但比买厚书要容易)。
第二,您没有投射图层并使用 setPlayer:,确切的行在 Apple 的文档中。您必须使用类型转换转换 self.layer。
【讨论】:
忘了注意,AVPlayer 类引用也有一些有趣的错别字,比如列出 AspectRatio 常量然后说默认为“player”,这与文档无关。我不会向他们报告,因为他们对那些东西很讨厌,但你仍然可以弄清楚以上是关于AVPlayer 不播放视频文件的主要内容,如果未能解决你的问题,请参考以下文章
ios Objective C应用程序上的AVPlayer不播放视频