FMUSER Wirless Verzend video en audio eenvoudiger!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> Albanees
ar.fmuser.org -> Arabisch
hy.fmuser.org -> Armenian
az.fmuser.org -> Azerbeidzjaans
eu.fmuser.org -> Baskisch
be.fmuser.org -> Wit-Russisch
bg.fmuser.org -> Bulgarian
ca.fmuser.org -> Catalaans
zh-CN.fmuser.org -> Chinees (vereenvoudigd)
zh-TW.fmuser.org -> Chinees (traditioneel)
hr.fmuser.org -> Kroatisch
cs.fmuser.org -> Tsjechisch
da.fmuser.org -> Deens
nl.fmuser.org -> Nederlands
et.fmuser.org -> Ests
tl.fmuser.org -> Filipijns
fi.fmuser.org -> Fins
fr.fmuser.org -> Frans
gl.fmuser.org -> Galicisch
ka.fmuser.org -> Georgisch
de.fmuser.org -> Duits
el.fmuser.org -> Greek
ht.fmuser.org -> Haïtiaans Creools
iw.fmuser.org -> Hebreeuws
hi.fmuser.org -> Hindi
hu.fmuser.org -> Hungarian
is.fmuser.org -> IJslands
id.fmuser.org -> Indonesisch
ga.fmuser.org -> Iers
it.fmuser.org -> Italian
ja.fmuser.org -> Japans
ko.fmuser.org -> Koreaans
lv.fmuser.org -> Lets
lt.fmuser.org -> Lithuanian
mk.fmuser.org -> Macedonisch
ms.fmuser.org -> Maleis
mt.fmuser.org -> Maltees
no.fmuser.org -> Norwegian
fa.fmuser.org -> Perzisch
pl.fmuser.org -> Pools
pt.fmuser.org -> Portugees
ro.fmuser.org -> Roemeens
ru.fmuser.org -> Russisch
sr.fmuser.org -> Servisch
sk.fmuser.org -> Slowaaks
sl.fmuser.org -> Slovenian
es.fmuser.org -> Spaans
sw.fmuser.org -> Swahili
sv.fmuser.org -> Zweeds
th.fmuser.org -> Thai
tr.fmuser.org -> Turks
uk.fmuser.org -> Oekraïens
ur.fmuser.org -> Urdu
vi.fmuser.org -> Vietnamese
cy.fmuser.org -> Welsh
yi.fmuser.org -> Jiddisch
HLS en Http Live Streaming zijn door Apple gedefinieerde protocollen voor real-time streaming. HLS wordt geïmplementeerd op basis van het HTTP-protocol. De transmissie-inhoud bestaat uit twee delen: het ene is het M3U8-beschrijvingsbestand en het andere is het TS-mediabestand.
1. M3U8-bestand
Het mediabestand wordt beschreven in tekst, die is samengesteld uit een reeks tags.
#EXTM3U
# EXT-X-DOELDUUR: 5
#EXTINF: 5,
./0.ts
#EXTINF: 5,
./1.ts
# EXTM3U: De eerste regel van elk M3U8-bestand moet deze tag zijn.
# EXT-X-TARGETDURATION: Specificeer de maximale duur van het mediasegment (seconden). De tijdsduur die is opgegeven in #EXTINF, moet kleiner zijn dan of gelijk zijn aan deze maximale waarde. Deze waarde kan maar één keer voorkomen.
#EXTINF: Beschrijf de lengte van een enkel mediabestand. Mediabestanden volgen, zoals ./0.ts
2. ts-bestand
Het ts-bestand is een transportstroombestand, het belangrijkste videocoderingsformaat is h264 / mpeg4 en de audio is acc / MP3.
Het ts-bestand is verdeeld in drie lagen: ts-laag Transportstroom, pes-laag Pakket Elementaire Stroom, es-laag Elementaire Stroom. De es-laag is de audio- en videogegevens en de pes-laag is de dataframebeschrijvingsinformatie, zoals een tijdstempel die aan de audio- en videogegevens is toegevoegd. De ts-laag is om de nodige informatie toe te voegen voor de identificatie en verzending van de datastroom in de pes-laag
Opmerking: de details zijn als volgt
(1) ts-laag De ts-pakketgrootte is vastgesteld op 188 bytes, en de ts-laag is verdeeld in drie delen: ts-header, aanpassingsveld en payload. De ts-header is vastgesteld op 4 bytes; het aanpassingsveld kan al dan niet bestaan, en de belangrijkste functie is het invullen van gegevens van minder dan 188 bytes; de payload is pes-gegevens.
ts koptekst
sync_byte 8b synchronisatiebyte, vastgesteld op 0x47
transport_error_indicator 1b Transportfoutindicator, die aangeeft dat er een nutteloze byte is na het adapt-veld van de ts-header, meestal 0, deze byte wordt geteld in de lengte van het adapt-veld
payload_unit_start_indicator 1b Laadeenheid startindicator, die is gemarkeerd als 1 aan het begin van een compleet datapakket
transport_priority 1b Transportprioriteit, 0 is lage prioriteit, 1 heeft hoge prioriteit, meestal 0
pid 13b pid-waarde
transport_scrambling_control 2b Transport scrambling control, 00 betekent niet-versleuteld
adaptation_field_control 2b Of het aanpassingsveld moet worden opgenomen, '00' is gereserveerd; '01' betekent geen aanpassingsveld, alleen de payload; '10' betekent alleen het aanpassingsveld, geen payload; '11' betekent dat de aanpassing ook is inbegrepen Domein en payload.
continuity_counter 4b Toenemende teller, van 0-f, de startwaarde hoeft niet noodzakelijk 0 te zijn, maar deze moet continu zijn
De inhoud van de ts-laag wordt geïdentificeerd door de PID-waarde en de belangrijkste inhoud omvat: PAT-tabel, PMT-tabel, audiostream en videostream. Om de ts-stream te ontleden, moet je eerst de PAT-tabel vinden, zolang je de PAT vindt, kun je de PMT vinden en daarna kun je de audio- en videostreams vinden. De PID-waarde van de PAT-tabel is vastgesteld op 0. De PAT-tabel en de PMT-tabel moeten regelmatig in de ts-stream worden ingevoegd, omdat de gebruiker op elk moment kan deelnemen aan de ts-stream, dit interval is relatief klein, meestal om de paar videoframes om PAT en PMT toe te voegen. PAT- en PMT-tabellen zijn nodig, en andere tabellen zoals SDT (service description table) kunnen ook worden toegevoegd, maar de hls-stream kan worden afgespeeld zolang er PAT en PMT zijn.
PAT-tabel: De belangrijkste functie is om de PID-waarde van de PMT-tabel aan te geven.
PMT-tabel: De belangrijkste functie is het specificeren van de PID-waarde van de audio- en videostream.
Audiostream / videostream: draag audio- en video-inhoud.
aanpassing
adaptation_field_length 1B aanpassingsveldlengte, het aantal bytes achter
vlag 1B neemt 0x50 om PCR aan te geven of 0x40 om PCR niet op te nemen
PCR 5B Program Clock Reference, programmaklokreferentie, gebruikt om de systeemtimingklok STC (System Time Clock) te herstellen die consistent is met de encoder.
stuffing_bytes xB stuffing bytes, de waarde is 0xff
De lengte van het aanpassingsgebied omvat één byte die wordt geïdentificeerd door de transmissiefoutindicator. pcr is de programmaklokreferentie, pcr, dts, pts zijn allemaal gesamplede waarden van dezelfde systeemklok, pcr is incrementeel, dus het kan worden ingesteld als dts-waarde, audiogegevens hebben geen pcr nodig. Als er geen veld is, kan ipad spelen, maar vlc kan niet spelen. Bij het inpakken van de ts-stroom hebben de PAT- en PMT-tabellen geen aanpassingsveld. Als de lengte niet genoeg is, vul dan 0xff in. Zowel de videostream als de audiostream moeten een aanpassingsveld toevoegen, dat gewoonlijk wordt toegevoegd aan het eerste ts-pakket en het laatste ts-pakket van een frame, en het middelste ts-pakket wordt niet toegevoegd.
PAT-formaat
table_id 8b PAT-tabel is vast ingesteld op 0x00
section_syntax_indicator 1b is vastgesteld op 1
nul 1b is vast ingesteld op 0
gereserveerd 2b staat vast op 11
section_length 12b De lengte van de volgende gegevens
transport_stream_id 16b Transportstroom-ID, vastgesteld als 0x0001
gereserveerd 2b staat vast op 11
versienummer 5b Versienummer, vastgesteld op 00000, als PAT verandert, wordt het versienummer met 1 verhoogd
current_next_indicator 1b is vast ingesteld op 1, wat aangeeft dat deze PAT-tabel kan worden gebruikt, als deze 0 is, wacht dan op de volgende PAT-tabel
section_number 8b is vast ingesteld op 0x00
last_section_number 8b is vastgesteld op 0x00
Start loop
program_number 16b Als het programmanummer 0x0000 is, betekent dit dat dit NIT is, als het programmanummer 0x0001 is, betekent dit dat dit PMT is
gereserveerd 3b staat vast op 111
PID 13b PID-waarde die overeenkomt met de inhoud van het programmanummer
Einde lus
CRC32 32b CRC32-controlecode van de vorige gegevens
PMT-indeling
table_id 8b PMT-tabel heeft een willekeurige waarde, 0x02
section_syntax_indicator 1b is vastgesteld op 1
nul 1b is vast ingesteld op 0
gereserveerd 2b staat vast op 11
section_length 12b De lengte van de volgende gegevens
program_number 16b kanaalnummer, wat betekent dat het kanaal dat is gekoppeld aan de huidige PMT, de waarde 0x0001 is
gereserveerd 2b staat vast op 11
versienummer 5b Versienummer, vastgesteld op 00000, als PAT verandert, wordt het versienummer met 1 verhoogd
current_next_indicator 1b is vastgesteld op 1
section_number 8b is vast ingesteld op 0x00
last_section_number 8b is vastgesteld op 0x00
gereserveerd 3b staat vast op 111
PCR_PID 13b De PID van het TS-pakket waar PCR (programma-referentieklok) zich bevindt, aangeduid als de video-PID
gereserveerd 4b staat vast op 1111
program_info_length 12b Programmabeschrijvingsinformatie, aangeduid als 0x000 betekent nee
Start loop
stream_type 8b Streamtype, mark is Video of Audio of andere gegevens, h.264-codering komt overeen met 0x1b, aac-codering komt overeen met 0x0f, mp3-codering komt overeen met 0x03
gereserveerd 3b staat vast op 111
elementary_PID 13b PID die overeenkomt met stream_type
gereserveerd 4b staat vast op 1111
ES_info_length 12b Beschrijving informatie, aangeduid als 0x000 betekent nee
Einde lus
CRC32 32b CRC32-controlecode van de vorige gegevens
(2) pes-laag
De pes-laag voegt een tijdstempel en andere informatie toe aan elk video- / audioframe. Het pes-pakket bevat veel inhoud en we laten alleen de meest gebruikte.
pes startcode 3B startcode, vast ingesteld op 0x000001
stream-id 1B audiowaarde (0xc0-0xdf), meestal 0xc0
Videowaarde (0xe0-0xef), meestal 0xe0
pes pakketlengte 2B De lengte van de pes data erachter, 0 betekent onbeperkte lengte,
Alleen de videogegevenslengte is groter dan 0xffff
Vlag 1B heeft meestal de waarde 0x80, wat betekent dat de gegevens niet gecodeerd zijn, geen prioriteit hebben en er een back-up van wordt gemaakt
Vlag 1B waarde 0x80 betekent alleen punten, waarde 0xc0 betekent punten en dts
pes datalengte 1B De lengte van de volgende data, de waarde is 5 of 10
pts 5B 33-bits waarde
dts 5B 33bit-waarde
pts is de weergavetijdstempel en dts is de decoderingstijdstempel. Beide tijdstempels zijn vereist voor videogegevens. De punten en dts van audiogegevens zijn hetzelfde, dus alleen punten zijn nodig. Er zijn twee tijdstempels, pts en dts, die worden veroorzaakt door B-frames. De punten van I- en P-frames zijn gelijk aan dts. Als een video geen B-frames heeft, zijn pts altijd hetzelfde als dts. Lees de videoframes opeenvolgend uit het bestand en de volgorde van de geëxtraheerde frames is dezelfde als de dts-volgorde. Het dts-algoritme is relatief eenvoudig, de beginwaarde + verhoging is voldoende, de pts-berekening is gecompliceerder en de offset moet worden opgeteld bij de dts.
Er zijn alleen punten in de audio-pes (hetzelfde als dts), de I- en P-frames van de video moeten beide tijdstempels hebben en het video B-frame heeft alleen punten nodig (hetzelfde als dts). Om pts en dts in te pakken, moet u het videoframetype weten, maar we kunnen het frametype niet beoordelen aan de hand van het containerformaat. U moet de h.264-inhoud ontleden om het frametype te krijgen.
bijvoorbeeld:
IPBBBP
Leesvolgorde: 1 2 3 4 5 6
dts volgorde: 1 2 3 4 5 6
pts volgorde: 1 5 3 2 4 6
On-demand video dts-algoritme:
dts = beginwaarde + 90000 / video_frame_rate, de beginwaarde kan willekeurig worden gespecificeerd, maar het is het beste om geen 0 te nemen, video_frame_rate is de framesnelheid, zoals 23, 30.
pts en dts zijn gebaseerd op tijdschaal, 1s = 90000 tijdschaal, één frame moet 90000 / video_frame_rate tijdschaal zijn.
Het delen van de tijdschaal van één frame door de bemonsteringsfrequentie kan worden geconverteerd naar de afspeelduur van één frame
On-demand audio dts-algoritme:
dts = beginwaarde + (90000 * audio_samples_per_frame) / audio_sample_rate, de waarde van audio_samples_per_frame is gerelateerd aan de codec, aac-waarde is 1024, mp3-waarde is 1158, audio_sample_rate is de samplefrequentie, zoals 24000, 41000. AAC decodeert een frame van 1024 samples per kanaal, wat betekent dat de duur van een frame 1024 / sample_rate seconden is. Dus het tijdstempel van elk frame is 0, 1024 / sample_rate, ..., 1024 * n / sample_rate seconden.
De dts en pts van de livevideo moeten rechtstreeks de tijd in de livegegevensstroom gebruiken en mogen niet worden berekend met formules.
(3) es laag
De es-laag verwijst naar audio- en videogegevens, we introduceren alleen h.264-video en aac-audio.
h.264-video:
Om de h.264-gegevens in te pakken, moeten we een nalu (Network Abstraction Layer-eenheid) aan de videogegevens toevoegen. De nalu omvat de nalu-header en het nalu-type. De nalu-header staat vast op 0x00000001 (begin van frame) of 0x000001 (in frame). De gegevens van h.264 zijn samengesteld uit plakjes en de inhoud van plakjes omvat: video, sps, pps, enz. Het nalu-type bepaalt de inhoud van de volgende h.264-gegevens.
F 1b forbidden_zero_bit, h.264 bepaalt dat het 0 moet zijn
NRI 2b nal_ref_idc, waarde 0 ~ 3, geeft het belang van deze nalu aan, I-frame, sps, pps nemen meestal 3, P-frame duurt meestal 2 en B-frame duurt meestal 0
Type 5b zie onderstaande tabel
nal_unit_type beschrijving
0 niet gebruikt
1 Niet-IDR-afbeelding, IDR verwijst naar keyframe
2-delige partitie A
3-delige partitie B
|
Voer een e-mailadres in om een verrassing te ontvangen
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> Albanees
ar.fmuser.org -> Arabisch
hy.fmuser.org -> Armenian
az.fmuser.org -> Azerbeidzjaans
eu.fmuser.org -> Baskisch
be.fmuser.org -> Wit-Russisch
bg.fmuser.org -> Bulgarian
ca.fmuser.org -> Catalaans
zh-CN.fmuser.org -> Chinees (vereenvoudigd)
zh-TW.fmuser.org -> Chinees (traditioneel)
hr.fmuser.org -> Kroatisch
cs.fmuser.org -> Tsjechisch
da.fmuser.org -> Deens
nl.fmuser.org -> Nederlands
et.fmuser.org -> Ests
tl.fmuser.org -> Filipijns
fi.fmuser.org -> Fins
fr.fmuser.org -> Frans
gl.fmuser.org -> Galicisch
ka.fmuser.org -> Georgisch
de.fmuser.org -> Duits
el.fmuser.org -> Greek
ht.fmuser.org -> Haïtiaans Creools
iw.fmuser.org -> Hebreeuws
hi.fmuser.org -> Hindi
hu.fmuser.org -> Hungarian
is.fmuser.org -> IJslands
id.fmuser.org -> Indonesisch
ga.fmuser.org -> Iers
it.fmuser.org -> Italian
ja.fmuser.org -> Japans
ko.fmuser.org -> Koreaans
lv.fmuser.org -> Lets
lt.fmuser.org -> Lithuanian
mk.fmuser.org -> Macedonisch
ms.fmuser.org -> Maleis
mt.fmuser.org -> Maltees
no.fmuser.org -> Norwegian
fa.fmuser.org -> Perzisch
pl.fmuser.org -> Pools
pt.fmuser.org -> Portugees
ro.fmuser.org -> Roemeens
ru.fmuser.org -> Russisch
sr.fmuser.org -> Servisch
sk.fmuser.org -> Slowaaks
sl.fmuser.org -> Slovenian
es.fmuser.org -> Spaans
sw.fmuser.org -> Swahili
sv.fmuser.org -> Zweeds
th.fmuser.org -> Thai
tr.fmuser.org -> Turks
uk.fmuser.org -> Oekraïens
ur.fmuser.org -> Urdu
vi.fmuser.org -> Vietnamese
cy.fmuser.org -> Welsh
yi.fmuser.org -> Jiddisch
FMUSER Wirless Verzend video en audio eenvoudiger!
Neem contact op
Adres:
No.305 Zaal HuiLan Gebouw No.273 Huanpu Road Guangzhou China 510620
Categorieën
Nieuwsbrief