Introducere în HTTP Live Streaming: HLS pe ​​Android și altele

Publicat: 2022-03-11

Streamingul video este o parte integrantă a experienței moderne de internet. Este peste tot: pe telefoane mobile, computere desktop, televizoare și chiar articole portabile. Trebuie să funcționeze impecabil pe fiecare dispozitiv și tip de rețea, fie că este vorba despre conexiuni mobile lente, WiFi, în spatele firewall-urilor etc. HTTP Live Streaming (HLS) de la Apple a fost creat exact având în vedere aceste provocări.

Aproape toate dispozitivele moderne sunt dotate cu hardware modern care este suficient de rapid pentru a reda videoclipuri, astfel încât viteza și fiabilitatea rețelei devin cea mai mare problemă. De ce este asta? Până acum câțiva ani, modalitatea canonică de stocare și publicare a videoclipurilor erau protocoale bazate pe UDP, cum ar fi RTP. Acest lucru sa dovedit problematic din multe puncte de vedere, pentru a enumera doar câteva:

  1. Aveți nevoie de un serviciu de server (daemon) pentru a transmite conținut.
  2. Majoritatea firewall-urilor sunt configurate pentru a permite numai porturi standard și tipuri de trafic de rețea, cum ar fi http, e-mail etc.
  3. Dacă audiența dvs. este globală, aveți nevoie de o copie a serviciului daemon de streaming care rulează în toate regiunile majore.

Desigur, puteți crede că toate aceste probleme sunt ușor de rezolvat. Doar stocați fișiere video (de exemplu, fișiere mp4) pe serverul dvs. http și utilizați serviciul dvs. CDN preferat pentru a le servi oriunde în lume.

În cazul în care streaming video Legacy este scurt

Aceasta este departe de a fi cea mai bună soluție din câteva motive, eficiența fiind unul dintre ele. Dacă stocați fișiere video originale la rezoluție maximă, utilizatorii din zonele rurale sau din părți ale lumii cu conectivitate slabă vor avea dificultăți să se bucure de ele. Playerele lor video se vor lupta să descarce suficiente date pentru a le reda în timpul rulării.

Prin urmare, aveți nevoie de o versiune specială a fișierului, astfel încât cantitatea de videoclip descărcat să fie aproximativ aceeași cu cea care poate fi redată. De exemplu, dacă rezoluția și calitatea video sunt astfel încât în ​​cinci secunde să poată descărca încă cinci secunde de videoclip, este optim. Cu toate acestea, dacă durează cinci secunde pentru a descărca un videoclip în valoare de doar trei secunde, playerul se va opri și așteaptă descărcarea următoarei porțiuni din flux.

Pe de altă parte, reducerea în continuare a calității și rezoluției nu ar face decât să degradeze experiența utilizatorului în cazul conexiunilor mai rapide, deoarece ai economisi lățime de bandă în mod inutil. Cu toate acestea, există o a treia cale.

Streaming adaptiv cu rata de biți

Deși ați putea încărca diferite versiuni de videoclipuri pentru diferiți utilizatori, ar trebui să aveți capacitatea de a-și controla jucătorii și de a calcula care este cel mai bun flux pentru conexiunea și dispozitivul lor. Apoi, jucătorul trebuie să comute între ele (de exemplu, când un utilizator trece de la 3G la WiFi). Și chiar și atunci, ce se întâmplă dacă clientul schimbă tipul de rețea? Apoi playerul trebuie să treacă la un alt videoclip, dar trebuie să înceapă redarea nu de la început, ci undeva la mijlocul videoclipului. Deci, cum calculezi intervalul de octeți de solicitat?

Un lucru grozav ar fi dacă playerele video ar putea detecta modificări ale tipului de rețea și ale lățimii de bandă disponibile și apoi să comute transparent între fluxuri diferite (ale aceluiași videoclip pregătit pentru viteze diferite) până când îl găsesc pe cel mai bun.

Exact asta rezolvă fluxul de biți adaptiv.

Notă: Acest tutorial HLS nu va acoperi criptarea, redările sincronizate și IMSC1.

Ce este HLS?

HTTP Live Streaming este un protocol adaptiv de streaming introdus de Apple în 2009. Folosește fișiere m3u8 pentru a descrie fluxurile media și folosește HTTP pentru comunicarea dintre server și client. Este protocolul prestabilit de streaming media pentru toate dispozitivele iOS, dar poate fi folosit pe Android și browsere web.

Ilustrație de copertă HTTP Live Streaming

Elementele de bază ale fluxurilor HLS sunt:

  1. Liste de redare M3U8
  2. Fișiere media pentru diverse fluxuri

Liste de redare M3U8

Să începem prin a răspunde la o întrebare de bază: Ce sunt fișierele M3U8 ?

M3U (sau M3U8) este un format de fișier text simplu creat inițial pentru a organiza colecții de fișiere MP3. Formatul este extins pentru HLS, unde este folosit pentru a defini fluxurile media. În HLS există două tipuri de fișiere m3u8:

  • Lista de redare media: care conține adrese URL ale fișierelor necesare pentru streaming (adică fragmente din videoclipul original care urmează să fie redate).
  • Lista de redare principală: conține adrese URL către liste de redare media care, la rândul lor, conțin variante ale aceluiași videoclip pregătite pentru lățimi de bandă diferite.

O așa-numită adresă URL a fluxului live M3U8 nu este altceva decât adrese URL către fișiere M3U8, cum ar fi: https://s3-us-west-2.amazonaws.com/hls-playground/hls.m3u8.

Exemplu de fișier M3U8 pentru fluxul HLS

Un fișier M3U8 conține o listă de adrese URL sau căi de fișiere locale cu câteva metadate suplimentare. Liniile de metadate încep cu #.

Acest exemplu ilustrează cum arată un fișier M3U8 pentru un flux HLS simplu:

 #EXTM3U #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-ALLOW-CACHE:YES #EXT-X-TARGETDURATION:11 #EXTINF:5.215111, 00000.ts #EXTINF:10.344822, 00001.ts #EXTINF:10.344822, 00002.ts #EXTINF:9.310344, 00003.ts #EXTINF:10.344822, 00004.ts ... #EXT-X-ENDLIST
  • Primele patru rânduri sunt metadate globale (antet) pentru această listă de redare M3U8.
  • EXT-X-VERSION este versiunea formatului M3U8 (trebuie să fie cel puțin 3 dacă vrem să folosim intrări EXTINF ).
  • Eticheta EXT-X-TARGETDURATION conține durata maximă a fiecărei „bucăți” video. De obicei, această valoare este de aproximativ 10 secunde.
  • Restul documentului conține perechi de linii precum:
 #EXTINF:10.344822, 00001.ts

Acesta este un videoclip „bucătă”. Acesta reprezintă fragmentul 00001.ts care are exact 10,344822 secunde. Când un player video client trebuie să înceapă un videoclip dintr-un anumit punct al videoclipului respectiv, poate calcula cu ușurință ce fișier .ts trebuie să solicite prin adunarea duratelor fragmentelor vizualizate anterior. A doua linie poate fi un nume de fișier local sau o adresă URL la acel fișier.

Fișierul M3U8 cu fișierele sale .ts reprezintă cea mai simplă formă a unui flux HLS - o listă de redare media.

Vă rugăm să rețineți că nu orice browser poate reda fluxuri HLS în mod implicit.

Lista de redare master sau fișierul index M3U8

Exemplul anterior M3U8 indică o serie de bucăți .ts . Acestea sunt create din fișierul video original, care este redimensionat codificat și împărțit în bucăți.

Asta înseamnă că încă avem problema subliniată în introducere – cum rămâne cu clienții din rețele foarte lente (sau neobișnuit de rapide)? Sau, clienții din rețele rapide cu ecrane de dimensiuni foarte mici? Nu are sens să transmiteți în flux un fișier la rezoluție maximă dacă nu poate fi afișat în toată splendoarea lui pe noul dvs. telefon strălucitor.

M3U8 în HSL

HLS rezolvă această problemă prin introducerea unui alt „strat” de M3U8. Acest fișier M3U8 nu va conține pointeri către fișiere .ts , dar are indicatori către alte fișiere M3U8 care, la rândul lor, conțin fișiere video pregătite în avans pentru rate de biți și rezoluții specifice.

Iată un exemplu de astfel de fișier M3U8:

 #EXTM3U #EXT-X-STREAM-INF:BANDWIDTH=1296,RESOLUTION=640x360 https://.../640x360_1200.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=264,RESOLUTION=416x234 https://.../416x234_200.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=464,RESOLUTION=480x270 https://.../480x270_400.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=1628,RESOLUTION=960x540 https://.../960x540_1500.m3u8 #EXT-X-STREAM-INF:BANDWIDTH=2628,RESOLUTION=1280x720 https://.../1280x720_2500.m3u8

Playerul video va alege perechi de linii, cum ar fi:

 #EXT-X-STREAM-INF:BANDWIDTH=1296,RESOLUTION=640x360 https://.../640x360_1200.m3u8

Acestea se numesc variante ale aceluiași videoclip pregătite pentru viteze de rețea și rezoluții de ecran diferite. Acest fișier M3U8 specific ( 640x360_1200.m3u8 ) conține fragmentele de fișier video ale videoclipului redimensionate la 640x360 pixeli și pregătite pentru rate de biți de 1296 kbps . Rețineți că rata de biți raportată trebuie să ia în considerare atât fluxurile video, cât și fluxurile audio din videoclip.

Playerul video va începe de obicei redarea de la prima variantă de flux (în exemplul anterior, acesta este 640x360_1200.m3u8). Din acest motiv, trebuie să aveți o grijă deosebită pentru a decide care variantă va fi prima din listă. Ordinea celorlalte variante nu este importantă.

Dacă descărcarea primului fișier .ts durează prea mult (care provoacă „buffering”, adică așteptarea următoarei bucăți), playerul video va trece la un flux cu o rată de biți mai mică. Și, desigur, dacă este încărcat suficient de repede înseamnă că poate trece la o variantă de calitate mai bună, dar numai dacă are sens pentru rezoluția afișajului.

Dacă primul flux din lista de index M3U8 nu este cel mai bun, clientul va avea nevoie de unul sau două cicluri până când se stabilește cu varianta potrivită.

Deci, acum avem trei straturi de HLS:

  1. Fișierul indexați M3U8 (lista de redare principală) care conține indicatoare (URL-uri) către variante.
  2. Variante de fișiere M3U8 (lista de redare media) pentru diferite fluxuri pentru diferite dimensiuni de ecran și viteze de rețea. Acestea conțin indicatori (URL-uri) către fișierele .ts.
  3. Fișiere .ts (bucăți) care sunt fișiere binare cu părți ale videoclipului.

Puteți urmări un exemplu de fișier index M3U8 aici (din nou, depinde de browser/OS).

Uneori, știți dinainte că clientul se află într-o rețea lentă sau rapidă. În acest caz, puteți ajuta clientul să aleagă varianta potrivită furnizând un fișier index M3U8 cu o primă variantă diferită. Există două moduri de a face acest lucru.

  • Primul este să aveți mai multe fișiere index pregătite pentru diferite tipuri de rețea și să pregătiți clientul în avans pentru a-l solicita pe cel potrivit. Clientul va trebui să verifice tipul rețelei și apoi să solicite de exemplu http://.../index_wifi.m3u8 sau http://.../index_mobile.m3u8 .
  • De asemenea, vă puteți asigura că clientul trimite tipul de rețea ca parte a solicitării http (de exemplu, dacă este conectat la o rețea wifi sau mobil 2G/3G/...) și apoi aveți fișierul index M3U8 pregătit dinamic pentru fiecare solicitare. Doar fișierul index M3U8 are nevoie de o versiune dinamică, fluxurile unice (fișierele M3U8 variante) pot fi stocate în continuare ca fișiere statice.

Pregătirea fișierelor video pentru HLS

Există două blocuri importante ale serviciului HTTP Live Streaming de la Apple. Unul este modul în care sunt stocate fișierele video (pentru a fi difuzate ulterior prin HTTP), iar celălalt este fișierul (fișierele) index M3U8 care spune playerului (aplicația client de streaming) de unde să obțină ce fișier video.

Să începem cu fișierele video. Protocolul HLS așteaptă fișierele video stocate în bucăți mai mici de lungime egală, de obicei 10 secunde fiecare. Inițial, acele fișiere trebuiau stocate în fișiere MPEG-2 TS ( .ts ) și codificate în format H.264 cu audio în MP3, HE-AAC sau AC-3.

Video HLS

Aceasta înseamnă că un videoclip de 30 de secunde va fi împărțit în 3 fișiere .ts mai mici, fiecare cu o lungime de aproximativ 10 secunde.

Rețineți că cea mai recentă versiune de HLS permite și fișierele .mp4 fragmentate. Deoarece acesta este încă un lucru nou, iar unele playere video trebuie încă să-l implementeze, exemplele din acest articol vor folosi fișiere .ts .

Cadre cheie

Bucățile trebuie să fie codificate cu un cadru cheie la începutul fiecărui fișier. Fiecare videoclip conține cadre. Cadrele sunt imagini, dar formatele video nu stochează imagini complete, ceea ce ar ocupa prea mult spațiu pe disc. Ele codifică doar diferența față de cadrul precedent. Când săriți la un punct de mijloc al videoclipului, playerul are nevoie de un „punct de pornire” de unde să aplice toate acele diferențe pentru a afișa imaginea inițială și apoi să înceapă redarea videoclipului.

De aceea, bucățile .ts trebuie să aibă un cadru cheie la început. Uneori, jucătorii trebuie să înceapă la mijlocul piesei. Jucătorul poate calcula întotdeauna imaginea curentă adăugând toate „diferențele” de la primul cadru cheie. Dar, dacă începe la 9 secunde de la început, trebuie să calculeze 9 secunde de „diferențe”. Pentru a face acest calcul mai rapid, cel mai bine este să creați cadre cheie la fiecare câteva secunde (cel mai bun cca 3s).

Puncte de pauză HLS

Există situații în care doriți ca mai multe clipuri video redate succesiv. O modalitate de a face acest lucru este să îmbinați fișierele video originale și apoi să creați fluxurile HLS cu acel fișier, dar acest lucru este problematic din mai multe motive. Ce se întâmplă dacă doriți să afișați un anunț înainte sau după videoclip? Poate că nu doriți să faceți asta pentru toți utilizatorii și probabil că doriți reclame diferite pentru diferiți utilizatori. Și, desigur, nu doriți să pregătiți fișierele HLS cu diferite anunțuri în avans.

Pentru a remedia această problemă, există o etichetă #EXT-X-DISCONTINUITY care poate fi folosită în lista de redare m3u8. Această linie, practic, îi spune playerului video să se pregătească în avans pentru faptul că, din acest moment, fișierele .ts pot fi create cu o configurație diferită (de exemplu, rezoluția se poate modifica). Jucătorul va trebui să recalculeze totul și, eventual, să treacă la o altă variantă și trebuie să fie pregătit pentru astfel de puncte de „discontinuitate”.

Streaming live cu HLS

Există în esență două tipuri de „streaming video”. Unul este Video On Demand ( VOD ) pentru videoclipurile înregistrate în avans și transmise utilizatorului atunci când acesta decide. Și există Live Streaming . Chiar dacă HLS este o abreviere pentru HTTP Live Streaming, totul explicat până acum a fost centrat pe VOD, dar există și o modalitate de a face streaming live cu HLS.

Există câteva modificări în fișierele dvs. M3U8. În primul rând, trebuie să existe o etichetă #EXT-X-MEDIA-SEQUENCE:1 în fișierul varianta M3U8. Apoi, fișierul M3U8 nu trebuie să se termine cu #EXT-X-ENDLIST (care altfel trebuie întotdeauna plasat la sfârșit).

În timp ce înregistrați fluxul, veți avea în mod constant fișiere noi .ts . Trebuie să le atașați în lista de redare M3U8 și de fiecare dată când adăugați una nouă, contorul din #EXT-X-MEDIA-SEQUENCE:<counter> trebuie mărit cu 1.

Playerul video va verifica contorul. Dacă a fost modificat față de ultima dată, știe dacă există noi bucăți care trebuie descărcate și redate. Asigurați-vă că fișierul M3U8 este servit cu anteturile fără cache, deoarece clienții vor continua să reîncarce fișierele M3U8 așteptând să fie redate noi bucăți.

VTT

O altă caracteristică interesantă pentru fluxurile HLS este că puteți încorpora fișiere Web Video Text Track (VTT) în ele. Fișierele VTT pot fi utilizate pentru diverse utilizări. De exemplu, pentru un player HLS web puteți specifica instantanee de imagine pentru diferite părți ale videoclipului. Când utilizatorul mută mouse-ul peste zona temporizatorului video (sub playerul video), playerul poate afișa instantanee din acea poziție în videoclip.

O altă utilizare evidentă a fișierelor VTT sunt subtitrările. Fluxul HLS poate specifica mai multe subtitrări pentru mai multe limbi:

 #EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-,NAME="English",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,LANGUAGE="en",CHARACTERISTICS="public.accessibility.transcribes-spoken-dialog, public.accessibility.describes-music-and-sound",URI="subtitles/eng/prog_index.m3u8"

Apoi, theprog_index.m3u8 arată astfel:

 #EXTM3U #EXT-X-TARGETDURATION:30 #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:VOD #EXTINF:30, 0000.webvtt #EXTINF:30, 0001.webvtt ...

VTT real (de exemplu 0000.webvtt ):

 WEBVTT X-TIMESTAMP-MAP=MPEGTS:900000,LOCAL:00:00:00.000 00:00:01.000 --> 00:00:03.000 Subtitle -Unforced- (00:00:01.000) 00:00:03.000 --> 00:00:05.000 <i>...text here... -Unforced- (00:00:03.000)</i> <i>...text here...</i>

Pe lângă fișierele VTT, Apple a anunțat recent că HLS va oferi suport pentru IMSC1, un nou format de subtitrare optimizat pentru livrarea în flux. Cel mai important avantaj al său este că poate fi stilat folosind CSS.

Instrumente HTTP Live Streaming și probleme potențiale

Apple a introdus o serie de instrumente HSL utile, care sunt descrise mai detaliat în ghidul oficial HLS.

  • Pentru fluxurile live, Apple a pregătit un instrument numit mediastreamsegmenter pentru a crea fișiere segment din mers dintr-un flux video în curs.
  • Un alt instrument important este mediastreamvalidator . Acesta va verifica listele dvs. de redare M3U8, va descărca fișierele video și va raporta diverse probleme. De exemplu, când rata de biți raportată nu este aceeași cu cea calculată din fișierele .ts.
  • Desigur, atunci când trebuie să codificați/decodați/mux/demux/chunk/strip/merge/join/... fișiere video/audio, există ffmpeg. Fiți gata să compilați propriile versiuni personalizate de ffmpeg pentru cazuri de utilizare specifice.

Una dintre cele mai frecvente probleme întâlnite în video este sincronizarea audio. Dacă descoperiți că sunetul din unele dintre fluxurile dvs. HLS nu este sincronizat cu videoclipul (adică un actor deschide gura, dar observați că vocea este cu câteva milisecunde mai devreme sau întârzie), este posibil ca fișierul video original să fi fost filmat folosind un framerate variabil. Asigurați-vă că îl convertiți la rata de biți constantă.

Dacă este posibil, este și mai bine să vă asigurați că software-ul dvs. este setat să înregistreze video la un framerate constant.

Exemplu de streaming live HTTP

Am pregătit o aplicație HLS Android care transmite un HLS predefinit folosind playerul ExoPlayer de la Google. Acesta va afișa un videoclip și o listă de „evenimente” HLS dedesubt. Aceste evenimente includ: fiecare fișier .ts descărcat sau de fiecare dată când jucătorul decide să treacă la un flux cu rata de biți mai mare sau mai mică.

Să trecem prin părțile principale ale inițializării vizualizatorului. În primul pas, vom prelua tipul curent de conexiune al dispozitivului și vom folosi acele informații pentru a decide ce fișier m3u8 să recuperăm.

 String m3u8File = "hls.m3u8"; ConnectivityManager connectivity = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = connectivity.getActiveNetworkInfo(); if (activeNetwork != null && activeNetwork.isConnectedOrConnecting()) { int type = activeNetwork.getType(); int subType = activeNetwork.getSubtype(); if (type == ConnectivityManager.TYPE_MOBILE && subType == TelephonyManager.NETWORK_TYPE_GPRS) { m3u8File = "hls_gprs.m3u8"; } } String m3u8URL = "https://s3-us-west-2.amazonaws.com/hls-playground/" + m3u8File;

Rețineți că acest lucru nu este strict necesar. Jucătorul HLS se va adapta întotdeauna la varianta HLS potrivită după câteva bucăți, dar asta înseamnă că în primele 5-20 de secunde este posibil ca utilizatorul să nu vizioneze varianta ideală a fluxului.

Amintiți-vă, prima variantă din fișierul m3u8 este cea cu care va începe vizualizatorul. Deoarece suntem pe partea clientului și putem detecta tipul de conexiune, putem încerca cel puțin să evităm comutarea jucătorului inițial între variante, solicitând fișierul m3u8 care este pregătit în prealabil pentru acest tip de conexiune.

În pasul următor, inițializam și pornim playerul nostru HLS:

 Handler mainHandler = new Handler(); DefaultBandwidthMeter bandwidthMeter = new DefaultBandwidthMeter.Builder() .setEventListener(mainHandler, bandwidthMeterEventListener) .build(); TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter); TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory); LoadControl loadControl = new DefaultLoadControl(); SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl);

Apoi pregătim playerul și îl alimentam cu m3u8 potrivit pentru acest tip de conexiune la rețea:

 DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, "example-hls-app"), bandwidthMeter); HlsMediaSource videoSource = new HlsMediaSource(Uri.parse(m3u8URL), dataSourceFactory, 5, mainHandler, eventListener); player.prepare(videoSource);

Și iată rezultatul:

Exemplu de streaming HLS în Android

Compatibilitate cu browserul HLS, dezvoltări viitoare

Există o cerință de la Apple pentru aplicațiile de streaming video pe iOS că trebuie să utilizeze HLS dacă videoclipurile sunt mai lungi de 10 minute sau mai mari de 5 MB. Aceasta în sine este o garanție că HLS este aici pentru a rămâne. Au existat unele îngrijorări legate de HLS și MPEG-DASH și care dintre ele va fi câștigătorul în arena browserelor web. HLS nu este implementat în toate browserele moderne (probabil ați observat asta dacă ați dat clic pe exemplele anterioare de url m3u8). Pe Android, de exemplu, în versiunile mai mici de 4.0 nu va funcționa deloc. De la 4.1 la 4.4 funcționează doar parțial (de exemplu, audio lipsește, sau video lipsește, dar audio funcționează).

Dar această „bătălie” a devenit puțin mai simplă recent. Apple a anunțat că noul protocol HLS va permite fișiere mp4 fragmentate ( fMP4 ). Anterior, dacă doreați să aveți atât suport HLS, cât și MPEG-DASH, trebuia să vă codificați videoclipurile de două ori. Acum, veți putea reutiliza aceleași fișiere video și reambalați numai fișierele de metadate ( .m3u8 pentru HLS și .mpd pentru MPEG-DASH).

Un alt anunț recent este suportul pentru High Efficiency Video Codec (HEVC). Dacă este utilizat, trebuie să fie împachetat în fișiere mp4 fragmentate. Și asta înseamnă probabil că viitorul HLS este fMP4 .

Situația actuală din lumea browserelor este că doar unele implementări ale browserului etichetei <video> vor reda HLS din cutie. Dar există soluții open-source și comerciale care oferă compatibilitate cu HLS. Cele mai multe dintre ele oferă HLS având o rezervă Flash, dar există câteva implementări complet scrise în JavaScript.

Încheierea

Acest articol se concentrează în mod special pe HTTP Live Streaming, dar conceptual poate fi citit și ca o explicație a modului în care funcționează Adaptive Bitrate Streaming (ABS). În concluzie, putem spune că HLS este o tehnologie care rezolvă numeroase probleme importante în fluxul video:

  • Simplifică stocarea fișierelor video
  • CDN
  • Jucătorii clienți care gestionează diferite lățimi de bandă ale clienților și comută între fluxuri
  • Subtitrări, criptare, redări sincronizate și alte funcții care nu sunt acoperite în acest articol

Indiferent dacă ajungeți să utilizați HLS sau MPEG-DASH, ambele protocoale ar trebui să ofere funcționalități similare și, odată cu introducerea fragmentului mp4 (fMP4) în HLS, puteți utiliza aceleași fișiere video. Aceasta înseamnă că, în majoritatea cazurilor, va trebui să înțelegeți elementele de bază ale ambelor protocoale. Din fericire, par să se miște în aceeași direcție, ceea ce ar trebui să le facă mai ușor de stăpânit.