Pergunta

Eu estou escrevendo um aplicativo, parte do qual permite que os vídeos fluxo user / jogo. Eu quero restringir a funcionalidade de modo que eles só podem transmitir vídeos, se eles têm uma conexão WiFi. Eu, então, salvar o vídeo para que quando eles têm uma única ligação 3G (ou menor) podem vídeos não córrego e só pode reproduzir vídeos que estão guardados no telefone.

Idealmente, eu gostaria de obter MPMoviePlayerController para stream / reproduzir o filme e, em seguida, acessar os dados do filme e salvá-lo. No entanto, a api MPMoviePlayerController não parece apoiar o acesso aos dados do filme.

Eu gostaria de evitar e cenário download-então-play. Alguma idéia?

Foi útil?

Solução

Duas soluções vêm à mente. Tanto este soluções exigem que o arquivo está em um formato que pode ser jogado progressiva, por exemplo, que você não precisa de todo o arquivo para ser capaz de reproduzi-lo (mas isso seria um pré-requisito de qualquer maneira).

  1. usar um fio para baixar os dados e anexá-lo para um arquivo, e reproduzir o arquivo de outro segmento. Agora, isso requer que você pode lidar com eventos EOF na MPMoviePlayerController e pausar a reprodução até que o arquivo de cache é anexado ao e em seguida, retomar para o mesmo ponto.

Até agora o que eu já vi pessoas fazendo isso, ele não funciona porque MPMoviePlayerController não pode manipular o evento EOF. (Não testei minha auto ainda) [ Cache vídeos para o disco após pré-carga bem sucedida por MPMoviePlayerController

  1. Ir a reprodução de um arquivo e configurar um servidor local HTTP e corrente de que (em localhost). Isso também não é testado. A ideia é que MPMoviePlayerController seria handlle caso de falta de dados melhor a partir de um fluxo de HTTP depois de ler o arquivo diretamente. Desvantagem pode ser que ela é menos eficiente, mas eu acho que é um pequeno aumento na CPU. Eu não sei se a interface de rede iria lidar com isso, mas eu estou supondo que não é um problema.

Deixo esta resposta como um wiki, porque eu não tenho uma solução de trabalho, mas eu também quero um.

Outras dicas

Existe uma maneira de fazer este trabalho, mas você tem que escrever o seu próprio HTTP Live Streaming downloader.

Basicamente, você analisar o arquivo .m3u8 (é um padrão muito simples, mas pode ficar complicado com fluxos alternados e a possibilidade de que o fluxo vai simplesmente cair fora e precisam de uma nova lista de reprodução para continuar) e, em seguida, baixar os pedaços em. ts formato para o seu armazenamento local, dizem os documentos pasta ou caches etc.

Em seguida, você terá que configurar um servidor HTTP local para permitir o MPMoviePlayerController ou AVPlayer para acessar os arquivos através de HTTP (uma vez que não vai tocar um caminho de arquivo local), incluindo uma com códigos de re arquivo de lista apontando para a arquivos locais, o que você vai ter que criar a si mesmo a partir da lista de reprodução original (s). CocoaHTTPServer funciona muito bem para isso.

Depois de ter feito tudo isso, ele funciona muito bem. É inevitável que você começa um pouco de atraso, enquanto você baixar o primeiro pedaço ou dois antes de apresentar o seu URL HTTP local para o jogador de filme, mas depois que você começa o download sem costura, gravação e visualização de reprodução.

Boa sorte!

o iPhone está usando download progressivo para que ele não vai salvar no dispositivo. Para isso você precisa baixá-lo de forma explícita e, em seguida, reproduzir o vídeo a partir de sua pasta local.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top