FMUSER Wirless Transmit video și audio mai ușor!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> Albaneză
ar.fmuser.org -> arabă
hy.fmuser.org -> Armeană
az.fmuser.org -> azeră
eu.fmuser.org -> bască
be.fmuser.org -> bielorusă
bg.fmuser.org -> Bulgarian
ca.fmuser.org -> catalană
zh-CN.fmuser.org -> Chineză (simplificată)
zh-TW.fmuser.org -> Chineză (tradițională)
hr.fmuser.org -> croată
cs.fmuser.org -> cehă
da.fmuser.org -> Daneză
nl.fmuser.org -> Dutch
et.fmuser.org -> estonă
tl.fmuser.org -> filipinez
fi.fmuser.org -> finlandeză
fr.fmuser.org -> Franceză
gl.fmuser.org -> Galeză
ka.fmuser.org -> Georgiană
de.fmuser.org -> germană
el.fmuser.org -> greacă
ht.fmuser.org -> Creole haitian
iw.fmuser.org -> ebraică
hi.fmuser.org -> Hindi
hu.fmuser.org -> Maghiară
is.fmuser.org -> islandeză
id.fmuser.org -> indoneziană
ga.fmuser.org -> irlandeză
it.fmuser.org -> Italiană
ja.fmuser.org -> japoneză
ko.fmuser.org -> coreeană
lv.fmuser.org -> letonă
lt.fmuser.org -> lituaniană
mk.fmuser.org -> macedoneană
ms.fmuser.org -> Malay
mt.fmuser.org -> malteză
no.fmuser.org -> norvegiană
fa.fmuser.org -> persană
pl.fmuser.org -> poloneză
pt.fmuser.org -> portugheză
ro.fmuser.org -> Română
ru.fmuser.org -> rusă
sr.fmuser.org -> sârbă
sk.fmuser.org -> slovacă
sl.fmuser.org -> Slovenă
es.fmuser.org -> spaniolă
sw.fmuser.org -> Swahili
sv.fmuser.org -> suedeză
th.fmuser.org -> Thai
tr.fmuser.org -> turcă
uk.fmuser.org -> ucraineană
ur.fmuser.org -> Urdu
vi.fmuser.org -> Vietnameză
cy.fmuser.org -> galeză
yi.fmuser.org -> idiș
HLS și Http Live Streaming sunt protocoale pentru streaming în timp real definite de Apple. HLS este implementat pe baza protocolului HTTP. Conținutul transmisiei include două părți, una este fișierul de descriere M3U8, iar cealaltă este fișierul media TS.
1. fișier M3U8
Fișierul media este descris în text, care este compus dintr-o serie de etichete.
#EXTM3U
# EXT-X-TARGETDURATION: 5
#EXTINF: 5,
./0.ts
#EXTINF: 5,
./1.ts
# EXTM3U: Prima linie a fiecărui fișier M3U8 trebuie să fie această etichetă.
# EXT-X-TARGETDURATION: Specificați durata maximă a segmentului media (secunde). Durata de timp specificată în #EXTINF trebuie să fie mai mică sau egală cu această valoare maximă. Această valoare poate apărea o singură dată.
#EXTINF: Descrieți lungimea unui singur fișier media. Urmează fișiere media, cum ar fi ./0.ts
2. fișier ts
Fișierul ts este un fișier de flux de transport, formatul principal de codare video este h264 / mpeg4, iar sunetul este acc / MP3.
Fișierul ts este împărțit în trei straturi: ts layer Transport Stream, pes layer Pachet Elemental Stream, es layer Elementary Stream. Stratul es este datele audio și video, iar stratul pes reprezintă informațiile despre descrierea cadrului de date, cum ar fi un timestamp adăugat la datele audio și video. Stratul ts trebuie să adauge informațiile necesare pentru identificarea și transmiterea fluxului de date în stratul pes
Notă: Detaliile sunt după cum urmează
(1) stratul ts Dimensiunea pachetului ts este fixă la 188 de octeți, iar stratul ts este împărțit în trei părți: antetul ts, câmpul de adaptare și sarcina utilă. Antetul ts este fixat la 4 octeți; câmpul de adaptare poate exista sau nu, iar funcția sa principală este să completeze date mai mici de 188 de octeți; sarcina utilă este pes date.
antetul ts
octet de sincronizare sync_byte 8b, fixat la 0x47
transport_error_indicator 1b Indicator de eroare de transport, indicând faptul că există un octet inutil după câmpul de adaptare al antetului ts, de obicei 0, acest octet este numărat în lungimea câmpului de adaptare
payload_unit_start_indicator 1b Indicator de pornire a unității de încărcare, care este marcat ca 1 la începutul unui pachet de date complet
transport_prioritate 1b Prioritate transport, 0 este prioritate redusă, 1 este prioritate ridicată, de obicei 0
pid 13b valoarea pid
transport_scrambling_control 2b Controlul codului de transport, 00 înseamnă necriptat
adaptation_field_control 2b Indiferent dacă se include câmpul de adaptare, „00” este rezervat; „01” nu înseamnă câmp de adaptare, ci doar sarcina utilă; „10” înseamnă doar câmpul de adaptare, fără sarcină utilă; „11” înseamnă că adaptarea este, de asemenea, inclusă Domeniu și sarcină utilă.
continuity_counter 4b Contor crescător, de la 0-f, valoarea inițială nu ia neapărat 0, dar trebuie să fie continuă
Conținutul stratului ts este identificat prin valoarea PID, iar conținutul principal include: tabelul PAT, tabelul PMT, fluxul audio și fluxul video. Pentru a analiza fluxul ts, trebuie mai întâi să găsiți tabelul PAT, atâta timp cât găsiți PAT, puteți găsi PMT și apoi puteți găsi fluxurile audio și video. Valoarea PID a tabelei PAT este fixă la 0. Tabelul PAT și tabelul PMT trebuie inserate în fluxul ts în mod regulat, deoarece utilizatorul se poate alătura fluxului ts oricând, acest interval este relativ mic, de obicei la fiecare câteva cadre video pentru a adăuga PAT și PMT. Sunt necesare tabele PAT și PMT și pot fi adăugate și alte tabele, cum ar fi SDT (tabelul cu descrierea serviciului), dar fluxul hls poate fi redat atâta timp cât există PAT și PMT.
Tabel PAT: Funcția sa principală este de a indica valoarea PID a tabelului PMT.
Tabel PMT: Funcția sa principală este de a specifica valoarea PID a fluxului audio și video.
Flux audio / flux video: transportați conținut audio și video.
Adaptare
adaptation_field_length 1B lungimea câmpului de adaptare, numărul de octeți din spate
steagul 1B necesită 0x50 pentru a indica PCR sau 0x40 pentru a nu include PCR
PCR 5B Program Clock Reference, referință de program, utilizată pentru a recupera ceasul de sincronizare a sistemului STC (System Time Clock) în concordanță cu codificatorul.
stuffing_bytes xB stuffing bytes, valoarea este 0xff
Lungimea zonei de adaptare trebuie să includă un octet identificat de indicatorul de eroare de transmisie. pcr este referința ceasului programului, pcr, dts, pts sunt valori eșantionate ale aceluiași ceas de sistem, pcr este incremental, deci poate fi setat ca valoare dts, datele audio nu au nevoie de pcr. Dacă nu există câmp, iPad poate juca, dar vlc nu poate juca. La împachetarea fluxului ts, tabelele PAT și PMT nu au un câmp de adaptare. Dacă lungimea nu este suficientă, completează doar 0xff. Atât fluxul video, cât și fluxul audio trebuie să adauge un câmp de adaptare, care este de obicei adăugat la primul pachet ts și la ultimul pachet ts al unui cadru, iar pachetul ts mijlociu nu este adăugat.
Format PAT
table_id 8b Tabelul PAT este fixat la 0x00
section_syntax_indicator 1b este fixat la 1
zero 1b este fixat la 0
2b rezervat este fixat la 11
section_length 12b Lungimea următoarelor date
transport_stream_id 16b ID flux de transport, fixat ca 0x0001
2b rezervat este fixat la 11
version_number 5b Numărul versiunii, fixat la 00000, dacă PAT se modifică, numărul versiunii va crește cu 1
current_next_indicator 1b este fixat la 1, indicând faptul că această tabelă PAT poate fi utilizată, dacă este 0, așteptați următoarea tabelă PAT
section_number 8b este fixat la 0x00
last_section_number 8b este fixat la 0x00
Bucla de pornire
program_number 16b Când numărul programului este 0x0000, înseamnă că acesta este NIT, când numărul programului este 0x0001, înseamnă că acesta este PMT
3b rezervat este fixat la 111
PID 13b Valoarea PID corespunzătoare conținutului numărului de program
Bucla de sfârșit
CRC32 32b CRC32 verificați codul datelor anterioare
Format PMT
table_id 8b Tabelul PMT are orice valoare, 0x02
section_syntax_indicator 1b este fixat la 1
zero 1b este fixat la 0
2b rezervat este fixat la 11
section_length 12b Lungimea următoarelor date
program_number 16b canal number, care înseamnă canalul asociat cu PMT curent, valoarea este 0x0001
2b rezervat este fixat la 11
version_number 5b Numărul versiunii, fixat la 00000, dacă PAT se modifică, numărul versiunii va crește cu 1
current_next_indicator 1b este fixat la 1
section_number 8b este fixat la 0x00
last_section_number 8b este fixat la 0x00
3b rezervat este fixat la 111
PCR_PID 13b PID-ul pachetului TS în care se află PCR (program clock clock), desemnat ca PID video
4b rezervat este fixat la 1111
program_info_length 12b Informații despre descrierea programului, desemnate ca 0x000 înseamnă nr
Bucla de pornire
stream_type 8b Tipul de stream, marca este video sau audio sau alte date, codarea h.264 corespunde 0x1b, codificarea aac corespunde 0x0f, codarea mp3 corespunde 0x03
3b rezervat este fixat la 111
elementary_PID 13b PID corespunzător stream_type
4b rezervat este fixat la 1111
ES_info_length 12b Informații despre descriere, desemnate ca 0x000 înseamnă nu
Bucla de sfârșit
CRC32 32b CRC32 verificați codul datelor anterioare
(2) stratul de pes
Stratul pes adaugă ștampila de timp și alte informații la fiecare cadru video / audio. Pachetul PES conține o mulțime de conținut și le lăsăm doar pe cele mai utilizate.
cod de pornire pes 3B cod de pornire, fixat la 0x000001
ID-ul fluxului 1B valoarea audio (0xc0-0xdf), de obicei 0xc0
Valoare video (0xe0-0xef), de obicei 0xe0
lungimea pachetului 2B Lungimea datelor din spate, 0 înseamnă lungime nelimitată,
Numai lungimea datelor video va depăși 0xffff
Steagul 1B ia de obicei valoarea 0x80, ceea ce înseamnă că datele nu sunt criptate, nu au prioritate și sunt date de rezervă
Semnalul 1B valoarea 0x80 înseamnă numai puncte, valoarea 0xc0 înseamnă puncte și puncte
lungimea datelor 1B Lungimea următoarelor date, valoarea este 5 sau 10
pct. 5B 33bit valoare
dts 5B 33bit valoare
pts este ora de afișare și dts este ora de decodare. Ambele timestampuri sunt necesare pentru datele video. Punctele și datele de date audio sunt aceleași, deci este nevoie doar de puncte. Există două timestampuri, pts și dts, care sunt cauzate de cadre B. Punctele cadrelor I și P sunt egale cu dts. Dacă un videoclip nu are cadre B, punctele vor fi întotdeauna la fel ca și dts. Citiți cadrele video secvențial din fișier, iar secvența cadrelor extrase este aceeași cu secvența dts. Algoritmul dts este relativ simplu, valoarea inițială + creșterea este suficientă, calculul pts este mai complicat și compensarea trebuie adăugată la dts.
Există doar pts în pes audio (la fel ca dts), cadrele I și P ale videoclipului trebuie să aibă ambele timestampuri, iar cadrul video B are nevoie doar de pts (la fel ca dts). Pentru a împacheta pts și dts, trebuie să cunoașteți tipul de cadru video, dar nu putem judeca tipul de cadru prin formatul containerului. Trebuie să analizați conținutul h.264 pentru a obține tipul de cadru.
de exemplu:
IPBBBP
Ordinea de citire: 1 2 3 4 5 6
ordinea dts: 1 2 3 4 5 6
ordinea punctelor: 1 5 3 2 4 6
Algoritm DTS video la cerere:
dts = valoarea inițială + 90000 / video_frame_rate, valoarea inițială poate fi specificată în mod arbitrar, dar este mai bine să nu luați 0, video_frame_rate este rata de cadre, cum ar fi 23, 30.
pts și dts se bazează pe scala de timp, 1s = 90000 scară de timp, un cadru ar trebui să fie 90000 / video_frame_rate timescale.
Împărțirea scalei de timp a unui cadru la frecvența de eșantionare poate fi convertită la durata de redare a unui cadru
Algoritm audio dts la cerere:
dts = valoarea inițială + (90000 * audio_samples_per_frame) / audio_sample_rate, valoarea audio_samples_per_frame este legată de codec, valoarea AAC este 1024, valoarea mp3 este 1158, audio_sample_rate este rata de eșantionare, cum ar fi 24000, 41000. AAC decodifică un cadru de 1024 mostre pe canal, ceea ce înseamnă că durata unui cadru este de 1024 / sample_rate secunde. Deci, marca temporală a fiecărui cadru este 0, 1024 / sample_rate, ..., 1024 * n / sample_rate seconds.
DTS și pts ale videoclipului live ar trebui să utilizeze în mod direct timpul din fluxul de date live și nu ar trebui să fie calculate prin formule.
(3) este stratul
Stratul es se referă la date audio și video, introducem doar h.264 video și audio audio.
video h.264:
Pentru a împacheta datele h.264, trebuie să adăugăm un nalu (Network Abstraction Layer unit) la datele video. Nalu include antetul nalu și tipul nalu. Antetul nalu este fixat la 0x00000001 (începutul cadrului) sau 0x000001 (în cadru). Datele h.264 sunt compuse din felii, iar conținutul feliilor includ: video, sps, pps etc. Tipul nalu determină conținutul datelor h.264 ulterioare.
F 1b forbidden_zero_bit, h.264 stipulează că trebuie să fie 0
NRI 2b nal_ref_idc, valoarea 0 ~ 3, indică importanța acestui nalu, I frame, sps, pps iau de obicei 3, P frame ia de obicei 2 și B frame ia de obicei 0
Tipul 5b se referă la tabelul de mai jos
descriere tip nal_unit_type
0 nu este folosit
1 Imagine non-IDR, IDR se referă la cadrul cheie
Partiție 2 felii A
Partiție 3 felii B
|
Introduceți adresa de e-mail pentru a primi o surpriză
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> Albaneză
ar.fmuser.org -> arabă
hy.fmuser.org -> Armeană
az.fmuser.org -> azeră
eu.fmuser.org -> bască
be.fmuser.org -> bielorusă
bg.fmuser.org -> Bulgarian
ca.fmuser.org -> catalană
zh-CN.fmuser.org -> Chineză (simplificată)
zh-TW.fmuser.org -> Chineză (tradițională)
hr.fmuser.org -> croată
cs.fmuser.org -> cehă
da.fmuser.org -> Daneză
nl.fmuser.org -> Dutch
et.fmuser.org -> estonă
tl.fmuser.org -> filipinez
fi.fmuser.org -> finlandeză
fr.fmuser.org -> Franceză
gl.fmuser.org -> Galeză
ka.fmuser.org -> Georgiană
de.fmuser.org -> germană
el.fmuser.org -> greacă
ht.fmuser.org -> Creole haitian
iw.fmuser.org -> ebraică
hi.fmuser.org -> Hindi
hu.fmuser.org -> Maghiară
is.fmuser.org -> islandeză
id.fmuser.org -> indoneziană
ga.fmuser.org -> irlandeză
it.fmuser.org -> Italiană
ja.fmuser.org -> japoneză
ko.fmuser.org -> coreeană
lv.fmuser.org -> letonă
lt.fmuser.org -> lituaniană
mk.fmuser.org -> macedoneană
ms.fmuser.org -> Malay
mt.fmuser.org -> malteză
no.fmuser.org -> norvegiană
fa.fmuser.org -> persană
pl.fmuser.org -> poloneză
pt.fmuser.org -> portugheză
ro.fmuser.org -> Română
ru.fmuser.org -> rusă
sr.fmuser.org -> sârbă
sk.fmuser.org -> slovacă
sl.fmuser.org -> Slovenă
es.fmuser.org -> spaniolă
sw.fmuser.org -> Swahili
sv.fmuser.org -> suedeză
th.fmuser.org -> Thai
tr.fmuser.org -> turcă
uk.fmuser.org -> ucraineană
ur.fmuser.org -> Urdu
vi.fmuser.org -> Vietnameză
cy.fmuser.org -> galeză
yi.fmuser.org -> idiș
FMUSER Wirless Transmit video și audio mai ușor!
Contact
Adresa:
Nr. 305 Clădirea HuiLan nr. 273 Huanpu Road Guangzhou China 510620
Categorii
Stiri lunare via e-mail