Question

J'écris une application, une partie qui permet au flux d'utilisateur / lire des vidéos. Je veux limiter la fonctionnalité de sorte qu'ils ne peuvent diffuser des vidéos si elles disposent d'une connexion WiFi. Je vais ensuite enregistrer la vidéo de sorte que quand ils ont une connexion 3G uniquement (ou moins), ils ne peuvent pas diffuser des vidéos et ne peuvent rejouer les vidéos enregistrées sur le téléphone.

Idéalement, je voudrais obtenir MPMoviePlayerController pour diffuser / lire le film, puis accéder aux données vidéo et l'enregistrer. Cependant, l'api MPMoviePlayerController ne semble pas favoriser l'accès aux données de film.

Je voudrais éviter et le scénario de téléchargement puis-play. Toutes les idées?

Était-ce utile?

La solution

Deux solutions viennent à l'esprit. Les deux solutions exigent ce que le fichier est dans un format qui peut être joué progressive, par exemple que vous n'avez pas besoin du fichier entier pour être en mesure de jouer (mais ce serait une condition sine qua non de toute façon).

  1. utilisez un fil pour télécharger les données et l'ajouter à un fichier, et lire le fichier d'un autre fil. Maintenant, qui exige que vous pouvez gérer les événements EOF dans le MPMoviePlayerController et mettre en pause la lecture jusqu'à ce que le fichier cache est ajouté à reprendre puis pour le même point.

Jusqu'à présent, ce que j'ai vu des gens qui font cela ne fonctionne pas parce que MPMoviePlayerController ne peut pas gérer l'événement EOF. (Pas testé mon auto encore) [ vidéos sur le disque Mise en cache après pré-charge réussie par MPMoviePlayerController

  1. Passer la lecture d'un fichier et la configuration d'un serveur HTTP local et flux de ce (sur localhost). Ceci est également non testé. L'idée est que MPMoviePlayerController serait handlle cas de données manquantes mieux à partir d'un flux HTTP puis de lire le fichier directement. Le seul inconvénient, peut-être qu'il est moins efficace, mais je pense que c'est une légère augmentation CPU. Je ne sais pas si l'interface réseau gérerait, mais je suppose que ce n'est pas un problème.

Je laisse cette réponse comme un wiki, parce que je n'ai pas une solution de travail, mais je veux aussi un.

Autres conseils

Il y a un moyen de faire ce travail, mais vous devez écrire votre propre HTTP en direct streaming téléchargeur.

En gros, vous analysez le fichier .m3u8 (c'est une norme assez simple, mais peut se compliquer avec d'autres flux et la possibilité que le flux simplement abandonner et avoir besoin d'une nouvelle liste de lecture pour continuer) puis télécharger les morceaux dans. Format ts à votre stockage local, par exemple le dossier Documents ou Caches etc.

Ensuite, vous devrez configurer un serveur HTTP local pour permettre au MPMoviePlayerController ou AVPlayer d'accéder aux fichiers via HTTP (car ils ne touchent pas un chemin de fichier local), y compris un fichier playlist recodé pointant vers la les fichiers locaux, que vous aurez à vous créer à partir de la liste de lecture originale (s). CocoaHTTPServer fonctionne très bien pour cela.

Une fois que vous avez fait tout cela, il fonctionne très bien. Il est inévitable que vous obtenez un peu de retard pendant que vous téléchargez le premier morceau ou deux avant de présenter votre URL HTTP local au lecteur vidéo, mais après que vous obtenez le téléchargement continu, la lecture d'enregistrement et de prévisualisation.

Bonne chance!

l'iPhone utilise le téléchargement progressif il ne sauvera pas sur l'appareil. Pour cela, vous devez télécharger explicitement et lire la vidéo à partir de votre dossier local.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top