Diferenças entre AVPlayer e MPMoviePlayerController [fechado]

87

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?

suse
fonte
4
Tentei reformular essa questão para ter certeza de que não está gerando respostas baseadas em opinião.
Até

Respostas:

173

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

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

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).

Até
fonte
2
AVPlayer também permite usar animações de camada automaticamente. Se você quiser executar Core Animation em segundo plano, não use um MPMoviePlayerController, embora possa ter uma configuração para habilitá-los, mas esteja ciente de que se estiver usando coisas do CALayer
Stephen J
3
Não. A resposta está correta. A IU MPMoviePlayerController pode ser desabilitada e / ou substituída por uma customizada.
Dave Batton
1
@Besi não, totalmente correto conforme está escrito - definitivamente pode ser desabilitado (usando MPMovieControlStyleNone) e, portanto, substituído, pois nada impede você de adicionar sua própria visão como irmã da visão de MPMoviePlayerController ou diretamente nela backgroundView.
Até
8
No iOS 9, o MPMoviePlayerController está obsoleto e, portanto, você deve usar o AVPlayer para projetos futuros
lewis,
1
Essa é uma informação super valiosa @ lewis42 - vou adicioná-la à minha postagem antiga :)
Até