FMUSER Wirless Transmituj wideo i audio łatwiejsze!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> albański
ar.fmuser.org -> arabski
hy.fmuser.org -> Armeński
az.fmuser.org -> Azerbejdżański
eu.fmuser.org -> baskijski
be.fmuser.org -> białoruski
bg.fmuser.org -> bułgarski
ca.fmuser.org -> kataloński
zh-CN.fmuser.org -> chiński (uproszczony)
zh-TW.fmuser.org -> chiński (tradycyjny)
hr.fmuser.org -> chorwacki
cs.fmuser.org -> czeski
da.fmuser.org -> duński
nl.fmuser.org -> holenderski
et.fmuser.org -> estoński
tl.fmuser.org -> filipiński
fi.fmuser.org -> fiński
fr.fmuser.org -> francuski
gl.fmuser.org -> galicyjski
ka.fmuser.org -> gruziński
de.fmuser.org -> niemiecki
el.fmuser.org -> grecki
ht.fmuser.org -> kreolski haitański
iw.fmuser.org -> hebrajski
hi.fmuser.org -> hindi
hu.fmuser.org -> węgierski
is.fmuser.org -> islandzki
id.fmuser.org -> indonezyjski
ga.fmuser.org -> irlandzki
it.fmuser.org -> włoski
ja.fmuser.org -> japoński
ko.fmuser.org -> koreański
lv.fmuser.org -> łotewski
lt.fmuser.org -> litewski
mk.fmuser.org -> macedoński
ms.fmuser.org -> malajski
mt.fmuser.org -> maltański
no.fmuser.org -> norweski
fa.fmuser.org -> perski
pl.fmuser.org -> polski
pt.fmuser.org -> portugalski
ro.fmuser.org -> rumuński
ru.fmuser.org -> rosyjski
sr.fmuser.org -> serbski
sk.fmuser.org -> słowacki
sl.fmuser.org -> słoweński
es.fmuser.org -> hiszpański
sw.fmuser.org -> suahili
sv.fmuser.org -> szwedzki
th.fmuser.org -> Tajski
tr.fmuser.org -> turecki
uk.fmuser.org -> ukraiński
ur.fmuser.org -> Urdu
vi.fmuser.org -> wietnamski
cy.fmuser.org -> walijski
yi.fmuser.org -> jidysz
HLS i Http Live Streaming to protokoły do przesyłania strumieniowego w czasie rzeczywistym zdefiniowane przez firmę Apple. HLS jest zaimplementowany w oparciu o protokół HTTP. Treść transmisji obejmuje dwie części, jedną jest plik opisu M3U8, a drugą jest plik multimedialny TS.
1. Plik M3U8
Plik multimedialny jest opisany w tekście, który składa się z serii tagów.
#EXTM3U
# EXT-X-TARGETDURATION: 5
#EXTINF: 5,
./0.ts
#EXTINF: 5,
./1.ts
# EXTM3U: Pierwsza linia każdego pliku M3U8 musi być tym znacznikiem.
# EXT-X-TARGETDURATION: Określ maksymalny czas trwania segmentu nośnika (w sekundach). Długość czasu określona w #EXTINF musi być mniejsza lub równa tej maksymalnej wartości. Ta wartość może pojawić się tylko raz.
#EXTINF: opisz długość pojedynczego pliku multimedialnego. Następują pliki multimedialne, takie jak ./0.ts
2. plik ts
Plik ts jest plikiem strumienia transportowego, głównym formatem kodowania wideo jest h264 / mpeg4, a dźwięk to acc / MP3.
Plik ts jest podzielony na trzy warstwy: warstwa ts Transport Stream, warstwa pes Packet Elemental Stream, es warstwa Elementary Stream. Warstwa es to dane audio i wideo, a warstwa pes to informacje o opisie ramki danych, takie jak znacznik czasu dodany do danych audio i wideo. Warstwa ts ma dodawać niezbędne informacje do identyfikacji i transmisji strumienia danych w warstwie pes
Uwaga: szczegóły są następujące
(1) Warstwa ts Rozmiar pakietu ts jest ustalony na 188 bajtów, a warstwa ts jest podzielona na trzy części: nagłówek ts, pole adaptacyjne i ładunek. Nagłówek ts jest ustalony na 4 bajty; pole adaptacji może istnieć lub nie, a jego główną funkcją jest wypełnienie danych mniejszych niż 188 bajtów; ładunkiem są dane pes.
Nagłówek ts
sync_byte 8b bajt synchronizacji, poprawiony na 0x47
transport_error_indicator 1b Wskaźnik błędu transportu, wskazujący, że po polu adaptacji nagłówka ts znajduje się bezużyteczny bajt, zwykle 0, bajt ten jest liczony w długości pola adapt
payload_unit_start_indicator 1b Wskaźnik uruchomienia jednostki ładunkowej, oznaczony jako 1 na początku całego pakietu danych
transport_priority 1b Priorytet transportu, 0 to niski priorytet, 1 to wysoki priorytet, zwykle 0
pid 13b wartość pid
transport_scrambling_control 2b Kontrola szyfrowania transportu, 00 oznacza nieszyfrowany
adaptation_field_control 2b Czy włączyć pole adaptacji, zarezerwowane jest „00”; „01” oznacza brak pola adaptacji, tylko ładunek użytkowy; „10” oznacza tylko pole adaptacji, bez ładunku; „11” oznacza, że adaptacja jest również uwzględniona. Domena i ładunek.
continuity_counter 4b Zwiększający się licznik, od 0-f, wartość początkowa niekoniecznie przyjmuje 0, ale musi być ciągła
Zawartość warstwy ts jest identyfikowana przez wartość PID, a zawartość główna obejmuje: tablicę PAT, tablicę PMT, strumień audio i strumień wideo. Aby przeanalizować strumień ts, musisz najpierw znaleźć tabelę PAT, o ile znajdziesz PAT, możesz znaleźć PMT, a następnie możesz znaleźć strumienie audio i wideo. Wartość PID tablicy PAT jest ustalona na 0. Tablica PAT i tablica PMT muszą być regularnie wstawiane do strumienia ts, ponieważ użytkownik może dołączyć do strumienia ts w dowolnym momencie, odstęp ten jest stosunkowo mały, zwykle co kilka klatki wideo, aby dodać PAT i PMT. Tabele PAT i PMT są konieczne, a inne tabele, takie jak SDT (tablica opisu usług), można również dodać, ale strumień hls może być odtwarzany, o ile istnieją PAT i PMT.
Tabela PAT: Jego główną funkcją jest wskazanie wartości PID tabeli PMT.
Tabela PMT: Jej główną funkcją jest określenie wartości PID strumienia audio i wideo.
Strumień audio / strumień wideo: noś treści audio i wideo.
adaptacja
adaptation_field_length 1B długość pola adaptacyjnego, liczba bajtów za
flaga 1B przyjmuje 0x50, aby wskazać PCR lub 0x40, aby nie obejmować PCR
PCR 5B Program Clock Reference, odniesienie zegara programowego, używane do przywrócenia systemowego zegara czasowego STC (System Time Clock) zgodnego z koderem.
stuffing_bytes xB bajtów nadziewania, wartość to 0xff
Długość obszaru adaptacji będzie zawierać jeden bajt identyfikowany przez wskaźnik błędu transmisji. pcr to odniesienie zegara programu, pcr, dts, pts to wszystkie próbkowane wartości tego samego zegara systemowego, pcr jest przyrostowe, więc może być ustawione jako wartość dts, dane audio nie wymagają pcr. Jeśli nie ma pola, ipad może grać, ale vlc nie może grać. Podczas pakowania strumienia ts tabele PAT i PMT nie mają pola adaptacyjnego. Jeśli długość nie jest wystarczająca, wpisz 0xff. Zarówno strumień wideo, jak i strumień audio wymagają dodania pola adaptacyjnego, które jest zwykle dodawane do pierwszego pakietu ts i ostatniego pakietu ts ramki, a środkowy pakiet ts nie jest dodawany.
Format PAT
table_id 8b Tablica PAT jest ustalona na 0x00
section_syntax_indicator 1b jest ustalony na 1
zero 1b jest ustalone na 0
zarezerwowany 2b jest ustalony na 11
długość_sekcji 12b Długość następujących danych
transport_stream_id 16b Identyfikator strumienia transportu, naprawiony jako 0x0001
zarezerwowany 2b jest ustalony na 11
numer wersji 5b Numer wersji, ustalony na 00000, jeśli PAT się zmieni, numer wersji wzrośnie o 1
current_next_indicator 1b jest ustalony na 1, wskazując, że ta tabela PAT może być używana, jeśli wynosi 0, poczekaj na następną tablicę PAT
numer_sekcji 8b jest ustalony na 0x00
last_section_number 8b jest ustalona na 0x00
Rozpocznij pętlę
numer_programu 16b Gdy numer programu to 0x0000, oznacza to, że jest to NIT, gdy numer programu to 0x0001, oznacza to, że jest to PMT
zarezerwowany 3b jest ustalony na 111
PID 13b Wartość PID odpowiadająca zawartości numeru programu
Koniec pętli
CRC32 32b Kod kontrolny CRC32 poprzednich danych
Format PMT
table_id 8b Tabela PMT ma dowolną wartość 0x02
section_syntax_indicator 1b jest ustalony na 1
zero 1b jest ustalone na 0
zarezerwowany 2b jest ustalony na 11
długość_sekcji 12b Długość następujących danych
numer_programu 16b numer kanału, co oznacza kanał powiązany z bieżącym PMT, wartość to 0x0001
zarezerwowany 2b jest ustalony na 11
numer wersji 5b Numer wersji, ustalony na 00000, jeśli PAT się zmieni, numer wersji wzrośnie o 1
current_next_indicator 1b jest ustalony na 1
numer_sekcji 8b jest ustalony na 0x00
last_section_number 8b jest ustalona na 0x00
zarezerwowany 3b jest ustalony na 111
PCR_PID 13b PID pakietu TS, w którym znajduje się PCR (zegar odniesienia programu), oznaczony jako PID wideo
zarezerwowany 4b jest ustalony na 1111
program_info_length 12b Informacje o opisie programu oznaczone jako 0x000 oznaczają nie
Rozpocznij pętlę
stream_type 8b Typ strumienia, oznaczenie to Video lub Audio lub inne dane, kodowanie h.264 odpowiada 0x1b, kodowanie aac odpowiada 0x0f, kodowanie mp3 odpowiada 0x03
zarezerwowany 3b jest ustalony na 111
elementary_PID 13b PID odpowiadający stream_type
zarezerwowany 4b jest ustalony na 1111
ES_info_length 12b Opis informacji, oznaczony jako 0x000 oznacza nie
Koniec pętli
CRC32 32b Kod kontrolny CRC32 poprzednich danych
(2) warstwa pes
Warstwa pes dodaje znacznik czasu i inne informacje do każdej ramki wideo / audio. Pakiet pes zawiera dużo treści, a zostawiamy tylko te najczęściej używane.
kod startowy pes Kod startowy 3B, naprawiony na 0x000001
id strumienia 1B wartość audio (0xc0-0xdf), zwykle 0xc0
Wartość wideo (0xe0-0xef), zwykle 0xe0
długość pakietu pes 2B Długość danych pes z tyłu, 0 oznacza nieograniczoną długość,
Tylko długość danych wideo przekroczy 0xffff
Flaga 1B zwykle przyjmuje wartość 0x80, co oznacza, że dane nie są szyfrowane, nie mają priorytetu i są zarchiwizowane
Wartość flagi 1B 0x80 oznacza tylko pts, wartość 0xc0 oznacza pts i dts
pes data length 1B Długość następujących danych, wartość to 5 lub 10
pkt 5B 33-bitowa wartość
dts 5B 33-bitowa wartość
pts to sygnatura czasowa wyświetlania, a dts to znacznik czasu dekodowania. W przypadku danych wideo wymagane są oba znaczniki czasu. PTS i DTS danych audio są takie same, więc potrzebne są tylko pts. Istnieją dwa znaczniki czasu, pts i dts, które są powodowane przez ramki B. Punkty ramek I i P są równe dts. Jeśli wideo nie ma klatek B, pts będzie zawsze takie samo jak dts. Odczytaj klatki wideo sekwencyjnie z pliku, a sekwencja wyodrębnionych klatek jest taka sama jak sekwencja dts. Algorytm dts jest stosunkowo prosty, wystarczy wartość początkowa + przyrost, obliczenia pts są bardziej skomplikowane, a do dts należy dodać offset.
W pes audio są tylko pts (tak samo jak dts), klatki I i P wideo muszą mieć oba znaczniki czasu, a ramka wideo B potrzebuje tylko pts (tak samo jak dts). Aby spakować pts i dts, musisz znać typ klatki wideo, ale nie możemy ocenić typu klatki na podstawie formatu kontenera. Aby uzyskać typ ramki, należy przeanalizować zawartość h.264.
Na przykład:
IPBBBP
Kolejność czytania: 1 2 3 4 5 6
kolejność dts: 1 2 3 4 5 6
kolejność pkt .: 1 5 3 2 4 6
Algorytm dts wideo na żądanie:
dts = wartość początkowa + 90000 / video_frame_rate, wartość początkową można dowolnie określić, ale najlepiej nie przyjmować 0, video_frame_rate to liczba klatek na sekundę, na przykład 23, 30.
pts i dts są oparte na skali czasu, 1s = skala czasu 90000, jedna klatka powinna mieć skalę czasową 90000 / video_frame_rate.
Dzieląc skalę czasu jednej klatki przez częstotliwość próbkowania, można przekształcić w czas trwania odtwarzania jednej klatki
Algorytm audio na żądanie DTS:
dts = wartość początkowa + (90000 * audio_samples_per_frame) / audio_sample_rate, wartość audio_samples_per_frame jest związana z kodekiem, wartość aac to 1024, wartość mp3 to 1158, audio_sample_rate to częstotliwość próbkowania, na przykład 24000, 41000. AAC dekoduje ramkę 1024 próbek na kanał, co oznacza, że czas trwania ramki wynosi 1024 / sample_rate sekund. Więc znacznik czasu każdej klatki to 0, 1024 / sample_rate, ..., 1024 * n / sample_rate sekund.
Dts i pts wideo na żywo powinny bezpośrednio wykorzystywać czas w strumieniu danych na żywo i nie powinny być obliczane za pomocą formuł.
(3) warstwa es
Warstwa es dotyczy danych audio i wideo, wprowadzamy tylko wideo h.264 i audio aac.
wideo h.264:
Aby spakować dane h.264, musimy dodać nalu (jednostkę Network Abstraction Layer) do danych wideo. Nalu zawiera nagłówek nalu i typ nalu. Nagłówek nalu jest ustalony na 0x00000001 (początek ramki) lub 0x000001 (w ramce). Dane h.264 składają się z wycinków, a zawartość wycinków to: wideo, sps, pps itp. Typ nalu określa zawartość kolejnych danych h.264.
F 1b forbidden_zero_bit, h.264 określa, że musi to być 0
NRI 2b nal_ref_idc, wartość 0 ~ 3, wskazuje znaczenie tej ramki nalu, I, sps, pps zwykle przyjmuje 3, ramka P zwykle zajmuje 2, a ramka B zwykle przyjmuje 0
Typ 5b, patrz tabela poniżej
nal_unit_type opis
0 nie używane
1 Obraz inny niż IDR, IDR odnosi się do klatki kluczowej
2 plastry, przegroda A
3 plastry, przegroda B
|
Wpisz e-mail, aby otrzymać niespodziankę
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> Afrikaans
sq.fmuser.org -> albański
ar.fmuser.org -> arabski
hy.fmuser.org -> Armeński
az.fmuser.org -> Azerbejdżański
eu.fmuser.org -> baskijski
be.fmuser.org -> białoruski
bg.fmuser.org -> bułgarski
ca.fmuser.org -> kataloński
zh-CN.fmuser.org -> chiński (uproszczony)
zh-TW.fmuser.org -> chiński (tradycyjny)
hr.fmuser.org -> chorwacki
cs.fmuser.org -> czeski
da.fmuser.org -> duński
nl.fmuser.org -> holenderski
et.fmuser.org -> estoński
tl.fmuser.org -> filipiński
fi.fmuser.org -> fiński
fr.fmuser.org -> francuski
gl.fmuser.org -> galicyjski
ka.fmuser.org -> gruziński
de.fmuser.org -> niemiecki
el.fmuser.org -> grecki
ht.fmuser.org -> kreolski haitański
iw.fmuser.org -> hebrajski
hi.fmuser.org -> hindi
hu.fmuser.org -> węgierski
is.fmuser.org -> islandzki
id.fmuser.org -> indonezyjski
ga.fmuser.org -> irlandzki
it.fmuser.org -> włoski
ja.fmuser.org -> japoński
ko.fmuser.org -> koreański
lv.fmuser.org -> łotewski
lt.fmuser.org -> litewski
mk.fmuser.org -> macedoński
ms.fmuser.org -> malajski
mt.fmuser.org -> maltański
no.fmuser.org -> norweski
fa.fmuser.org -> perski
pl.fmuser.org -> polski
pt.fmuser.org -> portugalski
ro.fmuser.org -> rumuński
ru.fmuser.org -> rosyjski
sr.fmuser.org -> serbski
sk.fmuser.org -> słowacki
sl.fmuser.org -> słoweński
es.fmuser.org -> hiszpański
sw.fmuser.org -> suahili
sv.fmuser.org -> szwedzki
th.fmuser.org -> Tajski
tr.fmuser.org -> turecki
uk.fmuser.org -> ukraiński
ur.fmuser.org -> Urdu
vi.fmuser.org -> wietnamski
cy.fmuser.org -> walijski
yi.fmuser.org -> jidysz
FMUSER Wirless Transmituj wideo i audio łatwiejsze!
Kontakt
Adres:
Nr 305 Pokój HuiLan Budynek nr 273 Huanpu Road Guangzhou Chiny 510620
Kategorie
Newsletter