ได้รับข้อผิดพลาดเมื่อพยายามใช้ AVPictureInPictureController ใน iOS 13 หรือ tvOS 13


10

ฉันมีแอพเล็ก ๆ ที่ทำงานบน iOS และ tvOS ที่ฉันแสดงวิดีโอใน UIView มันรองรับ iOS 12 และ tvOS 12 ตอนนี้ต้องการแสดง PIP สำหรับ tvOS ดังนั้นจึงพยายามใช้ AVPictureInPictureController ให้ข้อผิดพลาด“ การใช้ตัวระบุที่ไม่ได้ประกาศ ”

แม้ว่าเป้าหมายการปรับใช้จะถูกตั้งค่าเป็น tvOS 13 ใน Xcode ความสามารถ -> โหมดพื้นหลัง -> เปิดใช้งาน“ เสียงเล่นภาพและเล่นภาพในภาพ” รหัสพื้นฐานนี้ให้ข้อผิดพลาด

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

การตั้งค่าอื่น ๆ หายไปหรืออย่างอื่นที่ฉันต้องทำ

ขอบคุณ

คำตอบ:


0

ไม่รองรับใน tvOS ตามที่ระบุในเอกสารประกอบของ Apple

SDKs

iOS 9.0+

macOS 10.15+

Mac Catalyst 13.0+


ลองนำเข้า AVFoundation ด้วย .. ยังมีข้อผิดพลาดเหมือนเดิม
sia

- ใช่ .. ตอนนี้ลองดูแล้ว .. ยังมีข้อผิดพลาดเหมือนเดิม ฉันคิดว่า "AVPictureInPictureController" ไม่รองรับ tvOS13 (ไม่แน่ใจ)
SIA

ไม่ไม่ตรวจสอบคำตอบที่อัปเดตของฉัน ขออภัยฉันคิดว่ามันให้ข้อผิดพลาดบน iOS
Dimitrie-Toma Furdui

ตามลิงค์นี้ - developer.apple.com/documentation/avkit/
sia

เริ่มแรกตรวจสอบให้แน่ใจว่าคุณได้ตั้งหมวดหมู่การเล่นเสียงโดยทั่วไปแล้วจะใช้ AVPlayerViewController เพื่อเล่นเนื้อหาวิดีโอ โหมด PIP จะถูกเรียกใช้โดยอัตโนมัติหากแอปพลิเคชันที่พัฒนาเข้าสู่พื้นหลัง แต่ถ้าตรงตามเงื่อนไขที่กำหนด ผู้เล่นที่เรากำลังใช้ควรอยู่ในโหมดเต็มหน้าจอ, วิดีโอควรเล่นในนั้นและ PIP ควรได้รับการสนับสนุนจากอุปกรณ์และในที่สุดก็เขียนวิธีมอบหมายเพื่อคืนค่า UI เครื่องเล่นของเราเมื่อผู้ใช้กลับมาจากโหมด PIP วิดีโอควรเล่นในนั้นและอุปกรณ์ PIP ควรได้รับการสนับสนุน แหล่งที่มา: shorturl.at/AEXY8
redhatvicky

0

ความเป็นไปได้ของปัญหาเนื่องจากการดำเนินการใน GAPS:

ทดลองใช้ AVPlayerViewController: เริ่มแรกตรวจสอบให้แน่ใจว่าเราได้ตั้งหมวดหมู่การเล่นเสียงโดยทั่วไปเมื่อเราใช้ AVPlayerViewController เพื่อเล่นเนื้อหาวิดีโอ โหมด PIP จะถูกเรียกใช้โดยอัตโนมัติหากแอปพลิเคชันที่พัฒนาเข้าสู่พื้นหลัง แต่ถ้าเป็นไปตามเงื่อนไขที่ระบุไว้ด้านล่างอันดับแรกคือผู้เล่นที่เราใช้ควรอยู่ในโหมดเต็มหน้าจออันดับที่สองคือเราควรตรวจสอบให้แน่ใจว่า การเล่นในอุปกรณ์และรายการที่สามคือ PIP ควรได้รับการสนับสนุนโดยอุปกรณ์และสุดท้ายของวิธีการเขียนทั้งหมดเพื่อกู้คืน UI เครื่องเล่นของเราเมื่อผู้ใช้กลับมาจากโหมดรูปภาพในรูปภาพ

การฝังด้วย _AVPictureInPictureController: คุณสามารถหาตัวอย่างการทำงานในกระทู้ด้านล่าง วิธีการแสดงภาพ AVPictureController?

การเจาะลึกปัญหา: เพื่อยืนยันว่าข้อผิดพลาดที่ไม่ได้ประกาศนั้นไม่ได้เกิดจากช่องว่างในการนำไปใช้และเป็นเพราะ environmnet ใน Xcode ให้ดาวน์โหลดซอร์สแล้วเพิ่มโฟลเดอร์ Sources ภายในโฟลเดอร์อื่นในพื้นที่ทำงานของคุณเพิ่มโฟลเดอร์โดยใช้ " เพิ่มตัวเลือกไฟล์ไปที่ ... "และตอนนี้ตรวจสอบภายใน xcode

ความเป็นไปได้ของปัญหาเนื่องจากการอ้างอิงใน XCODE ลองแก้ไขโดยวิธีการ 1 รวมคลาสไว้ในส่วนหัวและ / หรือเนื้อหาอย่างชัดเจนแทนไฟล์ * .pch จากนั้นข้อผิดพลาดนี้อาจหายไป นอกจากนี้การลบข้อมูลที่ได้รับจะทำงานเป็นระยะ ๆ คุณได้เปลี่ยนสถานที่ในการตั้งค่าเมื่อเร็ว ๆ นี้โดยบังเอิญหรือไม่ บางคนได้รับข้อผิดพลาดนี้เมื่อพวกเขาใช้ ramdisk สำหรับข้อมูลที่ได้รับจากนั้นพวกเขากลับไปเริ่มต้น นี่เป็นกรณีที่น่ารำคาญที่สุดเนื่องจากทำให้เกิดข้อผิดพลาดนี้ปรากฏขึ้นในเกือบทุกไฟล์

ลอง Fix By Approach 2 บางครั้งวิธีแก้ปัญหาแบบง่าย ๆ อาจช่วยลบบรรทัด #import หนึ่งไฟล์จากไฟล์ pch และคอมไพล์ใหม่ซึ่งจะล้มเหลวตามที่คาดไว้จากนั้นใส่บรรทัดที่ลบกลับเข้าไปใหม่คอมไพล์แล้วคอมไพล์ตามปกติ

ความเป็นไปได้ของปัญหาระหว่าง XCODE ERROR CACHEทำตามขั้นตอนด้านล่าง Clean Build: Command-Option-Shift-K เพื่อล้างโฟลเดอร์ build รีเซ็ต Simulator: เลือก iOS Simulator> รีเซ็ตเนื้อหาและการตั้งค่ารีสตาร์ท Xcode ลบโฟลเดอร์ DerivedData ของคุณใน ~ / Library / Developer / Xcode / 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_a_standard_player


0

เพื่อสร้างเครื่องเล่นวิดีโอที่เรียบง่าย

ก่อนอื่นคุณจะต้องใช้โปรแกรมเล่นวิดีโอพื้นฐานในไฟล์ 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.