我有一个在iOS和tvOS上运行的小应用程序,我在UIView中显示视频。它确实支持iOS 12和tvOS 12。现在想要显示tvOS的PIP,因此尝试使用AVPictureInPictureController会出现错误"使用未声明的标识符‘AVPictureInPictureController’"。
即使部署目标设置为tvOS13。在Xcode中,功能->背景模式->启用"音频、空中播放和画中画"。这个基本代码给出了错误。
#import <AVKit/AVKit.h>
if ([AVPictureInPictureController isPictureInPictureSupported]) {
// code
}
是否缺少其他设置或我需要做其他事情?
感谢
如苹果文档所述,tvOS不支持
SDK
iOS 9.0+
macOS 10.15+
Mac Catalyst 13.0+
由于实施中的漏洞而产生问题的可能性:
AVPlayerViewController体验:最初确保我们设置了播放音频类别,通常当我们使用AVPlayerViewController播放视频内容时。如果开发的应用程序进入后台,PIP模式将自动调用,但前提是满足以下条件,第一个条件是我们正在使用的播放器应该处于全屏模式,第二个是我们应该确保视频应该在其中播放,第三个是设备应该支持PIP,最后一个是当用户从画中画模式返回时,写入代理方法来恢复我们的播放器UI。
使用_AVPictureInPictureController实现:您可以在下面的线程中找到一个工作示例。如何显示AVPictureInPictureController?
深入了解问题:为了确认未声明的错误不是由于实现中的差距,而是由于Xcode中的环境,请下载源代码,然后将Sources文件夹添加到工作区的另一个文件夹中。使用"将文件添加到…"选项添加文件夹,现在在xcode内进行验证。
由于XCODE中的刷新而出现问题的可能性 试试Fix By Approach 1将类显式包含在头和/或正文中,而不是*.pch文件中。然后这个错误可能会消失。删除派生的数据偶尔也会起作用。你最近有没有偶然改变偏好中的位置。有些人在对派生数据使用ramdisk时会出现此错误,然后返回默认值。这是最令人讨厌的情况,因为它会导致这个错误出现在几乎每个文件中。
Try Fix By Approach 2有时,一个简单的解决方案可能有助于从pch文件中删除一个#import行并重新编译,这将按预期失败。然后将删除的行放回,重新编译,它正常编译,所有错误都消失了。
向XCODE错误缓存发出DUR的可能性,请遵循以下步骤清除生成:命令-Options-Shift-K清除生成文件夹。重置模拟器:选择iOS模拟器>重置内容和设置重新启动Xcode删除~/Library/Developer/Xcode/DerivedData中的DerivedData文件夹重新启动计算机
以非常有针对性的方式删除/var/文件夹。rm-rf"$(getconf DARWIN_USER_CACHE_DIR(/org.llvm.clang/ModuleCache">
来源:如何清空缓存并清除所有目标Xcode 4及更高版本Xcode";使用未声明的标识符";错误,编译/运行正常在Xcode 9.0中使用未声明的标识符https://developer.apple.com/documentation/avkit/adopting_picture_in_picture_in_a_standard_player
创建一个简单的视频播放器
首先,您需要在项目的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