5

Trong iOS 9 MPMoviePlayer và tất cả các thành phần của anh ấy không được chấp nhận. Chúng tôi đã sử dụng thông báo MPMoviePlayerController, như MPMoviePlayerLoadStateDidChangeNotification, MPMovieDurationAvailableNotification, MPMoviePlayerPlaybackStateDidChangeNotification, MPMoviePlayerReadyForDisplayDidChangeNotification, để theo dõi chất lượng dịch vụ video. Nhưng bây giờ với AVPlayerViewController tôi không thể tìm thấy thay thế đúng cho các thông báo này.Làm cách nào để thay thế thông báo MPMoviePlayer?

Làm cách nào để thay thế các thông báo này ngay bây giờ?

Trả lời

5

AVPlayerViewController có nhiều khác biệt trong cách sử dụng từ số MPMoviePlayerViewController. Thay vì sử dụng thông báo, bạn sử dụng Quan sát giá trị khóa để xác định các đặc tính hiện tại của đối tượng AVPlayer được liên kết với AVPlayerViewController. Theo tài liệu:

Bạn có thể quan sát trạng thái của trình phát bằng cách sử dụng khóa-giá trị quan sát. Vì vậy, mà bạn có thể thêm và xóa người quan sát một cách an toàn, AVPlayer sẽ tuần tự hóa thông báo về các thay đổi diễn ra tự động trong khi phát lại trên hàng đợi công văn . Theo mặc định, hàng đợi này là hàng đợi chính (xem dispatch_get_main_queue). Để đảm bảo quyền truy cập an toàn vào các thuộc tính không phải là sốcủa người chơi trong khi thay đổi động ở trạng thái phát lại có thể được báo cáo là , bạn phải truy cập hàng loạt quyền truy cập bằng thông báo của người nhận hàng đợi. Trong trường hợp phổ biến, việc tuần tự hóa như vậy được tự nhiên đạt được bằng cách gọi các phương thức khác nhau của AVPlayer trên chuỗi chính hoặc hàng đợi.

Ví dụ, nếu bạn muốn biết khi nghe nhạc của bạn đã được dừng lại thêm một người quan sát trên rate tài sản của AVPlayer đối tượng:

[self.player addObserver:self forKeyPath:@"rate" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context: &PlayerRateContext]; 

Sau đó, trong quan sát kiểm tra phương pháp nếu giá trị new là bằng không:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context { 
    if (context == &PlayerRateContext) { 
     if ([[change valueForKey:@"new"] integerValue] == 0) { 
      // summon Sauron here (or whatever you want to do) 
     } 
     return; 
    } 

    [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; 
    return; 
} 

Rất nhiều thuộc tính trên AVPlayer đều có thể quan sát được. Đi qua số Class reference.

Ngoài ra, còn có một số Thông báo có sẵn cho đối tượng AVPlayerItem bị giới hạn nhưng vẫn hữu ích.

Notifications

AVPlayerItemDidPlayToEndTimeNotification

AVPlayerItemFailedToPlayToEndTimeNotification

AVPlayerItemTimeJumpedNotification

AVPlayerItemPlaybackStalledNotification

AVPlayerItemNewAccessLogEntryNotifi cation

AVPlayerItemNewErrorLogEntryNotification

tôi thấy AVPlayerItemDidPlayToEndTimeNotification đặc biệt hữu ích để tìm kiếm các mục để bắt đầu một lần phát lại đã hoàn tất.

Sử dụng hai lựa chọn này lại với nhau bạn sẽ có thể thay thế hầu hết nếu không phải tất cả các thông báo cho MPMoviePlayerController

+0

Vâng, có vẻ như rất nhiều công việc. Cảm ơn bạn. –

+0

Bạn cũng có thể cung cấp danh sách các thông báo JWPlayer không? Không thể tìm thấy danh sách súc tích trên mạng. –

+0

Làm cách nào để chuyển đổi MPMoviePlayerPlaybackStateDidChangeNotification trong AVPlayer? –

1

Tôi đã xem tài liệu cho cả hai MPMoviePlayerNotificationsAVPlayerItemNotifications và tôi nhận thấy hai điều.

  1. MPMoviePlayerNotifications không hiển thị họ đã phản đối:

    enter image description here

  2. AVPlayerItemNotifications không có bất kỳ thay thế mà tôi có thể thấy:

    enter image description here

S o, tôi bối rối rằng bạn đang nói rằng MPMoviePlayerNotifications không được chấp nhận vì các tài liệu đang nói rằng chúng có sẵn. Ngoài ra, tôi không nghĩ rằng AVPlayerItemNotifications có một sự thay thế cho MPMoviePlayerNotifications.

+1

Từ tài liệu: (. Lớp MPMoviePlayerController cũng chính thức phản đối) 'Lớp MPMoviePlayerViewController được chính thức phản đối trong iOS 9. Để phát nội dung video trong iOS 9 trở lên, thay vào đó hãy sử dụng lớp AVPictureInPictureController hoặc AVPlayerViewController từ khung công tác AVKit hoặc lớp WKWebView từ WebKit'. Tôi đoán, điều đó có nghĩa là không có thông báo 'MPMoviePlayerNotifications' trong tương lai. –

Các vấn đề liên quan