Estou desenvolvendo um aplicativo para iPhone que precisa reproduzir vídeos. Até agora, aprendi que existem pelo menos duas APIs para fazer isso; AVPlayer
e MPMoviePlayerController
.
Quais são as principais diferenças?
Estou desenvolvendo um aplicativo para iPhone que precisa reproduzir vídeos. Até agora, aprendi que existem pelo menos duas APIs para fazer isso; AVPlayer
e MPMoviePlayerController
.
Quais são as principais diferenças?
Respostas:
OBSERVAÇÃO a partir do iOS9, a Apple descontinuou o MPMoviePlayerController:
A classe MPMoviePlayerController está formalmente obsoleta no iOS 9. (A classe MPMoviePlayerViewController também está formalmente obsoleta.) Para reproduzir conteúdo de vídeo no iOS 9 e posterior, use a classe AVPictureInPictureController ou AVPlayerViewController da estrutura AVKit ou a classe WKWebView do WebKit.
Copiado da referência MPMoviePlayerController .
AVPlayer
oferece muito mais flexibilidade, mas é muito mal documentado. O uso dessa API o forçará a criar sua própria IU. AVFoundation
(a estrutura que apresenta AVPlayer
) geralmente é um pouco difícil para o usuário (codificador), pois força você a usar muito a observação de valores-chave para verificar estados. O conceito de KVO é ótimo, não me interpretem mal - ainda assim, para desenvolvedores inexperientes pode ser doloroso aprender. A Apple às vezes omite as informações sobre quais propriedades são realmente compatíveis com o KVO e isso o forçará a fazer alguns experimentos.
Uma grande vantagem do AVPlayer
over MPMoviePlayerController
seria, por exemplo, sua versão estendida, uma AVQueuePlayer
vez que é capaz de fazer a reprodução contínua de várias fontes de filmes. Outra vantagem, certamente, é a AVFoundation
estrutura rica em recursos que permite fazer coisas como composição / codificação / conversão instantânea de filmes.
Outra grande vantagem do AVPlayer
é o fato de que você pode reproduzir várias fontes de vídeo simultaneamente (por exemplo, lado a lado) sem nenhum problema.
MPMoviePlayerController
é fácil de usar e cobre a maioria das necessidades prontamente. Usar esta API fornecerá uma interface de usuário bonita e comumente compreendida. A IU, entretanto, pode ser desabilitada e / ou substituída por uma customizada.
Para alterações de status, MPMoviePlayerController
usa alguns que NSNotifications
cobrem tudo o que o aplicativo regular precisa.
Sob o capô, MPMoviePlayerController
constrói sobre AVPlayer
- mas isso na verdade acontece de forma totalmente transparente para o usuário - você não tem acesso a essa camada durante o uso MPMoviePlayerController
.
MPMoviePlayerController
usa o underlaying AVPlayer
como uma instância singleton, portanto, não é possível usar várias instâncias de MPMoviePlayerController
para reproduzir vídeos simultaneamente.
Por outro lado, assim que você estiver tentando estender a funcionalidade do MPMoviePlayerController
com seus próprios recursos, o código rapidamente ficará desagradável - por exemplo, você possivelmente começará a usar vários temporizadores para cobrir coisas como uma detecção de fome adequada (na verdade, esse recurso foi incluído na versão iOS5 desta classe), atualizações customizadas de IU, ... Ou você pode acabar tendo mais do que um punhado de propriedades de estado tentando cobrir coisas como abortar graciosamente a reprodução enquanto o player ainda está pré-buffer.
Recomendação Pessoal
Usei os dois e continuarei usando os dois, dependendo das necessidades do App que tenho o prazer de construir. Para a maioria dos projetos (simples), eu recomendaria usar MPMoviePlayerController
over AVPlayer
, pois é muito simples de usar e com apenas algumas linhas de código, você obtém um reprodutor de mídia completo. E se suas demandas de reprodução de mídia são ainda mais simples, dê uma olhada em MPMoviePlayerViewController
(observe a parte View).
backgroundView
.