Sự khác biệt giữa AVPlayer và MPMoviePlayerController [đã đóng]


87

Tôi đang phát triển một ứng dụng iPhone cần phát video. Cho đến nay, tôi biết được rằng có ít nhất hai API để đạt được điều này; AVPlayerMPMoviePlayerController.

Cái gì là sự khác biệt chính?


4
Đã cố gắng viết lại câu hỏi này để đảm bảo rằng nó không tạo ra các câu trả lời dựa trên ý kiến.
Đến

Câu trả lời:


173

LƯU Ý kể từ iOS9, Apple đã ngừng sử dụng MPMoviePlayerController:

Lớp MPMoviePlayerController chính thức không được chấp nhận trong iOS 9. (Lớp MPMoviePlayerViewController cũng chính thức không được dùng nữa.) Để 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 AVKit hoặc lớp WKWebView từ WebKit.

Được sao chép từ tham chiếu MPMoviePlayerController .

AVPlayer

AVPlayermang lại cho bạn sự linh hoạt hơn rất nhiều nhưng được ghi chép lại khá kém. Việc sử dụng API này sẽ buộc bạn phải tạo giao diện người dùng của riêng mình. AVFoundation(khung công tác mang lại cho bạn AVPlayer) nhìn chung hơi khó đối với người dùng (lập trình viên) vì nó buộc bạn phải sử dụng Quan sát giá trị chính rất nhiều để kiểm tra trạng thái. Khái niệm về KVO thật tuyệt vời, đừng hiểu sai ý tôi - tuy nhiên, đối với các nhà phát triển chưa có kinh nghiệm, việc học có thể rất khó khăn. Apple đôi khi bỏ qua thông tin về các thuộc tính nào thực sự tuân thủ KVO và điều đó sẽ buộc bạn phải thực hiện một số thử nghiệm.

Ví dụ, một lợi thế lớn của AVPlayerover MPMoviePlayerControllersẽ là phiên bản mở rộng của nó, AVQueuePlayervì nó có thể phát lại nhiều nguồn phim một cách dễ dàng. Một ưu điểm khác chắc chắn là AVFoundationkhung công tác phong phú về tính năng cho phép bạn thực hiện những việc như lập / mã hóa / chuyển đổi phim nhanh chóng.

Tuy nhiên, một lợi thế lớn khác của AVPlayerthực tế là bạn thực sự có thể phát nhiều nguồn video đồng thời (ví dụ: cạnh nhau) mà không gặp bất kỳ vấn đề gì.

MPMoviePlayerController

MPMoviePlayerControllerrất dễ sử dụng và đáp ứng hầu hết các nhu cầu ra khỏi hộp. Sử dụng API này sẽ cung cấp cho bạn một giao diện người dùng đẹp và dễ hiểu. Tuy nhiên, giao diện người dùng có thể bị vô hiệu hóa hoặc thay thế bằng giao diện người dùng tùy chỉnh.

Đối với các thay đổi trạng thái, hãy MPMoviePlayerControllersử dụng một số NSNotificationsthứ bao gồm mọi thứ mà Ứng dụng thông thường cần.

Dưới mui xe, các MPMoviePlayerControllerbản dựng trên AVPlayer- nhưng điều đó thực sự xảy ra hoàn toàn trong suốt đối với người dùng - bạn không có quyền truy cập vào lớp đó trong khi sử dụng MPMoviePlayerController.

MPMoviePlayerControllersử dụng lớp dưới AVPlayernhư một phiên bản singleton, do đó không thể sử dụng nhiều phiên bản MPMoviePlayerControllerđể phát video đồng thời.

Mặt khác, ngay sau khi bạn đang cố gắng mở rộng chức năng của MPMoviePlayerControllercác tính năng của riêng mình, mã nhanh chóng trở nên khó chịu - ví dụ: bạn có thể sẽ bắt đầu sử dụng nhiều bộ hẹn giờ để bao gồm những thứ như phát hiện chết đói thích hợp (thực ra, tính năng đó đã được vào phiên bản iOS5 của lớp này), cập nhật giao diện người dùng tùy chỉnh, ... Hoặc bạn có thể có nhiều thuộc tính trạng thái cố gắng che những thứ như hủy phát lại một cách duyên dáng trong khi trình phát vẫn đang lưu vào bộ đệm trước.


Đề nghị cá nhân

Tôi đã sử dụng cả hai và tôi sẽ tiếp tục sử dụng cả hai, tùy thuộc vào nhu cầu của Ứng dụng mà tôi sẵn lòng xây dựng. Đối với hầu hết các dự án (đơn giản), tôi khuyên bạn nên sử dụng MPMoviePlayerControllerover AVPlayervì nó rất đơn giản để sử dụng và chỉ với một vài dòng mã, bạn sẽ có được một trình phát đa phương tiện chính thức. Và nếu nhu cầu của bạn về phát lại phương tiện thậm chí còn đơn giản hơn, hãy xem qua MPMoviePlayerViewController(lưu ý rằng Phần xem).


2
AVPlayer cũng tự động cho phép bạn sử dụng hoạt ảnh lớp. Nếu bạn muốn chạy Core Animation ở chế độ nền, không sử dụng một MPMoviePlayerController, mặc dù nó có thể có một thiết lập để giúp họ, chỉ cần nhận thức được rằng nếu bạn đang sử dụng thứ CALayer
Stephen J

3
Câu trả lời là đúng. Giao diện người dùng MPMoviePlayerController thể bị tắt và hoặc thay thế bằng giao diện người dùng tùy chỉnh.
Dave Batton

1
@Besi không, hoàn toàn chính xác như đã viết - nó chắc chắn có thể bị vô hiệu hóa (sử dụng MPMovieControlStyleNone) và do đó được thay thế vì không có gì ngăn bạn thêm chế độ xem của riêng mình với tư cách là anh chị em của chế độ xem của MPMoviePlayerController hoặc trực tiếp trên chế độ xem của nó backgroundView.
Đến

8
Kể từ iOS 9, MPMoviePlayerController không được dùng nữa và vì vậy bạn nên sử dụng AVPlayer cho các dự án trong tương lai
lewis

1
Đó là thông tin siêu giá trị @ lewis42 - sẽ thêm nó vào bài đăng cổ của tôi :)
Cho đến
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.