Bedste måde at administrere videoer i skala på

I dagens verdensvideoer er det blevet en nem måde at forklare enhver idé samt at forstå ethvert emne. Videoer har vist sig at kræve mere forbrugeropmerksomhed end noget andet medium. Folk kan lide at få adgang til videoer overalt og når som helst, og det er en udfordring for nye virksomheder at ikke kun levere kvalitetsindhold, men også give en god seeroplevelse til deres kunder.

Introduktion af vores virksomhed -

Vi er en platform for 3 lakh-verificerede læger, der er størst i landet. Som et firma i hurtig bevægelse eksperimenterer vi meget med produktet og er samtidig forsigtige med at levere kvalitetsprodukter til alle. For nylig har vi gjort det muligt for vores brugere at uploade videoer af kirurgiske procedurer osv., Til at dele deres fund og søge forslag fra deres kolleger.

De fleste af vores brugere, mens du er på farten, har minimum modtagelse for hurtigere internethastigheder, og dette er en udfordring, når de leverer tungt dataindhold som videoer.

Vi fandt det ganske åbenlyst at bruge HLS-protokollen til videolevering, da den er bredt understøttet, udviklet af Apple og brugt af mange store virksomheder som Facebook. HLS står for HTTP Live Streaming. Det er en mediestreamingsprotokol til levering af video- og lydindhold. En mp4-video er opdelt i små segmenter normalt på 10 sekunder, og for hvert segment oprettes der flere videokvalitetssegmenter, som kan downloades til afspilning baseret på tilgængelig internetbåndbredde.

Så når en spiller spiller en HLS-format, kan den anmode om videosegmentet baseret på den tilgængelige båndbredde og streame videoen uafbrudt, hvilket giver brugerne en glat oplevelse. På et øjeblik kan brugerne se en lav opløsningsvideo, og i det næste øjeblik kan den skifte til højere definition, så snart enheden er inden for området for højere båndbredde-netværk.

Nedenfor er de opløsninger, vi brugte til vores brugssag bortset fra den originale opløsning af videoen -

Opløsninger af video, der skal genereres

Udfordringen var at omdanne de uploadede videoer i det krævede format samt generere miniaturebilledet til pladsholderen for videoen. Der er mange tjenesteudbydere, der leverer videotransformation og levering af indhold, men hovedproblemet er, at de er overkommelige indtil et vist punkt, og med væksten i virksomheden har du brug for en løsning, som ikke er en byrde på lommen. AWS MediaConvert og S3 er de værktøjer, vi vælger at transformere og levere vores videomedier. Ved at bruge den nedenfor beskrevne løsning er vi i stand til at reducere vores omkostninger med 90 procent, hvilket er ganske betydningsfuldt for virksomheder af enhver skala. Følg artiklen, hvis du vil vide, hvordan vi har nulstillet løsningen.

Første tilgang

I stedet for at bygge en intern løsning besluttede vi at bruge tredjeparts tjenester, som Cloudinary passer til vores brugssag. Den leverer flyvevideo-transformationstjeneste, som virkelig hjalp med at få den transformation, vi havde brug for, og den samlede tid, der blev taget, var også meget mindre.

Udviklingen var hurtigere, da vi ikke behøver at bekymre os om transformationen. Man skal uploade videoen, vælge den nødvendige transformation og Cloudinary vil gøre resten. Oprindeligt var Cloudinary godt inden for vores budget, men da funktionen begyndte at få mere trækkraft, begyndte flere brugere at uploade videoer. Denne vækst øgede det beløb, vi brugte på Cloudinary, og det var på tide at søge efter andre muligheder.

Vores eksperimenter

For det første testede vi det berømte open source bibliotek - ffmpeg, der er i stand til at udføre den videotransformation, som vi havde brug for. Vi havde to muligheder for at bruge ffmpeg-bibliotek - brug Cloudfunktioner eller brug en af ​​de allerede kørte VM-instanser på GCP (Google Cloud Platform).

Da hele processen fungerer efter en on-demand-model, blev det sidstnævnte valg kasseret. Cloudfunktioner er baseret på computing-on-demand-model, hvilket betyder, at vi får ressourcerne efter behov uden at påvirke vores andre tjenester. Da det er påkrævet, behøver vi ikke betale serverens omkostninger, når den er inaktiv.

Cloudfunktioner er virkelig lette at bruge og giver mulighed for at skrive koden på to mest populære sprog - node og python. Vi besluttede at gå med python, da vi er komfortable med paradigmet, da vores stak er på python. Det er virkelig let at installere afhængighederne, du skal bare nævne det i filen krav.txt, og du er indstillet.

Vi fik scriptet, der fungerer til skyfunktion, hvor vi først downloadede videoen fra skylagring, transformer den i det krævede format og overfører den tilbage til skylager til streaming.

Men der var en fangst. Vi lader vores brugere uploade videoer op til 100 MB og at håndtere video af den størrelse skyfunktion tog meget tid og slutter til sidst, før de afslutter hele processen på grund af tidsgrænsen (540 sekunder). Til vores forsvar har vi ikke tænkt på det scenario tidligere.

Efter at have undersøgt andre muligheder og masser af forskning så AWS MediaConvert lovende ud. At arbejde med MediaConvert var vanskeligt, da det giver mange muligheder for at tilpasse din transformation, og man kan let gå tabt i den situation (forkælet efter valg). Men efter at have kigget rundt i nogen tid fik vi den skabelon, der kræves til vores ønskede transformation. (vedhæft skabelonen)

Hele vores strøm lignede noget -

Vi uploader en video til S3-spand, som igen udløser en Lambda-funktion. I lambda finder vi ud af de parametre, der kræves som input til MediaConvert ved hjælp af ingen anden end ffmpeg. Efter beregning af alle parametre sender vi en anmodning til AWS MediaConvert om at transformere vores video. For at få besked om transformationsafslutningen kan man oprette en cloud watch-begivenhed med statusændring af job, der er indsendt i MediaConvert fra ‘progress’ til ‘complete’, som igen vil udløse en lambda-funktion. Den udløste lambda-funktion kan enten foretage et api-opkald eller foretage en db-opdatering baseret på gennemførligheden af ​​dit projekt.

Kort sagt:

AWS-løsningen fungerede som charme, og den var virkelig hurtig. Dette kan se ud som en masse arbejde, men det er værd at gøre, hvis du har brug for at skalere.

Fordele ved at bruge denne løsning -

  • Vi bruger S3 til at gemme og levere vores medieindhold, som også er meget skalerbart og overkommeligt.
  • AWS MediaConvert er virkelig hurtig og giver funktionaliteten til at vedligeholde flere køer til indsendelse af job til transformation. Så du behøver ikke at bekymre dig om pludseligt spring i anmodninger om at håndtere videoer. Prissætningen er også virkelig økonomisk, ingen månedlige gebyrer, og du skal kun betale for de anvendte tjenester.
  • AWS Lambda er baseret på Computation on Demand, som vi allerede har diskuteret ovenfor. Bortset fra at AWS giver dig noget gratis lambda-påkaldelse og CPU-tid for Lambda-funktion pr. Måned, hvilket er virkelig godt, og selv ved anvendelse ud over gratis niveaupriser lægger det ikke nogen byrde på lommen.

Problemer, der står over for under AWS-installationen:

  • Husk altid, at AWS leverer tjenester baseret på regionerne, undtagen for få som S3, der er tilgængelig på globalt plan. Brug tjenester i samme region, ellers kan du muligvis ikke fange begivenheder eller udløse lambda-funktioner.
  • Giv den nødvendige tilladelse til din IAM-rolle for de tjenester, du bruger.
  • Som nævnt ovenfor uploader videooverførsel til S3-spand en lambda-funktion, hvor vi udfylder de nødvendige transformationsdetaljer som opløsningen af ​​de resulterende videoer, bitrate osv., Og for disse værdier skal du finde metadataene for den video, der er uploadet som højde , bredde og bitrate. Du skal bruge noget videobearbejdningsbibliotek som ffmpeg for at få disse værdier, der ikke er indlæst på den container, som vores lambda kører på, da lambda kører på en eller flere containere, der oprettes og slettes på forespørgsel som anmodninger.
  • I modsætning til Google Cloud-funktioner, hvor du bare kan tilføje bibliotekets navn i krav.txt, og de vil håndtere resten, for AWS lambda skal du oprette en zip-fil over alle biblioteker og binære filer, der bruges i lambda-funktionen. Efter at have foretaget noget research fandt vi ud af, at du kan tilføje binære filer af ffmpeg i / tmp-mappen og bruge den i din funktion. Besøg her for at få trin til at inkludere ffmpeg i din sti og oprette aws lambda-implementeringspakke.
  • Under testningen fandt vi ud af, at de videoer, der blev optaget på iOS-enheder, blev roteret fra portræt til landskab efter transformation (StackOverflow-diskussion og AWS-forum). Årsagen til dette er videooptagelse på iOS-enhed gemmes oprindeligt i liggende tilstand med et flag i videometadata, der fortæller afspilleren at rotere video under afspilning. Mens du udfører transformationen går rotationsidentifikatoren tabt, og på grund af denne video afspilles den i liggende tilstand og ser ud til at være roteret.
  • For at overvinde dette først identificerede vi disse videoer ved hjælp af ffmpeg. Disse videoer har 'rotations'-værdi i' Display Matrix 'for videometadata, som kan fås ved hjælp af ffmpeg. Drej derefter disse videoer baseret på den givne rotation, og nu har du den roterede video, som let kan transformeres ved hjælp af ovenstående teknik.

Hvis du finder denne artikel nyttig, skal du trykke på klappeknappen, så mange gange du vil. Du er velkommen til at kontakte, hvis du har brug for hjælp i et hvilket som helst trin nævnt ovenfor.