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:
Copiado da referência MPMoviePlayerController .
AVPlayer
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 apresentaAVPlayer
) 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
overMPMoviePlayerController
seria, por exemplo, sua versão estendida, umaAVQueuePlayer
vez que é capaz de fazer a reprodução contínua de várias fontes de filmes. Outra vantagem, certamente, é aAVFoundation
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
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 queNSNotifications
cobrem tudo o que o aplicativo regular precisa.Sob o capô,
MPMoviePlayerController
constrói sobreAVPlayer
- mas isso na verdade acontece de forma totalmente transparente para o usuário - você não tem acesso a essa camada durante o usoMPMoviePlayerController
.MPMoviePlayerController
usa o underlayingAVPlayer
como uma instância singleton, portanto, não é possível usar várias instâncias deMPMoviePlayerController
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
overAVPlayer
, 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 emMPMoviePlayerViewController
(observe a parte View).fonte
backgroundView
.