FMUSER Wireless Video- und Audioübertragung einfacher!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> Albanisch
ar.fmuser.org -> Arabisch
hy.fmuser.org -> Armenisch
az.fmuser.org -> Aserbaidschanisch
eu.fmuser.org -> Baskisch
be.fmuser.org -> Weißrussisch
bg.fmuser.org -> Bulgarisch
ca.fmuser.org -> Katalanisch
zh-CN.fmuser.org -> Chinesisch (vereinfacht)
zh-TW.fmuser.org -> Chinesisch (traditionell)
hr.fmuser.org -> Kroatisch
cs.fmuser.org -> Tschechisch
da.fmuser.org -> Dänisch
nl.fmuser.org -> Niederländisch
et.fmuser.org -> Estnisch
tl.fmuser.org -> Philippinisch
fi.fmuser.org -> Finnisch
fr.fmuser.org -> Französisch
gl.fmuser.org -> Galizisch
ka.fmuser.org -> Georgisch
de.fmuser.org -> Deutsch
el.fmuser.org -> Griechisch
ht.fmuser.org -> Haitianisches Kreol
iw.fmuser.org -> Hebräisch
hi.fmuser.org -> Hindi
hu.fmuser.org -> Ungarisch
is.fmuser.org -> Isländisch
id.fmuser.org -> Indonesisch
ga.fmuser.org -> Irisch
it.fmuser.org -> Italienisch
ja.fmuser.org -> Japanisch
ko.fmuser.org -> Koreanisch
lv.fmuser.org -> Lettisch
lt.fmuser.org -> Litauisch
mk.fmuser.org -> Mazedonisch
ms.fmuser.org -> Malaiisch
mt.fmuser.org -> Malteser
no.fmuser.org -> Norwegisch
fa.fmuser.org -> Persisch
pl.fmuser.org -> Polnisch
pt.fmuser.org -> Portugiesisch
ro.fmuser.org -> Rumänisch
ru.fmuser.org -> Russisch
sr.fmuser.org -> Serbisch
sk.fmuser.org -> Slowakisch
sl.fmuser.org -> Slowenisch
es.fmuser.org -> Spanisch
sw.fmuser.org -> Suaheli
sv.fmuser.org -> Schwedisch
th.fmuser.org -> Thai
tr.fmuser.org -> Türkisch
uk.fmuser.org -> Ukrainisch
ur.fmuser.org -> Urdu
vi.fmuser.org -> Vietnamesisch
cy.fmuser.org -> Walisisch
yi.fmuser.org -> Jiddisch
Vor ein paar Tagen habe ich einige Zeit damit verbracht, die HTTP-Live-Streaming-Technologie (HLS) zu studieren und einen in C++ geschriebenen HLS-Encoder, hlsliveencoder, zu implementieren. Seine Funktion besteht darin, Kamera und Mikrofon zu erfassen, H.264-Videocodierung und AAC-Audiocodierung in Echtzeit durchzuführen und gemäß der HLS-Protokollspezifikation segmentierte Standard-TS-Dateien und m3u8-Indexdateien zu generieren. Über meinen hlsliveencoder und den HTTP-Server eines Drittanbieters (z. B. Nginx) haben wir das Live-Streaming von HTTP erfolgreich realisiert und den Test auf dem iPhone bestanden. Einige der Gewinne werde ich hier aufschreiben.
1. Analyse der HLS-Technologie
HTTP Live Streaming (HLS) ist ein von Apple Inc. implementiertes HTTP-basiertes Streaming-Media-Transportprotokoll, mit dem Live- und On-Demand-Streaming-Medien realisiert werden können. Es wird hauptsächlich in IOS-Systemen verwendet, um Audio- und Video-Live- und On-Demand-Lösungen für IOS-Geräte (wie iPhone und iPad) bereitzustellen. HLS on Demand ist im Grunde ein gängiges segmentiertes HTTP on Demand. Der Unterschied besteht darin, dass seine Segmente sehr klein sind. Um HLS auf Abruf zu realisieren, liegt der Schlüssel in der Segmentierung von Mediendateien. Derzeit gibt es viele Open-Source-Tools, die verwendet werden können. Ich werde hier nicht darauf eingehen, sondern nur auf die HLS-Liveübertragungstechnologie eingehen.
Im Vergleich zu den gängigen Live-Streaming-Protokollen wie RTMP-Protokoll, RTSP-Protokoll, MMS-Protokoll usw. besteht der größte Unterschied beim HLS-Live-Streaming darin, dass der Live-Client keinen vollständigen Datenstrom erhält. Das HLS-Protokoll speichert den Live-Datenstrom als kontinuierliche, kurzfristige und lange Mediendateien (mpeg-ts-Format) auf der Serverseite, während die Clientseite diese kleinen Dateien kontinuierlich herunterlädt und abspielt, da die Serverseite daraus immer neue kleine Dateien generiert die neuesten Live-Daten, sodass der Client nur die vom Server erhaltenen Dateien abspielen muss, um das Live zu realisieren. Es ist ersichtlich, dass HLS die Live-Übertragung grundsätzlich mittels VOD-Technologie realisiert. Da die Daten über das HTTP-Protokoll übertragen werden, besteht keine Notwendigkeit, das Problem einer Firewall oder eines Proxys zu berücksichtigen, und die Zeit für die Segmentierung von Dateien ist sehr kurz. Der Client kann die Coderate schnell auswählen und ändern, um sie an die Wiedergabe unter verschiedenen Bandbreitenbedingungen anzupassen. Aufgrund der technischen Eigenschaften von HLS ist seine Verzögerung jedoch immer höher als die eines gewöhnlichen Live-Streaming-Protokolls.
Gemäß dem obigen Verständnis müssen wir die folgenden Schlüsseltechnologien untersuchen und implementieren, um HTTP-Live-Streaming live zu erreichen.
(1) Erfassen Sie die Daten der Videoquelle und der Audioquelle
(2) Die Originaldaten werden durch H264 und AAC codiert
(3) Video- und Audiodaten werden als MPEG-TS-Pakete verpackt
(4) HLS-Segmentierungsgenerierungsstrategie und m3u8-Indexdatei
2. HTTP-Transportprotokoll
Unter diesen wurden der erste und der zweite Punkt in meinem vorherigen Artikel erwähnt, und der letzte Punkt ist, dass wir den vorhandenen HTTP-Server verwenden können, daher ist die Implementierung des dritten und vierten Punkts der Schlüssel.
(1) Programmrahmen und Umsetzung
Durch die obige Analyse sind die Logik und der Prozess des HLS-Live-Encoders grundsätzlich klar: Starten Sie den Audio- bzw. Videocodierungsthread, realisieren Sie die Audio- und Videoerfassung über DirectShow (oder eine andere) Technologie und rufen Sie dann libx264 bzw. libfaac für Video auf Audiokodierung. Nachdem die beiden Codierungsthreads die Audio- und Videodaten in Echtzeit codiert haben, speichern sie diese gemäß der benutzerdefinierten Partitionsstrategie in einer Segmentdatei im MPEG-TS-Format. Beim Speichern einer Segmentdatei wird die m3u8-Indexdatei aktualisiert. Wie in der folgenden Abbildung dargestellt:
In der Abbildung oben muss hlsliveencoder nach dem Empfang der Video- und Audiodaten zunächst feststellen, ob die aktuelle Partition beendet werden soll, und eine neue Partition erstellen, um die kontinuierliche Generierung der TS-Partition fortzusetzen. Es ist zu beachten, dass die neue Fragmentierung beim Schlüsselbild beginnen sollte, um zu verhindern, dass der Player einen Decodierungsfehler erleidet. Der Kerncode lautet wie folgt:
Auch die Schnittstelle von tsmuxer ist relativ einfach.
(2) HLS-Segmentgenerierungsstrategie und m3u8
① Segmentierungsstrategie
Die Segmentierungsstrategie von HLS empfiehlt grundsätzlich eine Aufteilung alle 10 Sekunden. Natürlich sollte die konkrete Zeit entsprechend der tatsächlichen Länge der Teilung markiert werden
Im Allgemeinen werden aus Cache- und anderen Gründen die letzten drei Fragmentadressen in der Indexdatei gespeichert und in Form eines „gleitenden Fensters“ aktualisiert.
② Einführung der m3u8-Datei
M3u8 ist die Indexdatei des HTTP-Live-Streamings. M3u8 kann als angesehen werden. Der Unterschied besteht grundsätzlich darin, dass Dateien im M3U-Format die UTF-3-Zeichenkodierung verwenden.
Code kopieren
#Extm3u M3U-Dateiheader, muss in der ersten Zeile platziert werden
#Seriennummer des ersten TS-Segments der ext-x-media-sequence
#Ext-x-targetduration die maximale Dauer jedes TS-Segments
#Erlaubt ext-x-allow-cache den Cache?
#Ende der ext-x-endlist m3u8-Datei
#Extinf-Zusatzinformationen, die Informationen zu Split-Ts, wie Dauer, Bandbreite usw
|
Geben Sie eine E-Mail-Adresse ein, um eine Überraschung zu erhalten
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> Albanisch
ar.fmuser.org -> Arabisch
hy.fmuser.org -> Armenisch
az.fmuser.org -> Aserbaidschanisch
eu.fmuser.org -> Baskisch
be.fmuser.org -> Weißrussisch
bg.fmuser.org -> Bulgarisch
ca.fmuser.org -> Katalanisch
zh-CN.fmuser.org -> Chinesisch (vereinfacht)
zh-TW.fmuser.org -> Chinesisch (traditionell)
hr.fmuser.org -> Kroatisch
cs.fmuser.org -> Tschechisch
da.fmuser.org -> Dänisch
nl.fmuser.org -> Niederländisch
et.fmuser.org -> Estnisch
tl.fmuser.org -> Philippinisch
fi.fmuser.org -> Finnisch
fr.fmuser.org -> Französisch
gl.fmuser.org -> Galizisch
ka.fmuser.org -> Georgisch
de.fmuser.org -> Deutsch
el.fmuser.org -> Griechisch
ht.fmuser.org -> Haitianisches Kreol
iw.fmuser.org -> Hebräisch
hi.fmuser.org -> Hindi
hu.fmuser.org -> Ungarisch
is.fmuser.org -> Isländisch
id.fmuser.org -> Indonesisch
ga.fmuser.org -> Irisch
it.fmuser.org -> Italienisch
ja.fmuser.org -> Japanisch
ko.fmuser.org -> Koreanisch
lv.fmuser.org -> Lettisch
lt.fmuser.org -> Litauisch
mk.fmuser.org -> Mazedonisch
ms.fmuser.org -> Malaiisch
mt.fmuser.org -> Malteser
no.fmuser.org -> Norwegisch
fa.fmuser.org -> Persisch
pl.fmuser.org -> Polnisch
pt.fmuser.org -> Portugiesisch
ro.fmuser.org -> Rumänisch
ru.fmuser.org -> Russisch
sr.fmuser.org -> Serbisch
sk.fmuser.org -> Slowakisch
sl.fmuser.org -> Slowenisch
es.fmuser.org -> Spanisch
sw.fmuser.org -> Suaheli
sv.fmuser.org -> Schwedisch
th.fmuser.org -> Thai
tr.fmuser.org -> Türkisch
uk.fmuser.org -> Ukrainisch
ur.fmuser.org -> Urdu
vi.fmuser.org -> Vietnamesisch
cy.fmuser.org -> Walisisch
yi.fmuser.org -> Jiddisch
FMUSER Wireless Video- und Audioübertragung einfacher!
Kontakt
Adresse
Nr.305 Zimmer HuiLan Gebäude Nr.273 Huanpu Road Guangzhou China 510620
Kategorien
Newsletter