Frage

Ich schreibe eine app, von denen ein Teil der Benutzer-Stream / Videos abspielen können. Ich mag die Funktionalität beschränken, so dass sie nur können Videos streamen, wenn sie eine WiFi-Verbindung. Ich werde dann das Video speichern, so dass, wenn sie nur ein 3G (oder weniger) Verbindung, die sie nicht Streamen von Videos und kann nur Videos abspielen, die auf dem Telefon gespeichert werden.

Im Idealfall würde Ich mag MPMoviePlayerController bekommen, um den Film zu streamen / spiele und dann die Filmdaten zuzugreifen und speichern. Allerdings ist der MPMoviePlayerController api nicht scheint, Zugriff auf die Filmdaten zu unterstützen.

würde Ich mag zu vermeiden und Download-dann-Play-Szenario. Irgendwelche Ideen?

War es hilfreich?

Lösung

Zwei Lösungen in den Sinn kommen. Sowohl diese Lösungen erfordern, dass die Datei in ein Format ist, das progressive abgespielt werden kann, z.B. dass Sie es nicht in der Lage brauchen die ganze Datei sein zu spielen (aber das wäre eine Voraussetzung sowieso).

  1. einen Thread verwenden, um die Daten herunterzuladen und sie in eine Datei anhängen und die Datei von einem anderen Thread zu spielen. Nun, das erfordert, dass Sie EOF Ereignisse im MPMoviePlayerController umgehen können und die Wiedergabe unterbrechen, bis die Cache-Datei angehängt wird und dann für den gleichen Punkt wieder aufzunehmen.

Bisher, was ich habe Leute gesehen, dies zu tun es nicht funktioniert, weil MPMoviePlayerController kann nicht das EOF-Ereignis behandeln. (Nicht getestet es mir selbst noch) [ Caching Videos auf die Festplatte nach erfolgreicher Vorspannung durch MPMoviePlayerController

  1. Überspringen Sie die Wiedergabe aus einer Datei und das Einrichten eines lokalen HTTP-Server und Strom aus, dass (auf localhost). Dies ist auch nicht getestet. Die Idee ist, dass MPMoviePlayerController beim Lesen der Datei direkt auf den Fall von fehlenden Daten besser von einer HTTP-Stream dann handlle würde. Nachteil könnte sein, dass es weniger effizient ist, aber ich denke, dass eine geringfügige Erhöhung der CPU ist. Ich weiß nicht, ob die Netzwerk-Schnittstelle damit umgehen würde, aber ich nehme an, es ist kein Problem.

Ich lasse diese Antwort als Wiki, weil ich keine funktionierende Lösung, aber ich will auch ein.

Andere Tipps

Es gibt einen Weg, um diese Arbeit zu machen, aber Sie haben Ihre eigenen HTTP-Live-Streaming-Downloader zu schreiben.

Grundsätzlich analysieren Sie die .m3u8-Datei (es ist ein ziemlich einfacher Standard, kann aber mit alternativem Streams und der Möglichkeit knifflig, dass der Strom einfach ausscheiden und eine neue Wiedergabeliste muß weiter) und dann die Stücke herunterladen in. ts-Format auf Ihrem lokalen Speicher, sagen die Ordner Dokumente oder Caches etc.

Dann werden Sie müssen einen lokalen HTTP-Server eingerichtet der MPMoviePlayerController oder AVPlayer zu ermöglichen, die Dateien über HTTP zuzugreifen (da sie nicht einen lokalen Dateipfad berühren), einschließlich einer neu kodierten Playlist-Datei auf das Verzeichnis lokale Dateien, die Sie sich von der ursprünglichen Playlist erstellen (s). CocoaHTTPServer funktioniert gut für diese.

Wenn Sie all das getan haben, es funktioniert super. Es ist unvermeidlich, dass Sie eine wenig Verzögerung erhalten, während Sie die ersten Brocken oder zwei herunterladen, bevor Sie Ihre lokale HTTP-URL zum Video-Player präsentiert, aber nach, dass Sie bekommen nahtlos herunterladen, Aufnahme und Wiedergabe in der Vorschau.

Viel Glück!

das iPhone wird mit progressivem Download, so dass es nicht auf dem Gerät speichert. Dafür benötigen Sie ausdrücklich um es herunterzuladen und dann das Video von Ihrem lokalen Ordner zu spielen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top