【问题标题】:Getting error when trying to use AVPictureInPictureController in iOS 13 or tvOS 13尝试在 iOS 13 或 tvOS 13 中使用 AVPictureInPictureController 时出错
【发布时间】:2020-02-25 10:37:41
【问题描述】:

我有一个在 iOS 和 tvOS 上运行的小应用程序,我在 UIView 中显示视频。它确实支持 iOS 12 和 tvOS 12。 现在想为 tvOS 显示 PIP,因此尝试使用 AVPictureInPictureController 会出现错误“使用未声明的标识符 'AVPictureInPictureController”。

即使部署目标设置为 tvOS 13。在 Xcode 中,功能 -> 背景模式 -> 启用“音频、Airplay 和画中画”。 这个基本代码给出了错误。

#import <AVKit/AVKit.h>
if ([AVPictureInPictureController isPictureInPictureSupported]) {
   // code 
}

是否缺少任何其他设置或我需要做的其他事情?

谢谢

【问题讨论】:

    标签: ios13 picture-in-picture tvos13


    【解决方案1】:

    创建一个简单的视频播放器

    首先,您需要在项目的 ViewController.m 文件中实现一个基本的视频播放器,如下所示:

    #import "ViewController.h"
    
    #import <AVKit/AVKit.h>
    
    @interface ViewController ()
    @property(nonatomic) AVPlayerViewController *playerViewController;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
      [super viewDidLoad];
      self.view.backgroundColor = [UIColor blackColor];
    
      // Create a stream video player.
      AVPlayer *player = [[AVPlayer alloc] init];
      self.playerViewController = [[AVPlayerViewController alloc] init];
      self.playerViewController.player = player;
    
      // Attach video player to view hierarchy.
      [self addChildViewController:self.playerViewController];
      self.playerViewController.view.frame = self.view.bounds;
      [self.view addSubview:self.playerViewController.view];
      [self.playerViewController didMoveToParentViewController:self];
    }
    
    @end
    

    如需进一步帮助,请通过https://help.apple.com/xcode/mac/8.0/#/dev51a648b07

    【讨论】:

      【解决方案2】:

      由于实施差距导致的问题的可能性:

      体验 AVPlayerViewController: 最初确保我们设置了播放音频类别,一般当我们使用 AVPlayerViewController 播放视频内容时。如果开发的应用程序进入后台,将自动调用 PIP 模式,但前提是满足下面提到的条件,第一个是我们正在使用的播放器应该是全屏模式,第二个是我们应该确保视频应该是在其中播放,第三个是 PIP 应该由设备支持,最后编写委托方法以在用户从画中画模式返回时恢复我们的播放器 UI。

      使用 _AVPictureInPictureController 实现: 您可以在下面的线程中找到一个工作示例。 How to display AVPictureInPictureController?

      深入研究问题: 为了确认未声明的错误不是由于实现中的差距,而是由于 Xcode 中的 environmnet,下载源代码,然后将 Sources 文件夹添加到工作区的另一个文件夹中。使用“添加文件到 .. ." 选项,现在在 xcode 中进行验证。

      XCODE 刷新可能导致问题 尝试通过方法 1 修复 在标题和/或正文中显式包含该类 - 而不是 *.pch 文件。那么这个错误可能会消失。有时也可以删除派生数据。您最近是否更改了偏好中的位置。有些人在将 ramdisk 用于派生数据然后返回默认值时会出现此错误。这是最烦人的情况——因为它会导致这个错误出现在几乎每个文件中。

      尝试修复方法 2 有时,一个简单的解决方案可能有助于从 pch 文件中删除其中的 #import 行并重新编译,这将按预期失败。然后将删除的行放回原处,重新编译并正常编译,所有错误错误都消失了。

      XCODE 错误缓存可能出现问题, 请按照以下步骤操作 清理构建:Command-Option-Shift-K 清理构建文件夹。 重置模拟器:选择 iOS 模拟器 > 重置内容和设置 重启 Xcode 删除 ~/Library/Developer/Xcode/DerivedData 中的 DerivedData 文件夹 重启电脑

      以非常有针对性的方式删除 /var/folders。 rm -rf "$(getconf DARWIN_USER_CACHE_DIR)/org.llvm.clang/ModuleCache"

      来源: How to Empty Caches and Clean All Targets Xcode 4 and later Xcode "Use of undeclared identifier" errors, compiles/runs just fine Use of undeclared identifier in Xcode 9.0 https://developer.apple.com/documentation/avkit/adopting_picture_in_picture_in_a_standard_player

      【讨论】:

        【解决方案3】:

        tvOS 不支持,如 Apple 的 documentation 中所述

        SDK

        iOS 9.0+

        macOS 10.15+

        Mac Catalyst 13.0+

        【讨论】:

        • 也尝试过导入 AVFoundation.. 还是一样的错误。
        • -是的..刚刚尝试过..仍然是同样的错误。我认为 tvOS13 不支持“AVPictureInPictureController”(不确定)。
        • 不,不是,请查看我更新的答案。抱歉,我认为它会在 iOS 上给出错误
        • 根据这个链接 - developer.apple.com/documentation/avkit/… - 看起来有可能实现它(再次不确定)
        • 首先确保你设置了播放音频类别,一般在使用 AVPlayerViewController 播放视频内容。如果开发的应用程序进入后台,将自动调用 PIP 模式,但前提是满足 montioned 条件。我们使用的播放器应该处于全屏模式,视频应该在其中播放,并且设备应该支持 PIP,最后编写委托方法以在用户从 PIP 模式返回时恢复我们的播放器 UI。视频应该在其中播放,并且设备应该支持 PIP。来源:shorturl.at/AEXY8
        猜你喜欢
        • 2022-01-26
        • 2014-11-04
        • 2020-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-28
        • 1970-01-01
        相关资源
        最近更新 更多