iOS 10 - AVPlayer 在播放视频时显示黑屏

标签 ios objective-c video avfoundation avplayeritem

这里我有一个方法可以将视频层添加到我在 IB 中设置的 UIView:

 -(void)loadPlayer{
        self.asset = [AVAsset assetWithURL:url];

        AVPlayerItem *item = [AVPlayerItem playerItemWithAsset:self.asset];

        self.player = [AVPlayer playerWithPlayerItem:item];
        self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
        self.playerLayer.contentsGravity = AVLayerVideoGravityResizeAspect;
        self.player.actionAtItemEnd = AVPlayerActionAtItemEndNone;

        item.videoComposition = [AVVideoComposition videoCompositionWithPropertiesOfAsset:self.asset];

        [self.player pause];
        [self.player addObserver:self forKeyPath:@"status" options:0 context:nil];

        dispatch_async(dispatch_get_main_queue(), ^{
            [self.videoLayer.layer addSublayer:self.playerLayer];
        });
}

上述方法在 View Controller 的 viewDidAppear 中被调用,因此每次当前 View Controller 加载时,视频应该开始播放。

在这里我检查播放器状态并在准备就绪时播放 Assets :

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
                        change:(NSDictionary *)change context:(void *)context {
    if (object == self.player && [keyPath isEqualToString:@"status"]) {
        if (self.player.status == AVPlayerStatusReadyToPlay) {
            [self.player play];
        }
    }
}

问题是 View 确实出现了,视频开始播放,但只有音频,没有视频。我得到的只是黑屏代替了视频。音频播放正常,但由于某种未知原因似乎无法渲染视频帧。

这只发生在 iOS 10 设备上,同样的代码在 iOS 9 设备上运行时,效果非常好。视频按预期显示。

在 AVPlayer 方面,iOS 10 的 AVFoundation 框架有什么变化吗?或者我在这里遗漏了什么,因为 iOS 9 运行良好。

如果有人遇到过这个问题,并且您已经解决了,请发布您的解决方案。这会很有帮助。

谢谢。


解决方案

感谢您的回复!我刚刚发现,出于某种原因,在 iOS 10 中,viewDidLayoutSubviews 没有像在 iOS 9 中那样被调用。实际上我是在 viewDidLayoutSubviews 方法中设置播放器层的框架.因为它没有被调用,所以我无法在屏幕上看到播放器。我所做的是,在上面的 loadPlayer 方法中设置播放器层的框架。它工作正常。希望这对某人有帮助。

这是我从 viewDidLayoutSubviews 移动到我的 loadPlayer 方法的代码行,它起作用了:

self.playerLayer.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);

最佳答案

您需要保留您的 AVPlayerItem 实例,即作为属性或实例变量。如果您不保留对电影播放器​​的引用,它就会丢失。 甚至有时这种垃圾也会发生在 ARC 中。请将其设为属性(property)。

关于iOS 10 - AVPlayer 在播放视频时显示黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40283596/

相关文章:

iphone - 由于获取的结果 Controller 更新,释放的 View Controller 导致 EXC_BAD_ACCESS

C# 视频转换器库

android - 如何拦截来自 Android/iOS 应用程序的更新/通知

ios - 强制 iOS CloudKit 同步更新,将所有记录下载到本地设备

ios - UINavigationBar 的样式在 UIViewController 中不起作用

iphone - 如何设置蓝牙通信在后台运行

iOS - 无法在模拟器上写入文件

ios - 使用 “IF” 语句弹出到两个可能的 View Controller

android - 为用户提供播放带或不带音频的视频的选项

ios - 如何在不刻录的情况下将字幕嵌入视频文件(html5)