paint-brush
AWS Elemental MediaConvert ашиглан вэб болон гар утасны урсгалд зориулсан видеог хэрхэн HLS болгон хөрвүүлэх вэby@andrei9735
195 уншилтууд

AWS Elemental MediaConvert ашиглан вэб болон гар утасны урсгалд зориулсан видеог хэрхэн HLS болгон хөрвүүлэх вэ

by Andrey O.12m2024/10/06
Read on Terminal Reader

Хэтэрхий урт; Унших

Та стриминг платформ, онлайн сургалтын портал эсвэл видео тоглуулахыг шаарддаг аливаа програмыг хөгжүүлж байгаа эсэхээс үл хамааран видеог тасралтгүй дамжуулах нь чухал юм.
featured image - AWS Elemental MediaConvert ашиглан вэб болон гар утасны урсгалд зориулсан видеог хэрхэн HLS болгон хөрвүүлэх вэ
Andrey O. HackerNoon profile picture

Өнөөгийн дижитал орчинд олон төрлийн төхөөрөмж, сүлжээний нөхцөлд өндөр чанартай видео контентыг хүргэх нь урьд өмнөхөөсөө илүү чухал болсон. Та стриминг платформ, онлайн сургалтын портал, сошиал медиа програм эсвэл видео тоглуулахыг шаарддаг аливаа программыг хөгжүүлж байгаа эсэхээс үл хамааран видеог тасралтгүй дамжуулах нь хэрэглэгчийн оновчтой туршлагад зайлшгүй шаардлагатай.


Үүлэнд суурилсан кодчилолын үйлчилгээг ашиглан видео хөрвүүлэлтийг автоматжуулах нь танд дасан зохицох урсгалыг хялбархан үүсгэх боломжийг олгож, хэрэглэгчдэдээ видеоны хамгийн сайн чанарыг хангахын зэрэгцээ дэд бүтцийн нарийн төвөгтэй байдлыг багасгах боломжийг олгоно. Та өөрийн хэрэглээний шаардлагыг хангахын тулд энэ шийдлийг хэрхэн хэрэгжүүлж болохыг судалж үзье. Бидний зорилго бол ашиглахад хялбар, засвар үйлчилгээ шаарддаггүй, өсөн нэмэгдэж буй хэрэглэгчийн баазыг дэмждэг шийдлийг бий болгох явдал юм.

HLS-ийн талаар хэдэн үг хэлье

Бид хамгийн алдартай видео дамжуулалтын протоколуудын нэг болох HLS (HTTP Live Streaming) дээр анхаарлаа хандуулах болно. HLS нь кодчилол, сегментчлэлийг ашигладаг: анхны видео нь өөр өөр бит хурд, нягтрал бүхий олон хувилбарт кодлогдсон. Дараа нь эдгээр кодлогдсон хувилбаруудыг жижиг хэсгүүдэд хувааж, ихэвчлэн 2-10 секундын урттай, хэсэг бүрийг тус тусад нь файл болгон хадгалдаг. Дараа нь тоглуулах жагсаалтыг үүсгэнэ: эхлээд видеоны кодлогдсон хувилбар тус бүрийн URL-уудыг агуулсан тоглуулах жагсаалтыг үүсгэнэ.


Дараа нь урсгалын өөр өөр хувилбаруудыг (болон тэдгээрийн харгалзах тоглуулах жагсаалтууд) тэдгээрийн нягтрал, битийн хурдыг харуулсан нэг мастер тоглуулах жагсаалт үүсгэнэ. Энэ тохиргоо нь үйлчлүүлэгчийн төхөөрөмжийн нягтрал, харах хэсгийн хэмжээ, сүлжээний нөхцөл зэрэг хүчин зүйлс дээр тулгуурлан оновчтой дамжуулалтыг клиент апп-уудад сонгох боломжийг олгож, зөвхөн шаардлагатай сегментүүдийг татаж авах боломжийг олгодог.

AWS Elemental Mediaconvert-тай шийдэл

Видеоноос HLS урсгал үүсгэх олон хэрэгсэл байдаг. Үүнд хөрвүүлэлтийг зохицуулах, дэд бүтцийн менежментээс зайлсхийхийн тулд FFmpeg-г шууд ажиллуулах эсвэл үүлэн дээр суурилсан үйлчилгээг ашиглах зэрэг орно. Ийм үйлчилгээний жишээнд AWS Elemental MediaConvert, Google Cloud Transcoder, Bitmovin болон бусад үйлчилгээ орно. Энэ нийтлэлд бид MediaConvert дээр анхаарлаа хандуулах болно. Доорх нь байршуулсан видеог HLS руу автоматаар хөрвүүлэх, дамжуулалтыг хэрэглэгчдэд нээлттэй болгох боломжит ажлын урсгал юм. Ажлын явцтай танилцахдаа алхам бүрийг тэмдэглэсэн хавсаргасан диаграммыг үзнэ үү.


  1. Хэрэглэгч гар утас эсвэл вэб клиент програмыг ашиглан S3 хувин руу видео байршуулдаг.


  2. Lambda функц нь Video Uploads S3 хувин дахь ObjectCreate үйл явдлаар өдөөгддөг. Энэ функц нь өгөгдсөн тохиргоог ашиглан MediaConvert ажлыг үүсгэж, дараа нь гарна (видео хөрвүүлэлт дуусахыг хүлээхгүй). MediaConvert API нь кодлогчийн сонголт, битийн хурд, чанар, аудио боловсруулалт гэх мэт янз бүрийн тохиргоог санал болгодог. Мөн 360p, 720p, 1080p гэх мэт өөр өөр шахалтын тохиргоотой дамжуулалтын олон хувилбарыг үүсгэж болно.


    Кодчлолын тохиргоог сонгох нь энэ нийтлэлд хамаарахгүй тул кодын дээж нь 1 Mbps битийн хурдаар нэг орчуулгатай HLS багцын үндсэн ажлыг багтаасан болно. Програм бүрийн шаардлагыг хангахын тулд тохиргоог хялбархан сунгаж болно. IAM зөвшөөрлийн хувьд энэ функц нь эх сурвалж S3 хувин руу унших хандалт, очих S3 хувин руу бичих хандалт, 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 нь видеог боловсруулж, S3 гаралтын хувин дахь HLS тоглуулах жагсаалт болон видео сегментүүдийг үүсгэдэг. Гаралтын хувин нь тоглуулах жагсаалт болон видео сегментүүдийг кэшлэдэг CDN-д холбогдсон. Энэ жишээнд бид Cloudfront ашиглаж байгаа боловч S3-тай нийцтэй ямар ч CDN ашиглаж болно.


  2. Өөр нэг Lambda функц нь гаралтын хувин дахь ObjectCreate үйл явдлаар өдөөгддөг. Тоглуулах жагсаалтын файл үүсгэгдсэн үед л функц ажиллахыг баталгаажуулахын тулд тухайн триггер дээр объектын нэрийн шүүлтүүрийг хавсаргасан болно (сегментийн файлуудыг үл тоомсорлодог).

Lambda триггер дэх объектын нэрийн шүүлтүүр: зөвхөн үндсэн тоглуулах жагсаалтын файл үүссэн үед л функцийг ажиллуулна.

Энэ функц нь мэдээллийн сан дахь медиа бичлэгт тоглуулах жагсаалтын URL-г нэмдэг. Хадгалах давхарга нь энэ нийтлэлийн хамрах хүрээнээс хэтэрсэн тул кодын жишээнд URL-г зүгээр л хэвлэсэн болно.


 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. Хэрэглэгчид видеог үйлчлүүлэгчийн UI дээр нээх үед клиент програм API ашиглан мэдээллийн сангаас медиа бичлэгийг татаж авдаг. Энэ медиа бичлэг нь үндсэн тоглуулах жагсаалтын URL-г агуулж байна.


  2. Видео тоглуулагч нь CDN-ээс мастер тоглуулах жагсаалтыг татаж аваад үзэх талбарын хэмжээ, дэлгэцийн нягтрал, сүлжээний нөхцөл гэх мэт хүчин зүйлс дээр үндэслэн аль урсгалыг тоглуулахаа шийддэг. Дараа нь CDN-ээс урсгалын тоглуулах жагсаалт болон видеоны хэсгүүдийг татаж аваад видеог тоглуулж эхэлнэ. .


Энэхүү шийдэл нь ашиглахад маш хялбар бөгөөд засвар үйлчилгээ шаарддаггүй. Олон хэрэглэгчдэд зориулсан өргөтгөх боломжийн тухайд MediaConvert ажлуудыг өгөгдмөл байдлаар 100-200 видео зэрэг боловсруулах боломжтой (бүс нутгаас хамаарч) нэг дараалалд нэмдэг гэдгийг анхаарах нь чухал. Нэмэлт дараалал үүсгэх боломжтой (бүс бүрд 10 хүртэл), дараалалд нэмэх үед ажлын байруудад тэргүүлэх чиглэл өгөх боломжтой. AWS-ээс квотыг нэмэгдүүлэх хүсэлт гаргах сонголт бас бий.


Дүгнэж хэлэхэд, AWS Elemental MediaConvert зэрэг үүлэнд суурилсан үйлчилгээг ашиглан видео хөрвүүлэлтийг автоматжуулах нь нарийн төвөгтэй дэд бүтцийг удирдах дарамтгүйгээр төхөөрөмжүүдийн хооронд өндөр чанартай стриминг контентыг хүргэх үр дүнтэй арга юм. Энэ арга нь видеог кодлох процессыг хялбаршуулаад зогсохгүй өргөтгөх чадварыг сайжруулж, таны платформ өсөн нэмэгдэж буй эрэлт хэрэгцээг хангах боломжтой болгодог.


MediaConvert-тэй хамт S3, Lambda функцууд, CloudFront зэрэг хэрэгслүүдийг ашигласнаар та дасан зохицох HLS урсгалыг үр дүнтэй үүсгэж, хэрэглэгчдэд оновчтой үзэх боломжийг олгоно.