ความแตกต่างของ AVPlayer และ MPMoviePlayerController [ปิด]


87

ฉันกำลังพัฒนาแอพพลิเคชั่น iPhone ที่ต้องเล่นวิดีโอ จนถึงตอนนี้ฉันได้เรียนรู้ว่ามี API อย่างน้อยสองตัวสำหรับการบรรลุเป้าหมายนี้ AVPlayerและMPMoviePlayerController.

อะไรคือความแตกต่างที่สำคัญ?


4
พยายามที่จะตอบคำถามนี้ซ้ำเพื่อให้แน่ใจว่าไม่ได้สร้างคำตอบตามความคิดเห็น
ถึง

คำตอบ:


173

หมายเหตุสำหรับ iOS9 Apple ได้เลิกใช้งาน MPMoviePlayerController:

คลาส MPMoviePlayerController เลิกใช้งานอย่างเป็นทางการแล้วใน iOS 9 (คลาส MPMoviePlayerViewController ก็เลิกใช้อย่างเป็นทางการเช่นกัน) ในการเล่นเนื้อหาวิดีโอใน iOS 9 ขึ้นไปให้ใช้คลาส AVPictureInPictureController หรือ AVPlayerViewController จากเฟรมเวิร์ก AVKit หรือคลาส WKWebView จาก WebKit แทน

คัดลอกมาจากการอ้างอิง MPMoviePlayerController

AVPlayer

AVPlayerช่วยให้คุณมีความยืดหยุ่นมากขึ้น แต่มีเอกสารค่อนข้างไม่ดี การใช้ API นี้จะบังคับให้คุณสร้าง UI ของคุณเอง AVFoundation(กรอบงานที่นำคุณAVPlayer) โดยทั่วไปแล้วผู้ใช้ (coder) ค่อนข้างยากเนื่องจากบังคับให้คุณใช้การสังเกตคีย์ - ค่าจำนวนมากเพื่อตรวจสอบสถานะ แนวคิดของ KVO นั้นยอดเยี่ยมอย่าเข้าใจฉันผิด - แต่สำหรับนักพัฒนาที่ไม่มีประสบการณ์อาจเป็นเรื่องยากที่จะเรียนรู้ บางครั้ง Apple จะละเว้นข้อมูลว่าคุณสมบัติใดที่เป็นไปตามข้อกำหนด KVO จริงและนั่นจะบังคับให้คุณทำการทดลองบางอย่าง

ข้อดีอย่างหนึ่งที่ใหญ่AVPlayerกว่าMPMoviePlayerControllerจะยกตัวอย่างเช่นจะเป็นรุ่นที่ขยายของตนAVQueuePlayerเป็นที่หนึ่งสามารถที่จะทำไม่มีช่องโหว่การเล่นของแหล่งที่มาของภาพยนตร์หลาย ๆ ข้อดีอีกประการหนึ่งคือAVFoundationเฟรมเวิร์กที่มีคุณลักษณะที่ช่วยให้คุณทำสิ่งต่างๆเช่นการจัดองค์ประกอบ / การเข้ารหัส / การแปลงภาพยนตร์ได้ทันที

ข้อดีอีกอย่างหนึ่งAVPlayerคือคุณสามารถเล่นวิดีโอหลายแหล่งพร้อมกันได้ (เช่นเคียงข้างกัน) โดยไม่มีปัญหา

MPMoviePlayerController

MPMoviePlayerControllerใช้งานง่ายและครอบคลุมความต้องการส่วนใหญ่นอกกรอบ การใช้ API นี้จะทำให้คุณมี UI ที่ดูดีและเข้าใจได้ทั่วไป อย่างไรก็ตาม UI สามารถปิดใช้งานและหรือแทนที่ด้วย UI ที่กำหนดเองได้

สำหรับการเปลี่ยนแปลงสถานะให้MPMoviePlayerControllerใช้บางส่วนที่NSNotificationsครอบคลุมทุกสิ่งที่แอปทั่วไปต้องการ

ภายใต้ประทุน, MPMoviePlayerControllerสร้างด้านบนของAVPlayer- แต่ที่เกิดขึ้นจริงโปร่งใสทั้งหมดให้กับผู้ใช้ - MPMoviePlayerControllerคุณมีการเข้าถึงชั้นที่ไม่มีในขณะที่ใช้

MPMoviePlayerControllerใช้การซ้อนทับAVPlayerเป็นอินสแตนซ์ซิงเกิลตันดังนั้นจึงไม่สามารถใช้หลายอินสแตนซ์MPMoviePlayerControllerเพื่อเล่นวิดีโอพร้อมกันได้

ในทางกลับกันทันทีที่คุณพยายามขยายการทำงานของMPMoviePlayerControllerฟีเจอร์ของคุณเองโค้ดจะกลายเป็นสิ่งที่น่ารังเกียจอย่างรวดเร็วเช่นคุณอาจจะเริ่มใช้ตัวจับเวลาหลายตัวเพื่อปกปิดสิ่งต่างๆเช่นการตรวจจับการอดอาหารที่เหมาะสม (อันที่จริงฟีเจอร์นั้นรวมอยู่ด้วย ในคลาสนี้ของ iOS5), การอัปเดต UI ที่กำหนดเอง, ... หรือคุณอาจมีคุณสมบัติสถานะมากกว่าจำนวนหนึ่งที่พยายามจะครอบคลุมสิ่งต่างๆเช่นการยกเลิกการเล่นอย่างสง่างามในขณะที่ผู้เล่นยังคงบัฟเฟอร์ล่วงหน้า


คำแนะนำส่วนบุคคล

ฉันใช้ทั้งสองอย่างแล้วและจะใช้ทั้งสองอย่างต่อไปทั้งนี้ขึ้นอยู่กับความต้องการของแอพที่ฉันมีความยินดีที่จะสร้าง สำหรับโปรเจ็กต์ (ง่าย ๆ ) ส่วนใหญ่ฉันขอแนะนำให้ใช้MPMoviePlayerControllerover AVPlayerเนื่องจากใช้งานง่ายมากและด้วยโค้ดเพียงไม่กี่บรรทัดคุณจะได้รับโปรแกรมเล่นสื่อที่มีคุณสมบัติครบถ้วน และหากความต้องการของคุณในการเล่นสื่อนั้นง่ายยิ่งขึ้นลองดูที่MPMoviePlayerViewController(โปรดทราบว่า View-part)


2
AVPlayer ยังให้คุณใช้ภาพเคลื่อนไหวแบบเลเยอร์โดยอัตโนมัติ หากคุณต้องการเรียกใช้ Core Animation ในพื้นหลังอย่าใช้ MPMoviePlayerController แม้ว่าอาจมีการตั้งค่าเพื่อเปิดใช้งาน แต่โปรดทราบว่าหากคุณใช้งาน CALayer
Stephen J

3
ไม่คำตอบถูกต้อง MPMoviePlayerController UI สามารถปิดใช้งานและหรือแทนที่ด้วยUI ที่กำหนดเองได้
Dave Batton

1
@Besi ไม่ถูกต้องทั้งหมดที่เขียน - แน่นอนมันสามารถใช้งาน (ใช้ MPMovieControlStyleNone) และแทนที่ด้วยเหตุที่มีอะไรที่หยุดคุณจากการเพิ่มมุมมองของคุณเองเป็นพี่น้องในมุมมองของ MPMoviePlayerController backgroundViewหรือโดยตรงในตัวของมัน
จนถึง

8
เนื่องจาก iOS 9 MPMoviePlayerController เลิกใช้งานแล้วดังนั้นคุณควรใช้ AVPlayer สำหรับโครงการในอนาคต
lewis

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