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
Een paar dagen geleden heb ik wat tijd besteed aan het bestuderen van HTTP live streaming (HLS)-technologie en het implementeren van een HLS-encoder, hlsliveencoder, geschreven in C++. Zijn functie is om de camera en microfoon vast te leggen, real-time H.264-videocodering en aac-audiocodering, en volgens de HLS-protocolspecificatie gesegmenteerd standaard TS-bestand en m3u8-indexbestand te genereren. Via mijn hlsliveencoder en de HTTP-server van derden (zoals nginx) hebben we met succes de live streaming van HTTP gerealiseerd en de test op de iPhone doorstaan. Ik zal hier enkele van de voordelen opschrijven.
1. Analyse van HLS-technologie
HTTP live streaming (HLS) is een streaming media transport protocol gebaseerd op HTTP geïmplementeerd door Apple Inc., dat live en on-demand streaming media kan realiseren. Het wordt voornamelijk gebruikt in IOS-systemen om live en on-demand audio- en video-oplossingen te bieden voor IOS-apparaten (zoals iPhone en iPad). HLS on demand is in feite een gemeenschappelijke gesegmenteerde HTTP on demand. Het verschil is dat de segmenten erg klein zijn. Om HLS on demand te realiseren, is het belangrijk om mediabestanden te segmenteren. Op dit moment zijn er veel open source-tools die kunnen worden gebruikt. Ik zal het hier niet bespreken, alleen praten over HLS live-uitzendtechnologie.
Vergeleken met de gebruikelijke live streaming-protocollen, zoals het RTMP-protocol, het RTSP-protocol, het MMS-protocol, enzovoort, is het grootste verschil met HLS-livestreaming dat de live-client geen volledige gegevensstroom krijgt. HLS-protocol slaat de live datastroom op als continue, korte en lange mediabestanden (mpeg-ts-formaat) aan de serverzijde, terwijl de clientzijde deze kleine bestanden continu downloadt en afspeelt, omdat de serverzijde altijd nieuwe kleine bestanden genereert van de nieuwste live data, zodat de client-kant alleen de bestanden hoeft af te spelen die van de server zijn verkregen om de live te realiseren. Te zien is dat HLS in principe live-uitzending realiseert door middel van VOD-technologie. Omdat de gegevens worden verzonden via het HTTP-protocol, hoeft u geen rekening te houden met het probleem van een firewall of proxy en is de tijd voor het segmenteren van bestanden erg kort. De client kan snel de codesnelheid selecteren en schakelen om deze aan te passen aan het afspelen onder verschillende bandbreedteomstandigheden. Vanwege de technische kenmerken van HLS is de vertraging echter altijd groter dan die van een gewoon live streaming-protocol.
Volgens het bovenstaande begrip moeten we, om HTTP live streaming live te bereiken, de volgende sleuteltechnologieën bestuderen en implementeren.
(1) Verzamel de gegevens van videobron en audiobron
(2) De originele gegevens zijn gecodeerd door H264 en AAC
(3) Video- en audiogegevens zijn verpakt als mpeg-ts-pakketten
(4) Strategie voor het genereren van HLS-segmentatie en m3u8-indexbestand
2. HTTP-transportprotocol
Onder hen zijn het eerste en tweede punt genoemd in mijn vorige artikel, en het laatste punt is dat we de bestaande HTTP-server kunnen gebruiken, dus de implementatie van het derde en vierde punt is de sleutel.
(1) Programmakader en uitvoering
Door de bovenstaande analyse zijn de logica en het proces van HLS live-encoder in wezen duidelijk: start respectievelijk de audio- en videocoderingsthread, realiseer de audio- en video-acquisitie via DirectShow (of andere) technologie en roep vervolgens respectievelijk libx264 en libfaac aan voor video en audio codering. Nadat de twee coderingsthreads de audio- en videogegevens in realtime hebben gecodeerd, slaan ze deze op in een segmentbestand in mpeg-ts-indeling volgens de aangepaste partitiestrategie. Wanneer een segmentbestand wordt opgeslagen, wordt het m3u8-indexbestand bijgewerkt. Zoals weergegeven in onderstaande figuur:
In de bovenstaande afbeelding moet hlsliveencoder na ontvangst van de video- en audiogegevens eerst bepalen of de huidige partitie moet eindigen en een nieuwe partitie maken om door te gaan met het continu genereren van de TS-partitie. Opgemerkt moet worden dat de nieuwe fragmentatie moet beginnen vanaf het sleutelframe om te voorkomen dat de speler decodeerfouten maakt. De kerncode is als volgt:
De interface van tsmuxer is ook relatief eenvoudig.
(2) Strategie voor het genereren van HLS-segmenten en m3u8
① Segmentatiestrategie
De segmentatiestrategie van HLS wordt in principe aanbevolen om elke 10 seconden te splitsen. Natuurlijk moet de specifieke tijd worden gemarkeerd volgens de werkelijke lengte van de splitsing
Over het algemeen worden, omwille van cache en andere redenen, de laatste drie fragmentadressen bewaard in het indexbestand en bijgewerkt in de vorm van een "schuifvenster".
② Introductie van m3u8-bestand
M3u8 is het indexbestand van HTTP-livestreaming. M3u8 kan worden beschouwd als. Bestand in M3U-indeling, het verschil is dat het m3u8-bestand UTF-8-tekencodering gebruikt.
Kopieer code
#Extm3u M3U-bestandsheader, moet op de eerste regel worden geplaatst
#Serienummer van het eerste TS-segment van ext-x-media-reeks
#Ext-x-targetduration de maximale duur van elk TS-segment
#Staat ext-x-allow-cache cache toe
#Einde van ext-x-endlist m3u8-bestand
#Extinf extra info, de informatie van split ts, zoals duur, bandbreedte, etc
|
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