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
Kilka dni temu spędziłem trochę czasu na studiowaniu technologii HTTP live streaming (HLS) i implementacji kodera HLS, hlsliveencoder, napisanego w C++. Jego funkcją jest przechwytywanie kamery i mikrofonu, kodowanie wideo H.264 w czasie rzeczywistym i kodowanie audio aac oraz zgodnie ze specyfikacją protokołu HLS generowanie podzielonego na segmenty standardowego pliku TS i pliku indeksu m3u8. Dzięki mojemu hlsliveencoder i serwerowi HTTP innej firmy (takim jak nginx) z powodzeniem zrealizowaliśmy transmisję strumieniową HTTP na żywo i zdaliśmy test na iPhonie. Napiszę tutaj o niektórych korzyściach.
1. Analiza technologii HLS
Przesyłanie strumieniowe HTTP na żywo (HLS) to protokół przesyłania strumieniowego multimediów oparty na protokole HTTP zaimplementowanym przez Apple Inc., który może realizować strumieniowe przesyłanie multimediów na żywo i na żądanie. Jest używany głównie w systemie IOS do dostarczania rozwiązań audio i wideo na żywo i na żądanie dla urządzeń IOS (takich jak iPhone i iPad). HLS na żądanie to w zasadzie wspólny segmentowany protokół HTTP na żądanie. Różnica polega na tym, że jego segmenty są bardzo małe. Kluczem do realizacji HLS na żądanie jest segmentacja plików multimedialnych. Obecnie istnieje wiele narzędzi open source, z których można korzystać. Nie będę tego tutaj omawiał, porozmawiam tylko o technologii transmisji na żywo HLS.
W porównaniu z popularnymi protokołami przesyłania strumieniowego na żywo, takimi jak protokół RTMP, protokół RTSP, protokół MMS itd., największą różnicą w przesyłaniu strumieniowym na żywo HLS jest to, że klient na żywo nie otrzymuje pełnego strumienia danych. Protokół HLS przechowuje strumień danych na żywo w postaci ciągłych, krótkoterminowych i długich plików multimedialnych (format mpeg-ts) po stronie serwera, podczas gdy po stronie klienta stale pobiera i odtwarza te małe pliki, ponieważ po stronie serwera zawsze generuje nowe małe pliki z najnowsze dane na żywo, dzięki czemu po stronie klienta wystarczy odtworzyć pliki uzyskane z serwera, aby zrealizować transmisję na żywo. Widać, że HLS w zasadzie realizuje transmisje na żywo za pomocą technologii VOD. Ponieważ dane przesyłane są protokołem HTTP, nie ma potrzeby rozważania problemu firewalla czy proxy, a czas segmentacji plików jest bardzo krótki. Klient może szybko wybrać i przełączyć szybkość kodowania, aby dostosować się do odtwarzania w różnych warunkach przepustowości. Jednak ze względu na charakterystykę techniczną HLS jego opóźnienie jest zawsze większe niż w przypadku zwykłego protokołu przesyłania strumieniowego na żywo.
Zgodnie z powyższym zrozumieniem, aby uzyskać transmisję na żywo HTTP na żywo, musimy przestudiować i wdrożyć następujące kluczowe technologie.
(1) Zbierz dane źródła wideo i źródła dźwięku
(2) Oryginalne dane są zakodowane przez H264 i AAC
(3) Dane wideo i audio są spakowane jako pakiety mpeg-ts
(4) Strategia generowania segmentacji HLS i plik indeksu m3u8
2. Protokół transportowy HTTP
Wśród nich pierwszy i drugi punkt zostały wymienione w moim poprzednim artykule, a ostatnim punktem jest to, że możemy wykorzystać istniejący serwer HTTP, więc kluczowa jest implementacja punktu trzeciego i czwartego.
(1) Ramy programu i wdrażanie
Dzięki powyższej analizie logika i proces kodera na żywo HLS są zasadniczo jasne: uruchom odpowiednio wątek kodowania audio i wideo, zrealizuj akwizycję audio i wideo za pomocą technologii DirectShow (lub innej), a następnie wywołaj odpowiednio libx264 i libfaac dla wideo i kodowanie dźwięku. Po tym, jak dwa wątki kodujące zakodują dane audio i wideo w czasie rzeczywistym, zapisują je w pliku segmentowym w formacie mpeg-ts zgodnie z dostosowaną strategią partycjonowania. Po zapisaniu pliku segmentu aktualizowany jest plik indeksu m3u8. Jak pokazano na poniższym rysunku:
Na powyższym rysunku, po otrzymaniu danych wideo i audio, hlsliveencoder musi najpierw określić, czy bieżąca partycja powinna się zakończyć, i utworzyć nową partycję, aby kontynuować ciągłe generowanie partycji TS. Należy zauważyć, że nowa fragmentacja powinna rozpocząć się od klatki kluczowej, aby zapobiec niepowodzeniu dekodowania przez odtwarzacz. Podstawowy kod jest następujący:
Interfejs tsmuxer jest również stosunkowo prosty.
(2) Strategia generowania segmentów HLS i m3u8
① Strategia segmentacji
Strategia segmentacji HLS jest zasadniczo zalecana do dzielenia co 10 sekund. Oczywiście konkretny czas powinien być oznaczony zgodnie z rzeczywistą długością splitu
Ogólnie rzecz biorąc, ze względu na pamięć podręczną i inne przyczyny, ostatnie trzy adresy fragmentów są przechowywane w pliku indeksu i aktualizowane w formie „przesuwanego okna”.
② Wprowadzenie pliku m3u8
M3u8 to plik indeksu przesyłania strumieniowego HTTP na żywo. M3u8 można uznać za. Zasadniczo plik w formacie M3U, różnica polega na tym, że plik m3u8 używa kodowania znaków UTF-8.
Skopiuj kod
Nagłówek pliku #Extm3u M3U musi być umieszczony w pierwszym wierszu
#Numer seryjny pierwszego segmentu TS sekwencji ext-x-media
#Ext-x-targetduration maksymalny czas trwania każdego segmentu TS
#Czy ext-x-allow-cache zezwala na pamięć podręczną
#Koniec pliku ext-x-endlist m3u8
#Extinf dodatkowe informacje, informacje o split ts, takie jak czas trwania, przepustowość itp
|
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