Estou desenvolvendo um aplicativo para iPhone que precisa reproduzir vídeos. Até agora, aprendi que existem pelo menos duas APIs para fazer isso; AVPlayere 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; AVPlayere 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 .
AVPlayeroferece 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 AVPlayerover MPMoviePlayerControllerseria, por exemplo, sua versão estendida, uma AVQueuePlayervez que é capaz de fazer a reprodução contínua de várias fontes de filmes. Outra vantagem, certamente, é a AVFoundationestrutura 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, MPMoviePlayerControllerusa alguns que NSNotificationscobrem tudo o que o aplicativo regular precisa.
Sob o capô, MPMoviePlayerControllerconstró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.
MPMoviePlayerControllerusa o underlaying AVPlayercomo uma instância singleton, portanto, não é possível usar várias instâncias de MPMoviePlayerControllerpara reproduzir vídeos simultaneamente.
Por outro lado, assim que você estiver tentando estender a funcionalidade do MPMoviePlayerControllercom 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 MPMoviePlayerControllerover 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.