AVPlayer 및 MPMoviePlayerController 차이점 [닫기]


87

동영상 재생에 필요한 iPhone 애플리케이션을 개발 중입니다. 지금까지이를 달성하기위한 API가 두 개 이상 있음을 배웠습니다. AVPlayerMPMoviePlayerController.

주요 차이점은 무엇입니까?


4
이 질문이 의견 기반 답변을 생성하지 않는지 확인하기 위해이 질문을 바꾸려고했습니다.
까지

답변:


173

참고 iOS9부터 Apple은 MPMoviePlayerController를 더 이상 사용하지 않습니다.

MPMoviePlayerController 클래스는 iOS 9에서 공식적으로 사용되지 않습니다. (MPMoviePlayerViewController 클래스도 공식적으로 사용되지 않습니다.) iOS 9 이상에서 비디오 콘텐츠를 재생하려면 대신 AVKit 프레임 워크의 AVPictureInPictureController 또는 AVPlayerViewController 클래스 또는 WebKit의 WKWebView 클래스를 사용하십시오.

MPMoviePlayerController 참조 에서 복사되었습니다 .

AVPlayer

AVPlayer훨씬 더 많은 유연성을 제공하지만 문서화가 잘되지 않습니다. 이 API를 사용하면 고유 한 UI를 만들어야합니다. AVFoundation(제공하는 프레임 워크 AVPlayer) 일반적으로 상태 확인 을 위해 키-값 관찰 을 많이 사용해야하므로 사용자 (코더)에게 약간 어렵습니다 . KVO의 개념은 훌륭합니다. 오해하지 마십시오. 아직 경험이없는 개발자에게는 배우는 것이 어려울 수 있습니다. Apple은 때때로 어떤 속성이 실제로 KVO를 준수하는지에 대한 정보를 생략하므로 일부 실험을 수행해야합니다.

AVPlayerover의 큰 장점 중 하나는 여러 영화 소스를 끊김없이 재생할 수 있다는 점에서 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 2013 년

1
@Besi 아니오, 작성된대로 완전히 정확합니다. 확실히 비활성화 될 수 있으며 (MPMovieControlStyleNone 사용) 따라서 MPMoviePlayerController의 뷰 또는 .NET Framework의 형제로 자신의 뷰를 추가하는 것을 막을 수 없기 때문에 대체 할 수 있습니다 backgroundView.
까지

8
iOS 9부터 MPMoviePlayerController는 더 이상 사용되지 않으므로 향후 프로젝트에 AVPlayer를 사용해야합니다.
lewis

1
@ lewis42는 매우 귀중한 정보입니다-내 고대 게시물에 추가 할 것입니다. :)
Till
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.