2016-05-30 16 views
2

Ich versuche, eine Android-App zu entwickeln, die ein Video liest, das von dem Server oder anderen Peers kommt, die das Video haben. Für diesen Anwendungsfall muss ich meine Videos in kleinere Stücke teilen, um die Übertragungszeiten zu optimieren, und jedes Stück kann entweder vom zentralen Server oder einem anderen Partner bereitgestellt werden.Wie wiederhole ich Stücke von Videos in Exoplayer

Ich würde gerne wissen, ob Exoplayer in der Lage ist, eine Sequenz von Videodateien ohne Unterbrechung zu lesen?
Ich bin frei, zu tun, was ich will in den Splitting-Prozess, z. Teilen Sie das Video mit dem Linux-Befehl split.

Antwort

1

Die meisten adaptiven Bitrate Streaming-Formate funktionieren ähnlich wie Ihre Beschreibung - sie spucken das Video in mehrere Stücke und der Video Player fordert sie einzeln an. Beispiele für adaptive Raten-Streaming-Protokolle sind HLS, MPEG-DASH, SmoothStreaming.

Es ist möglich, die URL für den nächsten 'Chunk' des Videorouts zu einem 'zentralen' Server zu haben, der die Anfrage an einen anderen 'Peer' weiterleiten könnte, wenn dies Ihren Bedürfnissen entspricht.

Es ist erwähnenswert, dass viele Videos über CDNs geliefert werden, die mit Ihrem gewünschten Ansatz stören könnten (oder alternativ dazu, was Sie wollen, je nachdem, was Ihre zugrunde liegenden Anforderungen sind), also sollten Sie dies auch überprüfen.

aktualisieren

Sie bedeuten Unter der Annahme, dass einige Stücke aus dem Server und einige Stücke von Peer-Geräten im Netzwerk kommen wird, dann wird der oben Server Proxy-Methode nicht funktionieren würde.

Eine Möglichkeit, dies zu tun, wäre, alle Chunks an das Gerät zu liefern, aus welcher Quelle auch immer für jeden Chunk am besten geeignet ist, und sie dann auf dem Gerät zusammenzuführen und das Ergebnis von 'localhost' einzuschalten Ihr Gerät an den Player.

Das klingt wie eine riesige Menge an Overhead und etwas, das nie funktionieren würde, aber ich glaube, es ist tatsächlich eine Technik in einigen Apps verwendet, um von einem Streaming-Format zu einem anderen zu konvertieren (kann kein Beispiel zur Verfügung stellen - sorry ...) .

Ein Beispiel für einen ‚localhost‘ Server auf Android, die nützlich sein könnten an, betrachten:

Eine Alternative, wenn Sie HTML5 innerhalb einer Webseite zu verwenden, waren auf Mit diesem Gerät können Sie die Video-Chunks aus den verschiedenen Quellen laden, bevor Sie sie an den Player übergeben. Dies erfordert Chrome zu diesem Zeitpunkt anstelle des Standard-Android-Browsers, da dieser zum Zeitpunkt des Schreibens die MSE-Erweiterung nicht unterstützt.

Bei all diesen Ansätzen müssen Sie natürlich sicherstellen, dass Sie genug im Voraus laden, um die Video-Pipeline und den Puffer voll zu halten, um Pausen zu vermeiden.

+0

Ich kenne Streaming-Techniken, die Sie mir in Ihrer Antwort beschrieben haben. Ich habe jedoch alles unter Kontrolle, vom Server bis zur Client-seitigen Anwendung, und daher werde ich kein CDN verwenden. Ich frage mich nur, ob ExoPlayer uns ermöglichen, ein Array von Video-Chunks manuell hintereinander zu lesen, so wie es ein einziges Video war.Es ist mir wichtig, dass das Video in mehrere Teile geteilt wird (entweder in Stücke der Rohdatei oder in kleinere Videos), weil ich wählen möchte, welcher Teil von meinem Server geliefert werden soll und welche von Peer zu Peer ausgetauscht werden müssen . –

+0

Ah ok - Ich glaube, Sie meinen eher Peer-Geräte als Peer-Server? Ich habe die Antwort darauf aktualisiert. – Mick

+0

Ich habe gerade dein Update gelesen. Vielen Dank, aber tatsächlich wird der Geräte-zu-Gerät-Teil von einem anderen Typ gehandhabt, der mir sagte, dass er bereits in der Lage ist, die Teile der Datei entweder vom Server oder von einem Peer-Gerät wiederherzustellen. Meine einzige Aufgabe ist es, die wiederhergestellten Stücke neu zu ordnen und sie einem Medienspieler meiner Wahl zu liefern, der kontinuierlich nacheinander gelesen wird. Mit anderen Worten, ich bin nicht verantwortlich für die Datenübertragung, sondern nur für deren Auswertung. Wieder tut es mir leid, wenn ich schwer zu verstehen bin, weil ich kein englischer Muttersprachler bin. –