Hls stream herunterladen
NB: Dieser Artikel zielt darauf ab, das Konzept von HLS-Streaming und FFMpeg auf einer grundlegenden Ebene einzuführen. Vor dem Spielen überprüfen wir assetCache.isPlayableOffline und es ist wahr! Es gibt keine Untertitel oder Audiospuren, irgendetwas in den Streams. Wie ist es möglich, dass iOS mir sagt, dass ich dies ohne Verbindung spielen kann und dann funktioniert es nicht. HLS-Streaming ist eine adaptive Bitrate-Technologie. Dies bedeutet, wenn Video in HLS codiert wird, werden mehrere Dateien für unterschiedliche Bandbreiten und auflösungen (Bildschirmgrößen) erstellt. Die Streams werden dem Client in Echtzeit mithilfe einer zugeordnet. M3u8 Indexdatei basierend auf Bildschirmgröße und verfügbarer Bandbreite. Das ist ein Problem vor allem unter iOS 10 oder bei der Verwendung von AVAssetDownloadTask. Ich empfehle, die Unterstützung für iOS 10 und die Verwendung von AVAggregateAssetDownloadTask zu löschen. Hallo dort, wir stießen auch auf das gleiche Problem. Wir konnten es beheben, indem wir die Stream-Playlist-Elemente in der Master-m3u8-Datei nach Bandbreite in absteigender Reihenfolge sortierten. Dieser Ansatz wurde auch in Sitzung 503 der WWDC 2016 um 33:15 (developer.apple.com/videos/play/wwdc2016/503) erwähnt, um die anfängliche Qualität der HLS-Wiedergabe besser einzuschätzen. Prost! Update:Nach dem Sortieren der Wiedergabelistenelemente tauchte das Problem schließlich wieder auf. Nach einer weiteren Debugging-Sitzung mit verschiedenen HLS-Streams stellten wir fest, dass heruntergeladene HLS-Streams dem HTTP-Header "Cache-Control" der Playlist-URLs entsprechen. In unserem Fall wurde eine "Must-Revalidate" im Headerwert enthalten. Dieser Wert führte zu dem beschriebenen Problem, nachdem der Cache veraltet/abgelaufen wurde (`max-age`-Wert im `Cache-Control`-Header). Die Auswahl eines geeigneten Headerwerts ohne Einbeziehung von "must-revalidate" hat das Problem sofort für uns auf reproduzierbare Weise gelöst. Lassen Sie mich erklären, was diese Flags tun: "-i" gibt die Eingabedatei an, die eine Stream-URL oder eine beliebige Mediendatei sein kann. "-map p:5" weist ffmpeg an, den Stream mit der Programm-ID 5 auszuwählen, was in unserem Fall die 720p-Variante ist (Um die verschiedenen Programm-IDs eines Streams zu kennen, führen Sie nur ffmpeg -i -datei/url> aus). "-c copy" weist ffmpeg an, standardbezogene Video- und Audioeigenschaften zu kopieren und keine Codierung vorzunehmen. "-f segment -segment_list" weist ffmpeg an, die Eingabedatei mit Ausgabedateien im Format out%03d.ts zu segmentieren. "-t" teilt ffmpeg die Dauer des Ausführens des Streams in Sekunden mit. Wenn Sie den obigen Befehl ausführen, werden Blöcke von TS-Segmenten mit einer Dauer von jeweils etwa 3 Sekunden innerhalb des aktuellen Arbeitsverzeichnisses generiert. hlsclient ist auch in der Lage, eine Audiospur nur aus einem Videostream mit FFMPEG zu erstellen. 続きを読む