paint-brush
Kā konvertēt videoklipus uz HLS straumēšanai tīmeklī un mobilajās ierīcēs, izmantojot AWS Elemental MediaConvertautors@andrei9735
273 lasījumi

Kā konvertēt videoklipus uz HLS straumēšanai tīmeklī un mobilajās ierīcēs, izmantojot AWS Elemental MediaConvert

autors Andrei12m2024/10/06
Read on Terminal Reader

Pārāk ilgi; Lasīt

Neatkarīgi no tā, vai veidojat straumēšanas platformu, tiešsaistes mācību portālu vai jebkuru lietojumprogrammu, kurai nepieciešama video atskaņošana, vienmērīga video straumēšana ir būtiska.
featured image - Kā konvertēt videoklipus uz HLS straumēšanai tīmeklī un mobilajās ierīcēs, izmantojot AWS Elemental MediaConvert
Andrei HackerNoon profile picture

Mūsdienu digitālajā vidē augstas kvalitātes video satura nodrošināšana dažādās ierīcēs un tīkla apstākļos ir svarīgāka nekā jebkad agrāk. Neatkarīgi no tā, vai veidojat straumēšanas platformu, tiešsaistes mācību portālu, sociālo mediju lietotni vai jebkuru lietojumprogrammu, kurai nepieciešama video atskaņošana, vienmērīga video straumēšana ir būtiska, lai nodrošinātu optimālu lietotāja pieredzi.


Video konvertēšanas automatizācija, izmantojot mākoņa kodēšanas pakalpojumu, ļauj bez piepūles ģenerēt adaptīvas straumes, nodrošinot lietotājiem vislabāko video kvalitāti, vienlaikus samazinot infrastruktūras sarežģītību. Izpētīsim, kā jūs varat ieviest šo risinājumu, lai tas atbilstu jūsu lietojumprogrammas prasībām. Mūsu mērķis ir izveidot risinājumu, kas ir viegli izvietojams, kam nav nepieciešama apkope un kas atbalsta augošu lietotāju bāzi.

Daži vārdi par HLS

Mēs koncentrēsimies uz HLS (HTTP Live Streaming), kas ir viens no populārākajiem video straumēšanas protokoliem. HLS izmanto kodējumu un segmentāciju: sākotnējais video tiek kodēts vairākās versijās ar atšķirīgu bitu pārraides ātrumu un izšķirtspēju. Šīs kodētās versijas pēc tam tiek sadalītas mazos gabalos, kas parasti ir 2–10 sekundes, un katrs fragments tiek saglabāts kā atsevišķs fails. Pēc tam tiek izveidoti atskaņošanas saraksti: vispirms katrai videoklipa kodētajai versijai tiek ģenerēts atskaņošanas saraksts, kas satur atsevišķo fragmentu URL.


Pēc tam tiek izveidots viens galvenais atskaņošanas saraksts, atsaucoties uz dažādām straumes versijām (un to atbilstošajiem atskaņošanas sarakstiem), kā arī to izšķirtspēju un bitu pārraides ātrumu. Šī iestatīšana ļauj klienta lietotnēm atlasīt optimālo straumi, pamatojoties uz tādiem faktoriem kā klienta ierīces izšķirtspēja, skata loga lielums un tīkla apstākļi, nodrošinot, ka tiek lejupielādēti tikai nepieciešamie segmenti.

Risinājums ar AWS Elemental Mediaconvert

Ir pieejami daudzi rīki, lai izveidotu HLS straumes no videoklipiem. Tie ietver tiešu FFmpeg palaišanu vai mākoņpakalpojumu izmantošanu, lai apstrādātu konvertēšanu un izvairītos no infrastruktūras pārvaldības. Šādu pakalpojumu piemēri ir AWS Elemental MediaConvert, Google Cloud Transcoder, Bitmovin un citi. Šajā ziņojumā mēs koncentrēsimies uz MediaConvert. Tālāk ir norādīta iespējamā darbplūsma augšupielādēto videoklipu automātiskai konvertēšanai uz HLS un straumes padarīšanai pieejamas lietotājiem. Veicot darbplūsmu, lūdzu, skatiet pievienoto diagrammu, kur katrs solis ir apzīmēts.


  1. Lietotājs augšupielādē videoklipu S3 segmentā, izmantojot mobilo vai tīmekļa klienta lietotni.


  2. Lambda funkciju aktivizē ObjectCreate notikums Video Uploads S3 segmentā. Šī funkcija izveido MediaConvert darbu, izmantojot sniegto konfigurāciju, un pēc tam iziet (tā negaida video konvertēšanas pabeigšanu). MediaConvert API piedāvā dažādus iestatījumus, tostarp kodeku atlasi, bitu pārraides ātrumu, kvalitāti, audio apstrādi un daudz ko citu. Tas var arī ģenerēt vairākas straumes versijas ar dažādiem saspiešanas iestatījumiem, piemēram, 360p, 720p, 1080p utt.


    Lai gan kodēšanas konfigurācijas atlase ir ārpus šīs ziņas darbības jomas, koda paraugā ir iekļauts pamata HLS pakotnes darbs ar vienu atveidojumu ar bitu pārraides ātrumu 1 Mbps. Konfigurāciju var viegli paplašināt, lai tā atbilstu katras lietojumprogrammas prasībām. Attiecībā uz IAM atļaujām šai funkcijai ir nepieciešama lasīšanas piekļuve avota S3 segmentam, rakstīšanas piekļuve mērķa S3 segmentam un piekļuve MediaConvert API.


 import boto3 import re output_bucket_name = 'converted-videos-bucket' mediaconvert_role_arn = 'arn:aws:iam::123456789012:role/MediaConvertRole' # output bucket access s3_client = boto3.client('s3') mediaconvert_client = boto3.client('mediaconvert') hls_main_playlist_suffix = '-hls.m3u8' # regex used to normalize the object key for the client request token client_request_token_symbols_to_skip = r'[^a-zA-Z0-9-_]' def lambda_handler(event, context): # get S3 bucket name and object key from the event bucket_name = event['Records'][0]['s3']['bucket']['name'] object_key = event['Records'][0]['s3']['object']['key'] # also used as media id # normalize the object key for the client request token client_request_token_obj_key = re.sub(client_request_token_symbols_to_skip, '_', object_key) # call MediaConvert to transcode the video create_job_response = mediaconvert_client.create_job( Role=mediaconvert_role_arn, ClientRequestToken=client_request_token_obj_key, Settings={ 'Inputs': [ { 'FileInput': f's3://{bucket_name}/{object_key}', 'AudioSelectors': { 'Audio Selector 1': { 'DefaultSelection': 'DEFAULT', }, }, } ], 'OutputGroups': [ { 'Name': 'DefaultOutputGroup', 'OutputGroupSettings': { 'Type': 'HLS_GROUP_SETTINGS', 'HlsGroupSettings': { 'Destination': f's3://{output_bucket_name}/{object_key}-hls', 'DirectoryStructure': 'SUBDIRECTORY_PER_STREAM', 'SegmentLength': 5, 'MinSegmentLength': 2, 'SegmentsPerSubdirectory': 500, 'ProgressiveWriteHlsManifest': 'DISABLED', }, }, 'Outputs': [ { 'NameModifier': '-h264', 'ContainerSettings': { 'Container': 'M3U8', }, 'VideoDescription': { 'CodecSettings': { 'Codec': 'H_264', 'H264Settings': { 'RateControlMode': 'VBR', 'Bitrate': 1000000, }, }, }, 'AudioDescriptions': [ { 'AudioSourceName': 'Audio Selector 1', 'CodecSettings': { 'Codec': 'AAC', 'AacSettings': { 'Bitrate': 96000, 'CodingMode': 'CODING_MODE_2_0', 'SampleRate': 48000, }, }, }, ], }, ], } ], }, ) print('Created a MediaConvert job:', create_job_response) return { 'statusCode': 200, 'body': 'OK', }


  1. MediaConvert apstrādā video un ģenerē HLS atskaņošanas sarakstus un video segmentus izvades S3 segmentā. Izvades segments ir savienots ar CDN, kas kešatmiņā saglabā atskaņošanas sarakstus un video segmentus. Šajā piemērā mēs izmantojam Cloudfront, taču var izmantot jebkuru CDN, kas ir saderīgs ar S3.


  2. Vēl vienu Lambda funkciju aktivizē ObjectCreate notikums izvades segmentā. Šim aktivizētājam ir pievienots objekta nosaukuma filtrs, lai nodrošinātu, ka funkcija darbojas tikai tad, kad ir izveidots atskaņošanas saraksta fails (segmenta faili tiek ignorēti).

Objekta nosaukuma filtrs Lambda aktivizētājā: palaidiet funkciju tikai tad, kad ir izveidots galvenais atskaņošanas saraksta fails.

Šī funkcija pievieno atskaņošanas saraksta URL multivides ierakstam datu bāzē. Uzglabāšanas slānis ir ārpus šīs ziņas darbības jomas, tāpēc koda paraugā URL tiek vienkārši izdrukāts.


 import boto3 s3_client = boto3.client('s3') def lambda_handler(event, context): # this function is triggered only when a playlist file # with object key that looks like this '<video_id>-hls.m3u8' # is created in the S3 bucket # get object key from the event object_key = event['Records'][0]['s3']['object']['key'] # extract video id from the object key video_id = object_key.replace('-hls.m3u8', '') print(f'HLS playlist {object_key} created for video {video_id}') # TODO: update the video record in the database return { 'statusCode': 200, 'body': 'OK', }



  1. Kad lietotāji atver videoklipu klienta lietotnes lietotāja saskarnē, klienta lietotne izgūst multivides ierakstu no datu bāzes, izmantojot API. Šajā multivides ierakstā ir ietverts galvenā atskaņošanas saraksta URL.


  2. Video atskaņotājs ienes galveno atskaņošanas sarakstu no CDN un izlemj, kuru straumi atskaņot, pamatojoties uz tādiem faktoriem kā skatvietas lielums, ekrāna izšķirtspēja, tīkla apstākļi utt. Pēc tam tas ienes straumes atskaņošanas sarakstu un video segmentus no CDN un sāk atskaņot videoklipu. .


Šis risinājums ir ļoti viegli izvietojams, un tam nav nepieciešama apkope. Attiecībā uz mērogojamību daudziem lietotājiem ir svarīgi atzīmēt, ka pēc noklusējuma MediaConvert darbi tiek pievienoti vienai rindai, kas var apstrādāt 100–200 video vienlaikus (atkarībā no reģiona). Var izveidot papildu rindas (līdz 10 vienā reģionā), un darbiem var piešķirt prioritātes, kad tie tiek pievienoti rindām. Ir arī iespēja pieprasīt kvotu palielinājumu no AWS.


Noslēgumā jāsaka, ka video konvertēšanas automatizācija, izmantojot mākoņpakalpojumus, piemēram, AWS Elemental MediaConvert, ir efektīvs veids, kā nodrošināt augstas kvalitātes straumēšanas saturu dažādās ierīcēs bez sarežģītas infrastruktūras pārvaldīšanas. Šī pieeja ne tikai vienkāršo video kodēšanas procesu, bet arī uzlabo mērogojamību, nodrošinot, ka jūsu platforma spēj apstrādāt pieaugošo pieprasījumu.


Izmantojot tādus rīkus kā S3, Lambda funkcijas un CloudFront kopā ar MediaConvert, varat efektīvi ģenerēt un piegādāt adaptīvas HLS straumes, nodrošinot lietotājiem optimizētu skatīšanās pieredzi.

L O A D I N G
. . . comments & more!

About Author

Andrei HackerNoon profile picture
Software Engineer, Cloud Solutions Architect

PAKARINĀT TAGUS

ŠIS RAKSTS TIKS PĀRSTRĀDĀTS...