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 不播放视频文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 avplayer 从文档目录播放视频文件

ios Objective C应用程序上的AVPlayer不播放视频

AVPlayer 没有播放本地保存的视频文件

在 IOS 9 上使用 AVPlayer 和 Swift 反向播放视频

AVPlayer 不播放我解析的视频

如何在应用程序包之外的 AVPlayer 中播放视频文件