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
HLS und Http Live Streaming sind von Apple definierte Protokolle für Echtzeit-Streaming. HLS wird basierend auf dem HTTP-Protokoll implementiert. Der Übertragungsinhalt besteht aus zwei Teilen, einer ist die M3U8-Beschreibungsdatei und der andere ist die TS-Mediendatei.
1. M3U8-Datei
Die Mediendatei wird im Text beschrieben, der aus einer Reihe von Tags besteht.
#EXTM3U
# EXT-X-TARGETDURATION: 5
#EXTINF: 5,
./0.ts
#EXTINF: 5,
./1.ts
# EXTM3U: Die erste Zeile jeder M3U8-Datei muss dieses Tag sein.
# EXT-X-TARGETDURATION: Geben Sie die maximale Zeitdauer des Mediensegments (Sekunden) an. Die in #EXTINF angegebene Zeitdauer muss kleiner oder gleich diesem Maximalwert sein. Dieser Wert kann nur einmal angezeigt werden.
#EXTINF: Beschreiben Sie die Länge einer einzelnen Mediendatei. Es folgen Mediendateien wie ./0.ts
2. ts Datei
Die ts-Datei ist eine Transport-Stream-Datei, das Haupt-Videocodierungsformat ist h264 / mpeg4 und das Audio ist acc / MP3.
Die ts-Datei ist in drei Ebenen unterteilt: ts-Ebene Transport Stream, pes Ebene Packet Elemental Stream, es Layer Elementary Stream. Die es-Schicht sind die Audio- und Videodaten, und die pes-Schicht sind die Datenrahmenbeschreibungsinformationen, wie beispielsweise ein Zeitstempel, der zu den Audio- und Videodaten hinzugefügt wird. Die ts-Schicht soll die notwendigen Informationen für die Identifizierung und Übertragung des Datenstroms in der pes-Schicht hinzufügen
Hinweis: Die Details sind wie folgt
(1) ts-Schicht Die ts-Paketgröße ist auf 188 Bytes festgelegt, und die ts-Schicht ist in drei Teile unterteilt: ts-Header, Anpassungsfeld und Nutzlast. Der ts-Header ist auf 4 Bytes festgelegt. Das Anpassungsfeld kann existieren oder nicht, und seine Hauptfunktion besteht darin, Daten mit weniger als 188 Bytes einzugeben. Die Nutzlast sind Pes-Daten.
ts Header
sync_byte 8b Synchronisationsbyte, fest auf 0x47 eingestellt
transport_error_indicator 1b Transportfehleranzeige, die angibt, dass nach dem Anpassungsfeld des ts-Headers ein nutzloses Byte vorhanden ist, normalerweise 0, dieses Byte wird in der Länge des Anpassungsfelds gezählt
payload_unit_start_indicator 1b Startanzeige für Ladeeinheit, die am Anfang eines vollständigen Datenpakets als 1 markiert ist
transport_priority 1b Transportpriorität, 0 ist niedrige Priorität, 1 ist hohe Priorität, normalerweise 0
pid 13b pid Wert
transport_scrambling_control 2b Transport-Scrambling-Steuerung, 00 bedeutet unverschlüsselt
adaptive_field_control 2b Ob das Anpassungsfeld eingeschlossen werden soll, '00' ist reserviert; '01' bedeutet kein Anpassungsfeld, nur die Nutzlast; '10' bedeutet nur das Anpassungsfeld, keine Nutzlast; '11' bedeutet, dass die Anpassung auch Domain und Payload enthält.
continuity_counter 4b Wenn der Zähler von 0-f erhöht wird, nimmt der Startwert nicht unbedingt 0 an, sondern muss stetig sein
Der Inhalt der ts-Schicht wird durch den PID-Wert identifiziert, und der Hauptinhalt umfasst: PAT-Tabelle, PMT-Tabelle, Audiostream und Videostream. Um den ts-Stream zu analysieren, müssen Sie zuerst die PAT-Tabelle suchen. Solange Sie die PAT finden, können Sie die PMT und dann die Audio- und Videostreams finden. Der PID-Wert der PAT-Tabelle ist auf 0 festgelegt. Die PAT-Tabelle und die PMT-Tabelle müssen regelmäßig in den ts-Stream eingefügt werden, da der Benutzer jederzeit dem ts-Stream beitreten kann. Dieses Intervall ist relativ klein, normalerweise alle paar Videobilder zum Hinzufügen von PAT und PMT. PAT- und PMT-Tabellen sind erforderlich, und andere Tabellen wie SDT (Service Description Table) können ebenfalls hinzugefügt werden. Der hls-Stream kann jedoch abgespielt werden, solange PAT und PMT vorhanden sind.
PAT-Tabelle: Ihre Hauptfunktion besteht darin, den PID-Wert der PMT-Tabelle anzuzeigen.
PMT-Tabelle: Die Hauptfunktion besteht darin, den PID-Wert des Audio- und Videostreams anzugeben.
Audio- / Videostream: Tragen Sie Audio- und Videoinhalte.
Anpassung
Adaptionsfeldlänge 1B Anpassungsfeldlänge, die Anzahl der Bytes dahinter
Flag 1B benötigt 0x50, um die PCR anzuzeigen, oder 0x40, um die PCR nicht einzuschließen
PCR 5B-Programmtaktreferenz, Programmtaktreferenz, die verwendet wird, um den Systemzeittakt STC (Systemzeittakt) in Übereinstimmung mit dem Codierer wiederherzustellen.
stuffing_bytes xB Stuffing Bytes, der Wert ist 0xff
Die Länge des Anpassungsbereichs muss ein Byte enthalten, das durch die Übertragungsfehleranzeige gekennzeichnet ist. pcr ist die Programmtaktreferenz, pcr, dts, pts sind alle abgetastete Werte desselben Systemtakts, pcr ist inkrementell, kann also als dts-Wert eingestellt werden, Audiodaten benötigen kein pcr. Wenn kein Feld vorhanden ist, kann das iPad abgespielt werden, vlc jedoch nicht. Beim Packen des ts-Streams haben die PAT- und PMT-Tabellen kein Anpassungsfeld. Wenn die Länge nicht ausreicht, geben Sie einfach 0xff ein. Sowohl der Videostream als auch der Audiostream müssen ein Anpassungsfeld hinzufügen, das normalerweise zum ersten ts-Paket und zum letzten ts-Paket eines Rahmens hinzugefügt wird, und das mittlere ts-Paket wird nicht hinzugefügt.
PAT-Format
table_id 8b Die PAT-Tabelle ist auf 0x00 festgelegt
section_syntax_indicator 1b ist fest auf 1 eingestellt
Null 1b ist fest auf 0
reserviert 2b ist fest auf 11
section_length 12b Die Länge der folgenden Daten
transport_stream_id 16b Transportstrom-ID, festgelegt als 0x0001
reserviert 2b ist fest auf 11
version_number 5b Versionsnummer, fest auf 00000 eingestellt. Wenn sich PAT ändert, erhöht sich die Versionsnummer um 1
current_next_indicator 1b ist auf 1 festgelegt, was darauf hinweist, dass diese PAT-Tabelle verwendet werden kann. Wenn sie 0 ist, warten Sie auf die nächste PAT-Tabelle
Die Abschnittsnummer 8b ist auf 0x00 festgelegt
last_section_number 8b ist fest auf 0x00 eingestellt
starten Sie Schleife
Programmnummer 16b Wenn die Programmnummer 0x0000 ist, bedeutet dies, dass dies NIT ist. Wenn die Programmnummer 0x0001 ist, bedeutet dies, dass dies PMT ist
reserviert 3b ist fest auf 111
PID 13b PID-Wert entsprechend dem Inhalt der Programmnummer
Endschleife
CRC32 32b CRC32-Prüfcode der vorherigen Daten
PMT-Format
table_id 8b Die PMT-Tabelle hat den Wert 0x02
section_syntax_indicator 1b ist fest auf 1 eingestellt
Null 1b ist fest auf 0
reserviert 2b ist fest auf 11
section_length 12b Die Länge der folgenden Daten
Programmnummer 16b Kanalnummer, dh der Kanal, der dem aktuellen PMT zugeordnet ist. Der Wert ist 0x0001
reserviert 2b ist fest auf 11
version_number 5b Versionsnummer, fest auf 00000 eingestellt. Wenn sich PAT ändert, erhöht sich die Versionsnummer um 1
current_next_indicator 1b ist fest auf 1 eingestellt
Die Abschnittsnummer 8b ist auf 0x00 festgelegt
last_section_number 8b ist fest auf 0x00 eingestellt
reserviert 3b ist fest auf 111
PCR_PID 13b Die PID des TS-Pakets, in dem sich die PCR (Programmreferenzuhr) befindet, wird als Video-PID bezeichnet
reserviert 4b ist fest auf 1111
program_info_length 12b Programmbeschreibungsinformationen mit der Bezeichnung 0x000 bedeuten nein
starten Sie Schleife
stream_type 8b Stream-Typ, Markierung ist Video oder Audio oder andere Daten, h.264-Codierung entspricht 0x1b, aac-Codierung entspricht 0x0f, mp3-Codierung entspricht 0x03
reserviert 3b ist fest auf 111
elementare_PID 13b PID entsprechend stream_type
reserviert 4b ist fest auf 1111
ES_info_length 12b Beschreibungsinformationen mit der Bezeichnung 0x000 bedeuten Nr
Endschleife
CRC32 32b CRC32-Prüfcode der vorherigen Daten
(2) Pes-Schicht
Die Pes-Ebene fügt jedem Video- / Audio-Frame einen Zeitstempel und andere Informationen hinzu. Das pes-Paket enthält viel Inhalt, und wir belassen nur die am häufigsten verwendeten.
pes Startcode 3B Startcode, fest auf 0x000001 eingestellt
Stream-ID 1B Audio-Wert (0xc0-0xdf), normalerweise 0xc0
Videowert (0xe0-0xef), normalerweise 0xe0
Pes-Paketlänge 2B Die Länge der dahinter liegenden Pes-Daten, 0 bedeutet unbegrenzte Länge,
Nur die Videodatenlänge überschreitet 0xffff
Das Flag 1B nimmt normalerweise den Wert 0x80 an, was bedeutet, dass die Daten nicht verschlüsselt sind, keine Priorität haben und Daten gesichert werden
Der Flag 1B-Wert 0x80 bedeutet nur Punkte, der Wert 0xc0 bedeutet Punkte und Punkte
pes Datenlänge 1B Die Länge der folgenden Daten, der Wert ist 5 oder 10
pts 5B 33bit Wert
dts 5B 33bit Wert
pts ist der Anzeigezeitstempel und dts ist der Dekodierungszeitstempel. Für Videodaten sind beide Zeitstempel erforderlich. Die Punkte und Punkte der Audiodaten sind gleich, daher werden nur Punkte benötigt. Es gibt zwei Zeitstempel, pts und dts, die durch B-Frames verursacht werden. Die Punkte von I- und P-Frames sind gleich dts. Wenn ein Video keine B-Frames hat, sind pts immer die gleichen wie dts. Lesen Sie die Videobilder nacheinander aus der Datei, und die Reihenfolge der extrahierten Bilder entspricht der dts-Reihenfolge. Der dts-Algorithmus ist relativ einfach, der Anfangswert + Inkrement ist ausreichend, die pts-Berechnung ist komplizierter und der Offset muss zu den dts addiert werden.
Es gibt nur Punkte in den Audio-Pes (wie dts), die I- und P-Frames des Videos müssen beide Zeitstempel haben, und der Video-B-Frame benötigt nur Punkte (wie dts). Um pts und dts zu packen, müssen Sie den Videobildtyp kennen, aber wir können den Rahmentyp nicht anhand des Containerformats beurteilen. Sie müssen den Inhalt von h.264 analysieren, um den Rahmentyp zu erhalten.
beispielsweise:
IPBBBP
Lesereihenfolge: 1 2 3 4 5 6
dts-Reihenfolge: 1 2 3 4 5 6
Punktereihenfolge: 1 5 3 2 4 6
On-Demand-Video-DTS-Algorithmus:
dts = Anfangswert + 90000 / video_frame_rate, der Anfangswert kann beliebig angegeben werden, es ist jedoch am besten, nicht 0 zu nehmen, video_frame_rate ist die Bildrate, z. B. 23, 30.
pts und dts basieren auf der Zeitskala, 1s = 90000 Zeitskala, ein Frame sollte 90000 / video_frame_rate Zeitskala sein.
Das Teilen der Zeitskala eines Frames durch die Abtastfrequenz kann in die Wiedergabedauer eines Frames umgewandelt werden
On-Demand-Audio-DTS-Algorithmus:
dts = Anfangswert + (90000 * audio_samples_per_frame) / audio_sample_rate, der Wert von audio_samples_per_frame bezieht sich auf den Codec, aac-Wert ist 1024, mp3-Wert ist 1158, audio_sample_rate ist die Abtastrate, wie z. B. 24000, 41000. AAC decodiert einen Frame von 1024 Samples pro Kanal, was bedeutet, dass die Dauer eines Frames 1024 / sample_rate Sekunden beträgt. Der Zeitstempel jedes Frames beträgt also 0, 1024 / sample_rate, ..., 1024 * n / sample_rate Sekunden.
Die dts und pts des Live-Videos sollten direkt die Zeit im Live-Datenstrom verwenden und nicht durch Formeln berechnet werden.
(3) es Schicht
Die es-Ebene bezieht sich auf Audio- und Videodaten, wir führen nur h.264-Video und aac-Audio ein.
h.264 Video:
Um die h.264-Daten zu packen, müssen wir den Videodaten einen Nalu (Network Abstraction Layer Unit) hinzufügen. Der Nalu enthält den Nalu-Header und den Nalu-Typ. Der Nalu-Header ist fest auf 0x00000001 (Anfang des Frames) oder 0x000001 (im Frame) festgelegt. Die Daten von h.264 bestehen aus Slices, und der Inhalt von Slices umfasst: Video, sps, pps usw. Der Nalu-Typ bestimmt den Inhalt der nachfolgenden h.264-Daten.
F 1b verbotene_zero_bit, h.264 legt fest, dass es 0 sein muss
NRI 2b nal_ref_idc, Wert 0 ~ 3, gibt die Wichtigkeit dieses Nalu an, I-Frame, sps, pps nehmen normalerweise 3, P-Frame nimmt normalerweise 2 und B-Frame nimmt normalerweise 0
Typ 5b beziehen sich auf die folgende Tabelle
Beschreibung von nal_unit_type
0 nicht verwendet
1 Nicht-IDR-Bild, IDR bezieht sich auf den Schlüsselrahmen
2 Slice Partition A.
3 Slice Partition B.
|
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