동영상 재생에 필요한 iPhone 애플리케이션을 개발 중입니다. 지금까지이를 달성하기위한 API가 두 개 이상 있음을 배웠습니다. AVPlayer
및 MPMoviePlayerController
.
주요 차이점은 무엇입니까?
답변:
참고 iOS9부터 Apple은 MPMoviePlayerController를 더 이상 사용하지 않습니다.
MPMoviePlayerController 클래스는 iOS 9에서 공식적으로 사용되지 않습니다. (MPMoviePlayerViewController 클래스도 공식적으로 사용되지 않습니다.) iOS 9 이상에서 비디오 콘텐츠를 재생하려면 대신 AVKit 프레임 워크의 AVPictureInPictureController 또는 AVPlayerViewController 클래스 또는 WebKit의 WKWebView 클래스를 사용하십시오.
MPMoviePlayerController 참조 에서 복사되었습니다 .
AVPlayer
훨씬 더 많은 유연성을 제공하지만 문서화가 잘되지 않습니다. 이 API를 사용하면 고유 한 UI를 만들어야합니다. AVFoundation
(제공하는 프레임 워크 AVPlayer
) 일반적으로 상태 확인 을 위해 키-값 관찰 을 많이 사용해야하므로 사용자 (코더)에게 약간 어렵습니다 . KVO의 개념은 훌륭합니다. 오해하지 마십시오. 아직 경험이없는 개발자에게는 배우는 것이 어려울 수 있습니다. Apple은 때때로 어떤 속성이 실제로 KVO를 준수하는지에 대한 정보를 생략하므로 일부 실험을 수행해야합니다.
AVPlayer
over의 큰 장점 중 하나는 여러 영화 소스를 끊김없이 재생할 수 있다는 점에서 MPMoviePlayerController
확장 버전 AVQueuePlayer
입니다. 또 다른 장점은 바로 AVFoundation
영화 구성 / 인코딩 / 변환과 같은 작업을 수행 할 수있는 풍부한 기능의 프레임 워크입니다.
의 또 다른 큰 장점 AVPlayer
은 실제로 여러 비디오 소스를 문제없이 동시에 (예 : 나란히) 재생할 수 있다는 것입니다.
MPMoviePlayerController
사용하기 쉽고 대부분의 요구 사항을 즉시 사용할 수 있습니다. 이 API를 사용하면보기 좋고 일반적으로 이해되는 UI를 얻을 수 있습니다. 그러나 UI를 비활성화하거나 사용자 지정 UI로 바꿀 수 있습니다.
상태 변경의 경우 일반 앱에 필요한 모든 것을 다루는 MPMoviePlayerController
몇 가지 NSNotifications
를 사용 합니다.
내부적으로 MPMoviePlayerController
는 위에 빌드 AVPlayer
되지만 실제로는 사용자에게 완전히 투명하게 발생합니다 MPMoviePlayerController
. 사용하는 동안에는 해당 레이어에 액세스 할 수 없습니다 .
MPMoviePlayerController
언더 레이 AVPlayer
를 싱글 톤 인스턴스로 사용하므로의 여러 인스턴스를 사용 MPMoviePlayerController
하여 동시에 비디오를 재생할 수 없습니다 .
반면에 MPMoviePlayerController
자신 의 기능으로의 기능을 확장하려고 시도하자마자 코드가 빠르게 복잡해집니다. 예를 들어 적절한 굶주림 감지와 같은 작업을 처리하기 위해 여러 타이머를 사용하기 시작할 수 있습니다 (실제로는 해당 기능이 포함되었습니다). 이 클래스의 iOS5 버전), 사용자 정의 UI 업데이트, ... 또는 플레이어가 여전히 사전 버퍼링 중일 때 재생을 정상적으로 중단하는 것과 같은 작업을 처리하려는 상태 속성이 몇 개 이상있을 수 있습니다.
개인 추천
두 가지를 모두 사용했으며 앱의 필요에 따라 계속해서 둘 다 사용할 것입니다. 대부분의 (간단한) 프로젝트의 경우 사용 하기가 매우 간단하고 코드 몇 줄만으로 본격적인 미디어 플레이어를 얻을 수 있으므로 MPMoviePlayerController
over AVPlayer
를 사용 하는 것이 좋습니다 . 미디어 재생에 대한 요구가 더 간단하다면 한 번 살펴보십시오 MPMoviePlayerViewController
(View-part 참고).
backgroundView
.