FMUSER Wirless Trasmetti video e audio più facilmente!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> albanese
ar.fmuser.org -> Arabo
hy.fmuser.org -> Armenian
az.fmuser.org -> Azerbaigiano
eu.fmuser.org -> Basco
be.fmuser.org -> bielorusso
bg.fmuser.org -> Bulgaro
ca.fmuser.org -> Catalano
zh-CN.fmuser.org -> Cinese (semplificato)
zh-TW.fmuser.org -> Cinese (Tradizionale)
hr.fmuser.org -> croato
cs.fmuser.org -> ceco
da.fmuser.org -> danese
nl.fmuser.org -> Olandese
et.fmuser.org -> Estone
tl.fmuser.org -> Filippino
fi.fmuser.org -> finlandese
fr.fmuser.org -> Francese
gl.fmuser.org -> Galiziano
ka.fmuser.org -> georgiano
de.fmuser.org -> tedesco
el.fmuser.org -> Greca
ht.fmuser.org -> Creolo haitiano
iw.fmuser.org -> Ebraico
hi.fmuser.org -> Hindi
hu.fmuser.org -> Hungarian
is.fmuser.org -> Islandese
id.fmuser.org -> Indonesiano
ga.fmuser.org -> Irlandese
it.fmuser.org -> Italiano
ja.fmuser.org -> giapponese
ko.fmuser.org -> coreano
lv.fmuser.org -> Lettone
lt.fmuser.org -> Lithuanian
mk.fmuser.org -> Macedone
ms.fmuser.org -> Malese
mt.fmuser.org -> Maltese
no.fmuser.org -> Norwegian
fa.fmuser.org -> persiano
pl.fmuser.org -> polacco
pt.fmuser.org -> portoghese
ro.fmuser.org -> Romeno
ru.fmuser.org -> Russo
sr.fmuser.org -> Serbo
sk.fmuser.org -> slovacco
sl.fmuser.org -> Sloveno
es.fmuser.org -> spagnolo
sw.fmuser.org -> Swahili
sv.fmuser.org -> svedese
th.fmuser.org -> Thai
tr.fmuser.org -> turco
uk.fmuser.org -> Ucraino
ur.fmuser.org -> Urdu
vi.fmuser.org -> Vietnamita
cy.fmuser.org -> Gallese
yi.fmuser.org -> Yiddish
HLS e Http Live Streaming sono protocolli per lo streaming in tempo reale definiti da Apple. HLS è implementato in base al protocollo HTTP. Il contenuto della trasmissione comprende due parti, una è il file di descrizione M3U8 e l'altra è il file multimediale TS.
1. File M3U8
Il file multimediale è descritto in testo, che è composto da una serie di tag.
#EXTM3U
# EXT-X-TARGETDURATION: 5
#EXTINF: 5,
./0.ts
#EXTINF: 5,
./1.ts
# EXTM3U: la prima riga di ogni file M3U8 deve essere questo tag.
# EXT-X-TARGETDURATION: specifica la durata massima del segmento multimediale (secondi). Il periodo di tempo specificato in #EXTINF deve essere inferiore o uguale a questo valore massimo. Questo valore può apparire solo una volta.
#EXTINF: descrive la lunghezza di un singolo file multimediale. Seguono i file multimediali, come ./0.ts
2. file ts
Il file ts è un file di flusso di trasporto, il formato di codifica video principale è h264 / mpeg4 e l'audio è acc / MP3.
Il file ts è diviso in tre livelli: ts layer Transport Stream, pes layer Packet Elemental Stream, es layer Elementary Stream. Il livello es è i dati audio e video e il livello pes è le informazioni di descrizione del frame di dati come un timestamp aggiunto ai dati audio e video. Il livello ts serve per aggiungere le informazioni necessarie per l'identificazione e la trasmissione del flusso di dati nel livello pes
Nota: i dettagli sono i seguenti
(1) livello ts La dimensione del pacchetto ts è fissata a 188 byte e il livello ts è diviso in tre parti: intestazione ts, campo di adattamento e carico utile. L'intestazione ts è fissata a 4 byte; il campo di adattamento può o non può esistere e la sua funzione principale è quella di inserire dati inferiori a 188 byte; il carico utile è dato da pes.
intestazione ts
sync_byte 8b byte di sincronizzazione, fissato a 0x47
transport_error_indicator 1b Indicatore di errore di trasporto, che indica che c'è un byte inutile dopo il campo di adattamento dell'intestazione ts, solitamente 0, questo byte viene contato nella lunghezza del campo di adattamento
payload_unit_start_indicator 1b Indicatore di avvio dell'unità di carico, contrassegnato come 1 all'inizio di un pacchetto dati completo
transport_priority 1b Priorità di trasporto, 0 è bassa priorità, 1 è alta priorità, di solito 0
pid 13b valore pid
transport_scrambling_control 2b Transport scrambling control, 00 significa non crittografato
adaptation_field_control 2b Indica se includere il campo di adattamento, '00' è riservato; "01" significa nessun campo di adattamento, solo il carico utile; "10" significa solo il campo di adattamento, nessun carico utile; "11" significa che l'adattamento è incluso anche Dominio e carico utile.
continuity_counter 4b Contatore crescente, da 0-f, il valore iniziale non prende necessariamente 0, ma deve essere continuo
Il contenuto del livello ts è identificato dal valore PID e il contenuto principale include: tabella PAT, tabella PMT, flusso audio e flusso video. Per analizzare il flusso ts, devi prima trovare la tabella PAT, fintanto che trovi PAT, puoi trovare PMT, quindi puoi trovare i flussi audio e video. Il valore PID della tabella PAT è fissato a 0. La tabella PAT e la tabella PMT devono essere inserite regolarmente nel flusso ts, poiché l'utente può unirsi al flusso ts in qualsiasi momento, questo intervallo è relativamente piccolo, di solito ogni pochi fotogrammi video per aggiungere PAT e PMT. Le tabelle PAT e PMT sono necessarie e possono essere aggiunte anche altre tabelle come SDT (tabella di descrizione del servizio), ma il flusso hls può essere riprodotto fintanto che ci sono PAT e PMT.
Tabella PAT: la sua funzione principale è quella di indicare il valore PID della tabella PMT.
Tabella PMT: la sua funzione principale è quella di specificare il valore PID del flusso audio e video.
Streaming audio / video: trasporta contenuti audio e video.
adattamento
adaptation_field_length 1B lunghezza del campo di adattamento, il numero di byte dietro
flag 1B richiede 0x50 per indicare PCR o 0x40 per non includere PCR
PCR 5B Program Clock Reference, riferimento del clock del programma, utilizzato per recuperare il clock di temporizzazione del sistema STC (System Time Clock) coerente con l'encoder.
stuffing_bytes xB stuffing bytes, il valore è 0xff
La lunghezza dell'area di adattamento deve includere un byte identificato dall'indicatore di errore di trasmissione. pcr è il riferimento del clock del programma, pcr, dts, pts sono tutti valori campionati dello stesso clock di sistema, pcr è incrementale, quindi può essere impostato come valore dts, i dati audio non richiedono pcr. Se non c'è un campo, ipad può giocare, ma vlc non può giocare. Quando si comprime il flusso ts, le tabelle PAT e PMT non hanno un campo di adattamento. Se la lunghezza non è sufficiente, è sufficiente compilare 0xff. Sia il flusso video che il flusso audio devono aggiungere un campo di adattamento, che di solito viene aggiunto al primo pacchetto ts e all'ultimo pacchetto ts di un frame, e il pacchetto ts centrale non viene aggiunto.
Formato PAT
table_id 8b PAT table è fisso su 0x00
section_syntax_indicator 1b è fissato a 1
zero 1b è fissato a 0
riservato 2b è fissato a 11
section_length 12b La lunghezza dei seguenti dati
transport_stream_id 16b ID flusso di trasporto, corretto come 0x0001
riservato 2b è fissato a 11
version_number 5b Numero di versione, fissato a 00000, se PAT cambia, il numero di versione aumenterà di 1
current_next_indicator 1b è fissato a 1, indicando che questa tabella PAT può essere utilizzata, se è 0, attendere la successiva tabella PAT
section_number 8b è fisso su 0x00
last_section_number 8b è fisso su 0x00
Inizia ciclo
numero_programma 16b Quando il numero del programma è 0x0000, significa che questo è NIT, quando il numero del programma è 0x0001, significa che questo è PMT
riservato 3b è fissato a 111
PID 13b Valore PID corrispondente al contenuto del numero di programma
Fine ciclo
CRC32 32b CRC32 codice di controllo dei dati precedenti
Formato PMT
table_id 8b La tabella PMT ha qualsiasi valore, 0x02
section_syntax_indicator 1b è fissato a 1
zero 1b è fissato a 0
riservato 2b è fissato a 11
section_length 12b La lunghezza dei seguenti dati
numero_programma 16b numero del canale, che significa il canale associato al PMT corrente, il valore è 0x0001
riservato 2b è fissato a 11
version_number 5b Numero di versione, fissato a 00000, se PAT cambia, il numero di versione aumenterà di 1
current_next_indicator 1b è fissato a 1
section_number 8b è fisso su 0x00
last_section_number 8b è fisso su 0x00
riservato 3b è fissato a 111
PCR_PID 13b Il PID del pacchetto TS in cui si trova PCR (orologio di riferimento del programma), designato come PID video
riservato 4b è fissato a 1111
program_info_length 12b Informazioni sulla descrizione del programma, designato come 0x000 significa no
Inizia ciclo
stream_type 8b Tipo di stream, il contrassegno è Video o Audio o altri dati, la codifica h.264 corrisponde a 0x1b, la codifica aac corrisponde a 0x0f, la codifica mp3 corrisponde a 0x03
riservato 3b è fissato a 111
elementary_PID 13b PID corrispondente a stream_type
riservato 4b è fissato a 1111
ES_info_length 12b Informazioni sulla descrizione, designate come 0x000 significa no
Fine ciclo
CRC32 32b CRC32 codice di controllo dei dati precedenti
(2) livello pes
Il livello pes aggiunge timestamp e altre informazioni a ciascun fotogramma video / audio. Il pacchetto pes contiene molti contenuti e lasciamo solo quelli più comunemente usati.
codice di inizio pes codice di inizio 3B, fissato a 0x000001
ID stream 1B valore audio (0xc0-0xdf), solitamente 0xc0
Valore video (0xe0-0xef), solitamente 0xe0
lunghezza pacchetto pes 2B La lunghezza dei dati pes dietro, 0 significa lunghezza illimitata,
Solo la lunghezza dei dati video supererà 0xffff
Il flag 1B di solito assume il valore 0x80, il che significa che i dati non sono crittografati, non hanno priorità e viene eseguito il backup dei dati
Flag 1B valore 0x80 significa solo punti, valore 0xc0 significa punti e punti
pes data length 1B La lunghezza dei seguenti dati, il valore è 5 o 10
punto 5B valore 33 bit
dts 5B valore 33 bit
pts è il timestamp del display e dts è il timestamp di decodifica. Entrambi i timestamp sono necessari per i dati video. I punti e i punti dei dati audio sono gli stessi, quindi sono necessari solo punti. Ci sono due timestamp, pts e dts, causati dai frame B. I punti dei fotogrammi I e P sono uguali a dts. Se un video non ha fotogrammi B, i punti saranno sempre gli stessi di dts. Leggi i fotogrammi video in sequenza dal file e la sequenza dei fotogrammi estratti è la stessa della sequenza dts. L'algoritmo dts è relativamente semplice, il valore iniziale + incremento è sufficiente, il calcolo di pts è più complicato e l'offset deve essere aggiunto a dts.
Ci sono solo punti nel peso audio (come dts), i fotogrammi I e P del video devono avere entrambi i timestamp e il fotogramma B del video necessita solo di punti (come dts). Per impacchettare pts e dts, è necessario conoscere il tipo di frame video, ma non possiamo giudicare il tipo di frame attraverso il formato contenitore. È necessario analizzare il contenuto h.264 per ottenere il tipo di frame.
per esempio:
IPBBBP
Ordine di lettura: 1 2 3 4 5 6
ordine dts: 1 2 3 4 5 6
ordine punti: 1 5 3 2 4 6
Algoritmo dts video on demand:
dts = valore iniziale + 90000 / video_frame_rate, il valore iniziale può essere specificato arbitrariamente, ma è meglio non prendere 0, video_frame_rate è il frame rate, ad esempio 23, 30.
pts e dts si basano sulla scala temporale, 1s = 90000 scala temporale, un fotogramma dovrebbe essere 90000 / video_frame_rate scala temporale.
La divisione della scala temporale di un fotogramma per la frequenza di campionamento può essere convertita nella durata di riproduzione di un fotogramma
Algoritmo dts audio su richiesta:
dts = valore iniziale + (90000 * audio_samples_per_frame) / audio_sample_rate, il valore di audio_samples_per_frame è correlato al codec, il valore aac è 1024, il valore mp3 è 1158, audio_sample_rate è la frequenza di campionamento, ad esempio 24000, 41000. AAC decodifica un frame di 1024 campioni per canale, il che significa che la durata di un frame è 1024 / sample_rate secondi. Quindi il timestamp di ogni frame è 0, 1024 / sample_rate, ..., 1024 * n / sample_rate secondi.
I dts e i pt del video live dovrebbero utilizzare direttamente il tempo nel flusso di dati live e non dovrebbero essere calcolati da formule.
(3) es strato
Il livello es si riferisce ai dati audio e video, introduciamo solo video h.264 e audio aac.
video h.264:
Per impacchettare i dati h.264, dobbiamo aggiungere un nalu (Network Abstraction Layer unit) ai dati video. Il nalu include l'intestazione nalu e il tipo nalu. L'intestazione nalu è fissata su 0x00000001 (inizio del frame) o 0x000001 (nel frame). I dati di h.264 sono composti da sezioni e il contenuto delle sezioni include: video, sps, pps, ecc. Il tipo nalu determina il contenuto dei dati h.264 successivi.
F 1b forbidden_zero_bit, h.264 stabilisce che deve essere 0
NRI 2b nal_ref_idc, valore 0 ~ 3, indica l'importanza di questo nalu, I frame, sps, pps di solito prendono 3, P frame di solito 2 e B frame di solito 0
Tipo 5b fare riferimento alla tabella seguente
descrizione nal_unit_type
0 non utilizzato
1 Immagine non IDR, IDR si riferisce al fotogramma chiave
Divisorio a 2 fette A
Divisorio a 3 fette B
|
Inserisci l'email per ricevere una sorpresa
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> albanese
ar.fmuser.org -> Arabo
hy.fmuser.org -> Armenian
az.fmuser.org -> Azerbaigiano
eu.fmuser.org -> Basco
be.fmuser.org -> bielorusso
bg.fmuser.org -> Bulgaro
ca.fmuser.org -> Catalano
zh-CN.fmuser.org -> Cinese (semplificato)
zh-TW.fmuser.org -> Cinese (Tradizionale)
hr.fmuser.org -> croato
cs.fmuser.org -> ceco
da.fmuser.org -> danese
nl.fmuser.org -> Olandese
et.fmuser.org -> Estone
tl.fmuser.org -> Filippino
fi.fmuser.org -> finlandese
fr.fmuser.org -> Francese
gl.fmuser.org -> Galiziano
ka.fmuser.org -> georgiano
de.fmuser.org -> tedesco
el.fmuser.org -> Greca
ht.fmuser.org -> Creolo haitiano
iw.fmuser.org -> Ebraico
hi.fmuser.org -> Hindi
hu.fmuser.org -> Hungarian
is.fmuser.org -> Islandese
id.fmuser.org -> Indonesiano
ga.fmuser.org -> Irlandese
it.fmuser.org -> Italiano
ja.fmuser.org -> giapponese
ko.fmuser.org -> coreano
lv.fmuser.org -> Lettone
lt.fmuser.org -> Lithuanian
mk.fmuser.org -> Macedone
ms.fmuser.org -> Malese
mt.fmuser.org -> Maltese
no.fmuser.org -> Norwegian
fa.fmuser.org -> persiano
pl.fmuser.org -> polacco
pt.fmuser.org -> portoghese
ro.fmuser.org -> Romeno
ru.fmuser.org -> Russo
sr.fmuser.org -> Serbo
sk.fmuser.org -> slovacco
sl.fmuser.org -> Sloveno
es.fmuser.org -> spagnolo
sw.fmuser.org -> Swahili
sv.fmuser.org -> svedese
th.fmuser.org -> Thai
tr.fmuser.org -> turco
uk.fmuser.org -> Ucraino
ur.fmuser.org -> Urdu
vi.fmuser.org -> Vietnamita
cy.fmuser.org -> Gallese
yi.fmuser.org -> Yiddish
FMUSER Wirless Trasmetti video e audio più facilmente!
Contatti
Indirizzo:
No.305 Room HuiLan Building No.273 Huanpu Road Guangzhou Cina 510620
Categorie
Newsletter