Biografier Kjennetegn Analyse

Protocol rtmp port 1935. Online kringkasting via Nginx-RTMP: flere ferdige oppskrifter

Live videostreaming er en virkelig stor ting. Hva kan være enklere enn å kjøre en direktestrømapp på smarttelefonen din umiddelbart? Den vil direkte kringkaste deg eller en begivenhet som finner sted rundt deg... Og mens du strømmer en video, ser vennene dine på den fra sine mobile enheter. Og alt du trenger for å få det til er kameraet og en innebygd mikrofon på smarttelefonen din... Er ikke dette gøy?

Livestreaming har introdusert en annen måte for brukere å få kontakt med vennene sine og for merkevarer å engasjere og nå ut til kundene sine.

Men hvordan kan bedriften eller oppstarten din enkelt implementere live streaming for Android uten å dedikere massevis av ressurser og timer med utvikleres arbeid for å gjøre det? Hvilken teknologi står bak direktesending og gjør det virkelig?

La oss grave inn i emnet for å finne omfattende svar på disse spørsmålene, og også lære mer om bruksklare løsninger som forenkler og fremskynder prosessen med å legge til en direktevideostrømmefunksjon i appen din.

Hva kjennetegner live streaming

I motsetning til formatet for video on demand som forutsetter at en bruker kan velge og se videoer når som helst, er videoer med direktesending knyttet til et bestemt tidspunkt og vises mens de blir tatt opp.

Og her er hvordan direktestrømmingsprosessen ser ut. Video og lyd overføres begge via meldinger fra videospilleren og medieserverutveksling. Videospilleren kobles til medieserveren først. Serveren overfører en del av videoen til spilleren. Dette videofragmentet tilsvarer gjeldende spilletid. En buffer på flere sekunder sikrer videoavspilling uten forsinkelser eller avbrudd. Denne prosessen gjentas hele tiden hele tiden nettsendingen varer.

Men live streaming overfører aldri mediefiler som en helhet (og sparer dermed båndbredde). I stedet er det aktivert gjennom medieservere som er ansvarlige for overføring og strømming av digital video, lyd og data. Direktestrømming gir beskyttelse til kildevideofiler fordi de ikke kan kopieres til en seers datamaskin. Ved hjelp av tilleggsprogramvare støtter live streaming også live chatting og spørsmål og svar.

Det finnes ikke bare ett enkelt format for å overføre mediedata. I stedet kan du velge den som passer dine tekniske behov best.

Hvilke videostrømmeteknologier finnes?

Det er flere måter å aktivere direktesending i appen din. Vi gir en kort oversikt over de eksisterende teknologiene nedenfor. På denne måten vil du kunne skille nøkkelfunksjonene deres og typen innhold de er best laget for å levere:

  • RTMP-protokoll

Real-Time Messaging Protocol (eller bare RTMP) ble utviklet for høyytelsesoverføring av video- og lydstrømmer og sanntidsdatameldinger over nettet. Sanntidsstrømming aktiveres ved å etablere en toveisforbindelse mellom Flash-serveren og Flash-spilleren.

Adobe Flash Player er den vanligste RTMP-klienten som støtter video- og lydavspilling. Den er for tiden tilgjengelig som en åpen kildekode-spesifikasjon for utvikling av produkter og teknologi som leverer videostrømmer i formatene AMF, SWF, FLV og F4V (kompatibel med Adobe Flash Player-formater) og lyd i AAC og MP3.

  • HTTP-baserte strømmeprotokoller (HLS og HDS)

HLS-formatet er basert på MPEG2-TS og gjelder strømming til iOS-enheter. Det er ikke en del av HTML5. HLS kombinerer flere strømmer med metadatainformasjonen og bytter enkelt mellom ulike mediedata.

HDS bruker Adobes format for videoer og leverer fragmenter av MPEG-4-filer. MPEG-formatet tillater lagring av metadata og lyd- og videostrømmer på forskjellige steder. HTTP Dynamic Streaming er en praktisk teknologi for store mediebiblioteker. Det bidrar til å redusere båndbredden, sparer batterilevetid og gir en bedre brukeropplevelse sammenlignet med HLS.

  • Silverlight-strømmeprotokoll

Dette videostreamingformatet brukes for rike Internett-apper som Adobe Flash og for å kjøre filmer. Til tross for at Microsoft Silverlight ikke lenger fungerer i Chrome-nettleseren, er den tilgjengelig i Internet Explorer og Mozilla Firefox.

  • MPEG-DASH

MPEG-DASH gir høykvalitets live og on-demand videostreaming for media som kommer fra HTTP-servere. Formatet gjør det mulig å legge til annonser mellom videosegmenter for begge typer strømming. Medieinnhold krypteres én gang og leveres til en klientdatamaskin ved hjelp av forskjellige DRM-opplegg (Digital Rights Management).

  • progressiv nedlasting av streaming

Med progressiv nedlasting overføres medieinnhold fra en server til en klientdatamaskin via HTTP-protokollen. Det krever ingen strømmeserver for filhosting eller nedlasting av en mediefil for å se den. Progressiv nedlasting muliggjør videoavspilling før en fullstendig videonedlasting.

Fremveksten av 4K-video, høye brukerforventninger til kvalitetsstandarder og jevn opplevelse, utvikling av nye effektive plattformer og raskere Internett-tilkobling gjør kravene til videostreamingformater strengere. Uavhengig av forskjellige tilgjengelige teknologier, vil vi fokusere på RTMP som en av de mest utbredte og favorittstrømmeprotokollene blant utviklere.

Så, hva er RTMP-protokollen og hvorfor den er så bra

Real-Time Messaging Protocol er laget av Macromedia (for tiden Adobe), og sikrer adaptiv bitrate-streaming (ABS). Når båndbredden endres, justeres videokvaliteten automatisk til den. RTMP er basert på Transmission Control Protocol (TCP) som prioriterer vedlikehold av stabil tilkobling og lav latens. Når det gjelder typen innhold, tillater RTMP overføring av både forhåndsinnspilte og live mediedata og tekstinformasjon.

Dessuten kan RTMP ikke bare brukes til mobilstrømming. RTMP-serveren kan sende mediedata både til webapplikasjoner så vel som til mobile enheter.

Det blir oftest berømmet for følgende fordeler det gir:

  • Den er spesifikt optimalisert for live streaming

Den største fordelen som RTMP gir er optimalisering av video- og lyddataoverføring. For streaming bruker den den eksklusive 1935-porten som er egnet for overføring av innhold med lav latens, som er avgjørende for live-streaming og ikke krever buffering.

  • Det er en moden teknologi

RTMP har blitt brukt til live streaming i mer enn 10 år. For en utvikler er det en enkel oppgave å sette opp RTMP Server. For en bruker er videostrømming aktivert i forskjellige formater samtidig. Sikkerhetsfunksjoner som spillerverifisering brukes også.

  • Du kan se hvilken som helst del av videoen som sendes

Alle RTMP-servere tillater opptak av innkommende mediestrømmer og gir muligheten til å vise videoer fra begynnelsen. En bruker kan hoppe over deler av videoen til det nåværende øyeblikket i sendingen. Denne funksjonen er spesielt nyttig for lange videoer (mer enn 10 minutter), slik at du enkelt kan bytte til hvilken som helst del av den.

  • Det er den mest populære sanntidsstrømmeprotokollen

RTMP er en plattformuavhengig protokoll som ikke krever maskinvareavhengigheter og er kompatibel med Windows, Mac, Linux, Android, iOS og Windows mobil. Det er også mye brukt i spillenheter, som PlayStation, Xbox One og PS Vita.

Hvordan RTMP fungerer

Med enkle ord består RTMP-streaming av følgende tre enheter:

  • En klient som lager en mediestrøm og kringkaster med RTMP-protokoll til en server. Som klient-"utgivere" kan du bruke mange apper på forskjellige plattformer, for eksempel FFMPEG-baserte spillere, VLC Player, YouTube-klienter og AVLib-baserte løsninger.
  • En server som håndterer en innkommende strøm og utfører behandling og opptak etter behov. Serveren leverer også sendinger til andre klienter. Blant servere vil de beste alternativene være Wowza Media Server, Flussonic Media Server og Simple RTMP Server.
  • Seere representerer enhver klient som kan se publiserte strømmer. For å vise slike mediestrømmer kan du bruke hvilken som helst spiller som støtter RTMP-protokollen. Den gode nyheten er at nesten alle for tiden brukte spillere for alle eksisterende plattformer støtter RTMP-strømmer. Du kan velge Flash Player, VLC eller Media Player Classic.

De mest komplekse og ressurskrevende er kringkastingsapper. "Kringkastingsflyt" inkluderer mediebehandling, koding og videre strømming over RTMP-protokollen til en server. Det avhenger betydelig av en plattform og maskinvare og krever mye støtteressurser.

For å overføre så mye data som mulig med RTMP-protokollen deles video og lyd opp i fragmenter av forskjellige størrelser. Standardstørrelsene er 64 byte for lyd og 128 byte for video. Størrelser på videodeler bestemmes av interaksjonsformatet mellom en bruker og en server.

Fragmenter av media blir deretter sammenflettet og multiplekset over en enkelt tilkobling mens de korrelerer med en kanals båndbredde og ventetid. Strømmen som kommer fra kringkasteren til serveren består av små datablokker som inkluderer forskjellige typer data (dvs. video, lydtjeneste osv.). RTMP-streaming kan overføre flere forskjellige datablokker samtidig, og dermed innkapsle både video og lyd og muliggjøre eksterne prosedyreanrop.

Når klienten åpner strømmen i RTMP player, sendes en forespørsel til RTMP Server. En økt initialiseres og tjenestedatautveksling skjer. Når klientens RTMP-spiller mottar den nødvendige delen av tjenestedatapakkene om den pågående strømmen, begynner den å dekode, bufre og vise RTMP-mediestrøm.

Med RTMP kreves det ikke at media lagres i noen midlertidig lagring. Den fortsetter å strømme direkte mellom klienter og servere. Hvis båndbreddekapasiteten tillater det, sendes den samme strømmen til en rekke klienter som sender forespørsler. Strømmekapasiteten forbedres dersom flere medieservere settes inn i et nettverk. Strømmeprosessen fortsetter til enten serveren eller spilleren fullfører økten.

Hvordan kan du bruke RTMP til å streame video i Android-appen din?

Du kan se RTMP-strømming på hvilken som helst plattform ved hjelp av enhver spiller som støtter RTMP-protokoll. For Android er de mest populære tredjepartsspillerne MX-, VLC- og BS-spillere, samt alle andre spillere som støtter FFMPEG. For å se RTMP fra innsiden av applikasjonen, må en utvikler integrere et hvilket som helst spillerbibliotek som kan lese RTMP-strømmer. Dette er ijkPlayer og VLC SDK-er.

Onix-teamet har gitt sitt teknologiske bidrag til å finne en enkel og vakker løsning for videostreaming og har laget AVLib , Onix eget eksterne bibliotek for Android RTMP-streaming.

La oss se hvordan det fungerer med direktesendingen for Android-apper og hvordan ideen oppsto.

Hvordan AVLib løser det grunnleggende problemet for Android RTMP-streaming

https://rtmplib-android.com/

Android-teamet vårt av utviklere har kommet til ideen om AVLib nesten ved et uhell, men med et flott resultat og effekt. Mens de jobbet med oppgaven med å legge til en funksjon for å kringkaste video og lyd for Android-enheter til RTMP-servere, møtte de et alvorlig problem. Kundens krav sa at appen skulle kunne streame video- og lyddata med maksimal kapasitet gjennom et Android-kamera. Det var også nødvendig å aktivere støtte for Android 4.0 som minimumsversjon, for brukere med eldre mobile enheter kunne bruke den, og ha en rekke praktiske brukervennlighetsinnstillinger for en bruker.

Onix-teamet har utført en dyp forskning og sammenligning av eksisterende både kommersielle og åpen kildekode-streamingbiblioteker. Men uten tilfredsstillende resultat. Det viste seg at det ikke fantes en lignende løsning i markedet som kunne dekke våre tekniske behov på en fullstendig måte. Teammedlemmene kom raskt til en beslutning om å lage sitt eget eksterne bibliotek som kunne støtte RTMP-streaming for Android. Og fordi det er et stort antall Android-enheter og OS-versjoner som for tiden er i bruk, ble dette biblioteket bygget for å støtte strømmebehovene til alle nåværende Android-brukere.

Men det gir aldri mening å bruke tid på å lage et engangsverktøy som løser en bestemt oppgave strengt tatt i nødvendig grad. Hva om en lignende situasjon gjentar seg? Hvorfor ikke bruke det beste av teknologien har å tilby og bygge et godt testet programvareprodukt?

Vi hadde til hensikt å utvikle en elegant, fleksibel og enkel løsning, så ethvert annet tredjeparts Android-team eller en utvikler som var på utkikk etter et RTMP-bibliotek kunne enkelt integrere det i en app uten å måtte finne opp hjulet på nytt. Og vi klarte det! AVLib kombinerer alle funksjonene vi forventet og løser på en omfattende måte den grunnleggende oppgaven til videosendingen.

Hvordan AVLib ble utviklet og hvorfor det er et pålitelig RTMP-bibliotek

AVLib er et RTMP-bibliotek som vi er virkelig stolte av. Det er et programvareprodukt som løser en kundes krav til live streaming uansett kompleksitetsnivå. Det er et verktøy som er klart til bruk for Android Studio som er integrert i en mobilapp med en gang.

AVLib representerer en praktisk og stabil løsning som er basert på følgende prinsipper:

  • En enkel integrasjon med appen

For en Android-utvikler vil det ta omtrent en time å fullføre prosess med integrering av AVLib og legg til en live streaming-funksjon i en app.

  • maks kapasitet

For å implementere RTMP-biblioteket og gi det et høykapasitetspotensial, valgte teamet vårt programmeringsspråket C. Hver enkelt funksjon inkludert i AVLib, fra transportørlogikken, koding, arbeid med RTMP og frem til prosessering, ble bygget ved hjelp av ren C.

  • Brukergrensesnitt spesialbygd bibliotek

AVLib er fleksibel og kan enkelt justeres til kundenes behov i UI-design (dvs. knapper, tekst) og videoinnstillinger (dvs. rammeoppløsning, lyd, kodekkvalitet, bithastigheter).

  • Støtte for alle eksisterende typer Android-enheter

Dette RTMP-biblioteket kommer som én .aar-fil uten avhengigheter. AVLib ble testet for å sikre at den er kompatibel med forskjellige Android-enheter og støtter Android OS versjon 4.0 og høyere.

Du kan finne flere detaljer om AVLibs funksjoner.

Utviklingsprosessen til AVLib var virkelig full av utfordringer og krevde tanke og innsats fra Android-teamet vårt.

  • Streame fra actionkameraer? Ja!

En av de særegne egenskapene til AVLib er dens evne til å streame video og lyd fra actionkameraer på farten. For å aktivere denne funksjonen, må du jobbe samtidig med to nettverksgrensesnitt på siden av modulen i C. Oppgaven ble fullført, men krevde grundig research av kildekoden til Android OS og kontinuerlig feilsøking.

  • Bygge kringkastingslivssyklusen

En annen betydelig utfordring vi møtte i utviklingsfasen var å muliggjøre jevnt arbeid med kameraet og behandling av livssyklusen på forskjellige enheter. Det var ganske tidkrevende og krevde mye granskingsarbeid.

Opprinnelig ble RTMP (Real Time Messaging Protocol) laget av Adobe Systems for overføring av lyd- og videostrømmer, tekstmeldinger og andre data over nettet. Hovedprinsippet for arbeidet ligger i å initiere interaksjon mellom en server og brukerens Flash Player. RTMP er basert på TCP, noe som betyr at dens høye prioritet ligger i å opprettholde stabil forbindelse og gi interaksjon med lav latens. For å kringkaste jevne strømmer og for å overføre så mye data som mulig deler RTMP-serveren informasjon i fragmenter. Deretter defineres fragmentstørrelsen på grunn av formatet for interaksjon mellom en bruker og en server.

Det som er mer interessant med RTMP er at det involverer forskjellige virtuelle kanaler, som overfører datapakker i løpet av en medieøkt. Disse kanalene kan inkludere: en kanal for RPC-forespørsler og deres resultater, en for kontrollmeldinger, kanaler for lyd- og videostrømming. Dessuten kan de operere samtidig uten å forårsake tekniske problemer for hverandre.

RTMP vs RTSP

Når det gjelder dataoverføring, er det en annen velkjent protokoll kalt RTSP. Så la oss ta en titt på forskjellene mellom RTMP- og RTSP-protokoller.

Hovedformålet med RTSP (Real Time Streaming Protocol) er å opprettholde aktivitetene til strømmeservere. Videre setter denne protokollen opp en interaksjon mellom en klient og en server. RTSP gjør det mulig for sluttbrukere å kontrollere medieøkten ved hjelp av enkle kommandoer som spill av, pause og stopp. Den lar klienter se video fra et hvilket som helst fragment uten å vente på fullstendig nedlasting.

RTMP opprettholder på sin side også de ovennevnte funksjonene. Imidlertid kan RTMP-serveren, ved hjelp av RTMP-protokollen, overvåke hver handling som utføres av en klient fra det tidspunktet han eller hun starter økten til økten er stengt. På en slik måte gjør det rapporter innenfor RTMP mer presise og gir et fullstendig bilde av brukerens aktivitet under en bestemt medieøkt. På samme måte er RTMP, RTSP i stand til live streaming også. Streaming av dataoverføring er imidlertid ikke en hovedoppgave for RTSP, det er derfor den trenger noen tilleggsprotokoller for dette formålet.

Hvordan det fungerer

Prinsippet for RTMP-arbeid er enkelt. For å starte RTMP-strøm, er det nok å etablere interaksjon mellom RTMP-server og klient RTMP-spiller. Når denne kommunikasjonen er satt opp, begynner serveren å overføre media som en konstant flyt av byte. Denne prosessen fortsetter til enten serveren eller spilleren fullfører økten.

Det som er bra er at RTMP-protokollen er veldig fleksibel og å levere lyd-, video- og tekstinformasjon i ulike formater hører med til dens evner. RTMP-protokollen muliggjør for eksempel videostreaming i MP4- og FLV-formater, lydstreaming – i MP3 og AAC. Dessuten, takket være denne protokollen, sender RTMP-server media til webapplikasjoner så vel som til mobile enheter. For dette formålet må en bruker ha Flash Player installert i en nettleser eller på en mobilenhet tilsvarende. Deretter vil swf-filen, som inneholder all medieinformasjon om strømmen, spilles av Flash Player. En av de største fordelene med RTMP-protokollen er imidlertid at den kan brukes til direktesending og streaming på forespørsel. La oss ta en titt på hver av disse strømmeprosessene.

live streaming

Live videostreaming tilhører nøkkelfunksjonene i RTMP-protokollen. Med dens hjelp kan du kringkaste videoen din live under innspillingsprosessen. Hovedsakelig brukes direktesending til sportsbegivenheter, show, konserter etc. I dette tilfellet er RTMP-protokollen bokstavelig talt uerstattelig. Den har lav forsinkelse fra sanntid i streaming, sammenlignet med HTTP-protokollen og forsinkelsen på mer enn ti sekunder, noe som ikke er passende for profesjonell live streaming.

La oss se på enda et levende eksempel på RTMP eksepsjonell funksjonalitet for live streaming. For eksempel har populære IP-kameraer som støtter RTMP-protokollen innebygde høyttalere, slik at du ikke bare kan se videoen live, men også være involvert i prosessen med kringkasting og uttrykke din mening til streamerne.

Streaming på forespørsel

On demand-streaming lar brukere velge når de skal se valgt medieinnhold, noe som er mer praktisk for dem i stedet for å observere dette innholdet på tidspunktet for sendingen. Som regel brukes video on demand (VOD) av flere grunner: fordi den spiller jevnt selv med lav Internett-tilkoblingshastighet, når antallet seere på nettet ikke er betydelig, av hensyn til HD-kvaliteten. Med RTMP-protokollen er selv VOD mer effektiv. Først og fremst gir den støtte for multicast. Hvis du vil ha én strøm inne i arbeidsnettverket ditt og gi den til flere brukere, trenger du ikke opprette separate tilkoblinger for hver bruker med RTMP. Andre protokoller som HTTP eller CDN har ikke denne funksjonen. RTMP gjør det også mulig for brukere å koble til videostrømmen på nytt i tilfelle tilkoblingsproblemer. Under problemer med tilkoblingen spilles videoen av fra buffer og når en bruker kobler til igjen begynner bufferen å fylles og på en slik måte unngår hyppige pauser i videostrømmen.

RTMP-implementeringer

Åpenbart gjør all denne informasjonen deg nysgjerrig på hvordan du implementerer RTMP. Dette er en kryssplattformprotokoll og den fungerer på Windows, Mac, Linux, Android, Windows Mobile, iOS. Har du konsoll og liker å spille spill? Du kan enkelt bruke RTMP-tjenester for enheter som Xbox One, PlayStation og PS Vita.

På grunn av mangfoldet av plattformer som er egnet for RTMP-protokollen, er det mange alternativer for implementeringen. De kan variere fra kommandolinjeimplementering til fullverdig åpen kildekodeimplementering.

kommandolinjeimplementering

RTMPDump-verktøyet brukes for kommandolinjeimplementering, da det perfekt takler opptak av RTMP-strømmer, direktesendinger og video on demand. Dessuten er RTMPDump et åpen kildekodeverktøy som kan brukes på Linux, Android, Mac OS X og Microsoft. Dette verktøyet er veldig populært på grunn av sin lille størrelse og muligheten til å dekryptere RTMPE, som er kryptert RTMP, og RTMPS - sikker RTMP.

RTMPDump-pakken har tre programmer: rtmpdump, rtmpsrv og rtmpsuck. Hvert av disse programmene utfører spesielle funksjoner. For eksempel brukes rtmpdump for å etablere en tilkobling til RTMP-servere og fange opp selve strømmen; rtmpsuck kan også fange opp strømmen, eller det kan hjelpe til med å samle nøkkelparametere for rtmpdump. Hovedfunksjonen til rtmpsrv er å holde styr på tilkoblinger og strømmer.

Full gjennomføring

Hvis du er mer interessert i full implementering, trenger du disse tre delene av programvaren: live videokoder, mediastreamingserver og videoklientapplikasjon. Du vet ikke hvilken live video-koder du skal installere? Deretter kan du velge mellom Flash Media Live Encoder, FFmpeg, WireCast, Wowza Transcoder, Nimble Streamer Transcoder. Vær imidlertid oppmerksom på at den mest populære er Flash Media Live Encoder, som er tilgjengelig for gratis nedlasting på Adobes nettsted.

Når det gjelder videoklientapplikasjoner, er Adobe Flash Player det mest tilrådelige alternativet. Det er en gratis RTMP-spiller og fungerer som en plug-in fra en nettleser eller til og med mobilenhet. Flash Player passer for Windows, OS X, Chrome OS og Linux. Alternative alternativer er Gnash og VLC mediaspiller. Begge er åpen kildekode mediespillere. Gnash har alle muligheter til å erstatte Flash Player i RTMP-streaming på Linux. VLC-mediespilleren er på sin side ikke universell, siden den bare delvis kan opprettholde RTMP-strømmer.

RTMP-servere som Adobe Flash Media Server, Wowza Streaming Engine, Flussonic Media Server hevdes å være veldig gode. Du kan imidlertid installere gratis RTMP-server som Nginx med RTMP-modul eller Red5, som også er en åpen kildekode RTMP-server på Java.

Hvordan takle de vanligste problemene med RTMP-protokollen

RTMP-protokollen, til tross for alle dens åpenbare fordeler, har også noen ulemper. På grunn av det faktum at den skiller seg mye fra HTTP-protokollen, opprettholdes den ikke av HTML5. Videre fungerer RTMP-protokollen dårlig på iDevices og det påvirker kvaliteten på videostreaming. I slike tilfeller er det bedre å bruke HLS-protokollen på Apple-dingser. Prinsippene for HLS- og RTMP-arbeid er ganske like, men i tilfeller med HLS er strømmen delt inn i serier med små HTTP-baserte filer. Opprinnelig ble denne protokollen utviklet for nettleseren Quicktime, iOS og Safari. Nå kan imidlertid HLS-protokollen også brukes på mange andre plattformer. Protokollen takler båndbreddebegrensninger veldig godt og tilpasser videokvaliteten deretter. Med tanke på hastigheten på videolevering, vil ikke HLS være den beste varianten, siden latensen er tjue sekunder.

En annen ulempe med RTMP-protokollen er at den er sårbar for båndbreddeproblemer. Noen ganger kan lav båndbredde forårsake avbrudd i mediestrømming eller til og med strømming starter kanskje ikke hvis Internett-tilkoblingshastigheten ikke er nok. En alternativ måte for kringkasting med begrenset båndbredde er å bruke Dash. Dash er en adaptiv bitrate-strømmeteknologi som gir høykvalitets mediekringkasting. Denne teknikken er i stand til å diagnostisere båndbredden til en bestemt bruker og tilpasse videokvaliteten til tilkoblingshastigheten. I tillegg kan den ikke klare seg uten en koder som koder videoen med mange bithastigheter. Deretter byttes forskjellige kodinger av spilleren på grunn av passende ressurser. Som et resultat oppnås lite buffering og god videoopplevelse. Det er vanskelig å anslå alle fordelene med denne teknikken for streaming av store begivenheter på nasjonalt nivå, for eksempel.

En annen ulempe med RTMP-protokollen ligger i nødvendigheten av å ha installert Flash Player-plugin, uten hvilken RTMP-medieoverføring vil være umulig. Det er også noen problemer når du bruker RTMP for CDN-strømmetjenester.

Har du fortsatt spørsmål angående RTMP-protokollen eller implementeringen av den? og vi vil hjelpe deg med det og demonstrere alle fordelene i praksis.

Nylig kom jeg over en tråd "NGinx-basert live streaming server" om Roman Harutyunyan (@rarutyunyan) sin fantastiske modul for nginx: nginx-rtmp-module . Modulen er veldig enkel å sette opp og lar deg lage en server for publisering av videoopptak og direktesending basert på nginx.

Du kan lese om selve modulen på GitHub-siden, men jeg vil gi noen enkle eksempler bruk. Jeg håper emnet vil hjelpe nykommere i videobransjen (som meg).

Kort om RTMP

RTMP (Real Time Messaging Protocol) er en proprietær kringkastingsprotokoll fra Adobe. Standard transport er TCP (port 1935). Det er også mulig å innkapsle RTMP til HTTP (RTMPT). RTMP-klienten er primært Adobe Flash Player.
Videokodek - H.264, AAC-lydkodek, nellymoser eller MP3-, MP4- eller FLV-beholdere.

Legger ut en video

Med andre ord, video on demand (VOD). Bare legg til nginx.conf i rtmp-delen (server(...)).
applikasjon vod (spill av /var/videoer;)

(Merk: seksjonen trenger selvfølgelig ikke å hete vod)
Nå kan du legge en videofil i riktig format inn i /var/videos-mappen og "mate" kilden til spilleren, for eksempel rtmp://server/vod/file.flv. Så vidt jeg forstår, støtter MP4 naturlig tilbakespoling av video, mens FLV må indekseres separat.

Online oversettelse

Vi kan sende video- og lydstrømmen til serveren ved å bruke samme RTMP-protokoll for publisering. Og kundene våre vil kunne se sendingen. For å gjøre dette må du legge til en seksjon på serveren:

Program live (tillat publisering 1.2.3.4; tillat publisering 192.168.0.0/24; nekte publisering av alle; tillat spill av alt; live på; )

På maskinen vi skal kringkaste fra, må vi først få en liste over DirectShow-enheter. Start - Kjør - cmd, gå til ffmpeg/bin-mappen og kjør:
ffmpeg -list_devices true -f dshow -i dummy

Hvis det er russiske bokstaver i navnet på kilden din, kan de vises som krakozyabry. Ekte administratorer bruker iconv, og enkle gutter som meg vil dekode feilen på Lebedevs side. FFmpeg" må du mate en lesbar inskripsjon.

Nå, når vi kjenner navnet på video- og lydkilden, kan vi fange den med ffmpeg og sende den til serveren.

Webkamera

Som et minimum må du spesifisere videokilden, kodeken og serveren:
ffmpeg -f dshow -i video="Webcam C170" -c:v libx264 -an -f flv "rtmp://1.2.3.4/live/test.flv live=1"

I stedet for "Webcam C170" må du erstatte navnet på kameraet ditt fra listen.
-an-bryteren sier at vi ikke sender en lydstrøm. Hvis en lydstrøm er nødvendig, vil lanseringslinjen se omtrent slik ut:
ffmpeg -f dshow -i video="Webcam C170" -f dshow -i audio="Mikrofon..." -c:v libx264 -c:a libfaac -ar 44100 -ac 2 -f flv "rtmp://1.2 .3.4/live/test.flv live=1"
Her bruker vi libfaac-kodek, samplingsfrekvens 44100, 2 kanaler (stereo). Du kan bruke MP3 i stedet for AAC (libmp3lame codec).

analogt kamera

Hvis kameraet ditt har en analog utgang, kan du koble det til datamaskinen ved hjelp av en opptaksenhet. Jeg bruker et billig PAL-kamera og et Dealextreme USB-opptakskort.

Ffmpeg -r pal -s pal -f dshow -i video="USB2.0 ATV" -c:v libx264 -an -f flv "rtmp://1.2.3.4/live/test.flv live=1"

Skjermfangst

Det er to alternativer her: installer FFSplit eller bruk skjermopptaker med FFmpeg.
FFSplit er enklere å bruke fordi den har en fin GUI, men den fungerer ikke under XP/2003.

Hvis du bestemmer deg for å velge den andre måten, vil FFmpeg-lanseringslinjen se omtrent slik ut:
ffmpeg -f dshow -i video="screen-capture-recorder" -c:v libx264 -an -r 2 -f flv "rtmp://1.2.3.4/live/test.flv live=1"
En lydstrøm kan fanges opp med virtual-audio-capturer.


Eksempel på skjermopptak i appen

relé

Naturligvis kan du videresende en FFmpeg-video- eller lydfil (eller stream) til serveren. I eksemplet nedenfor overfører vi MJPEG-video fra et eksternt kamera:
ffmpeg -f mjpeg -i video="http://iiyudana.miemasu.net/nphMotionJpeg?Resolution=320x240&Quality=Standard" -c:v libx264 -f flv "rtmp://1.2.3.4/live/test.flv live =1"
Men for slike formål er det mer fornuftig å bruke push-alternativet på selve RTMP-serveren for å eliminere mellomkoblingen og trekke strømmen på selve serveren.


En slags webkamera i Japan

Tuning, problemløsning

- forhåndsinnstilt navn H.264 har flere sett med innstillinger for kompresjon/hastighetsforhold: ultrarask, superrask, veldig rask, raskere, rask, middels, sakte, langsommere, veldig sakte. Så hvis du vil forbedre ytelsen, bør du bruke:
- forhåndsinnstilt ultrarask
-crf Antall påvirker bithastigheten og kvaliteten direkte. Det tar verdier fra 0 til 51 - jo flere, jo lavere er kvaliteten på bildet. Standard 23, 18 - tapsfri kvalitet. Bithastigheten dobles omtrent når CRF reduseres med 6.

-r Antall setter inn- og utgangs-FPS. For kilder som du tar et bilde fra, kan du sette -r i stedet -reå bruke innfødt FPS.

-rtbufsize Antall sanntidsbufferstørrelse. Hvis du stadig får bufferoverskridelser og tapte rammer, kan du sette en stor buffer (f.eks. 100 000k), men dette kan øke overføringsforsinkelsen.

-pix_fmt setter fargemodellen. Hvis du har en svart firkant i stedet for et bilde, og lyden fungerer, prøv å sette yuv420p eller yuv422p.

-s breddexhøyde størrelse på input og output bilde.

-g Antall Så vidt jeg forstår er dette maksimalt antall bilder mellom nøkkelbilder. Hvis FPS er veldig lav, kan du sette denne verdien lavere for å redusere forsinkelsen i å starte sendingen.

-keyint_min Antall minimum antall bilder mellom nøkkelbilder.

-vf "crop=w:h:x:y" kutte video

-juster null latens"magisk" alternativ for å redusere sendingsforsinkelse. Jeg har ikke klart å finne ut nøyaktig hva den gjør...

-analysevarighet 0 deaktiverer varighetsanalyse, noe som bidrar til å redusere sendingsforsinkelse

I tillegg til lydalternativene som er diskutert ovenfor, kan det hende du må -acodec kopi i tilfelle lydstrømmen din ikke krever ytterligere konvertering til MP3/AAC.

Eksempel: kringkasting fra et webkamera med lav ventetid uten lyd, tegn gjeldende tid øverst i bildet

Ffmpeg -r 25 -rtbufsize 1000000k -analyzeduration 0 -s vga -copyts -f dshow -i video="Webcam C170" -vf "drawtext=fontfile=verdana.ttf: [e-postbeskyttet]:fontsize=48:box=1: [e-postbeskyttet]:text=%(localtime)" -s 320x240 -c:v libx264 -g 10 -keyint_min 1 -preset UltraFast -tune zerolatency -crf 25 -an -r 3 -f flv "rtmp://1.2.3.4:1935/ live/b.flv live=1"

Spiller på stedet

Alt er enkelt her. Installer en av de populære spillerne på nettstedet ditt, for eksempel