இன்றைய டிஜிட்டல் நிலப்பரப்பில், பல்வேறு சாதனங்கள் மற்றும் நெட்வொர்க் நிலைகளில் உயர்தர வீடியோ உள்ளடக்கத்தை வழங்குவது முன்னெப்போதையும் விட முக்கியமானது. நீங்கள் ஸ்ட்ரீமிங் பிளாட்ஃபார்ம், ஆன்லைன் கற்றல் போர்டல், சமூக ஊடக ஆப்ஸ் அல்லது வீடியோ பிளேபேக் தேவைப்படும் ஏதேனும் ஒரு செயலியை உருவாக்கினாலும், சிறந்த பயனர் அனுபவத்திற்கு தடையற்ற வீடியோ ஸ்ட்ரீமிங் அவசியம்.
கிளவுட் அடிப்படையிலான குறியாக்க சேவையைப் பயன்படுத்தி வீடியோ மாற்றத்தை தானியங்குபடுத்துவது, உள்கட்டமைப்பு சிக்கல்களைக் குறைக்கும் அதே வேளையில், உங்கள் பயனர்களுக்கு சிறந்த வீடியோ தரத்தை உறுதிசெய்து, தகவமைப்பு ஸ்ட்ரீம்களை எளிதாக உருவாக்க உங்களை அனுமதிக்கிறது. உங்கள் விண்ணப்பத்தின் தேவைகளைப் பூர்த்தி செய்ய இந்தத் தீர்வை எவ்வாறு செயல்படுத்தலாம் என்பதை ஆராய்வோம். வரிசைப்படுத்த எளிதான, பராமரிப்பு தேவைப்படாத மற்றும் வளர்ந்து வரும் பயனர் தளத்தை ஆதரிக்கும் தீர்வை உருவாக்குவதே எங்கள் குறிக்கோள்.
மிகவும் பிரபலமான வீடியோ ஸ்ட்ரீமிங் நெறிமுறைகளில் ஒன்றான HLS (HTTP லைவ் ஸ்ட்ரீமிங்) மீது கவனம் செலுத்துவோம். HLS குறியாக்கம் மற்றும் பிரிவைப் பயன்படுத்துகிறது: அசல் வீடியோ வெவ்வேறு பிட்ரேட்டுகள் மற்றும் தீர்மானங்களுடன் பல பதிப்புகளில் குறியாக்கம் செய்யப்படுகிறது. இந்த குறியிடப்பட்ட பதிப்புகள் பின்னர் சிறிய துண்டுகளாக பிரிக்கப்படுகின்றன, பொதுவாக 2 முதல் 10 வினாடிகள் நீளம், ஒவ்வொரு துண்டையும் தனித்தனி கோப்பாக சேமிக்கப்படும். பிளேலிஸ்ட்கள் பின்னர் உருவாக்கப்படும்: முதலில், ஒவ்வொரு வீடியோவின் குறியிடப்பட்ட பதிப்பிற்கும் ஒரு பிளேலிஸ்ட் உருவாக்கப்படும், அதில் தனிப்பட்ட துகள்களின் URLகள் இருக்கும்.
அடுத்து, ஸ்ட்ரீமின் வெவ்வேறு பதிப்புகளை (மற்றும் அவற்றுடன் தொடர்புடைய பிளேலிஸ்ட்கள்) அவற்றின் தீர்மானங்கள் மற்றும் பிட்ரேட்டுகளுடன் குறிப்பிடும் ஒற்றை முதன்மை பிளேலிஸ்ட் உருவாக்கப்படுகிறது. இந்த அமைப்பு கிளையன்ட் ஆப்ஸை கிளையண்டின் சாதனத் தீர்மானம், வியூபோர்ட் அளவு மற்றும் நெட்வொர்க் நிலைமைகள் போன்ற காரணிகளின் அடிப்படையில் உகந்த ஸ்ட்ரீமைத் தேர்ந்தெடுக்க அனுமதிக்கிறது, தேவையான பகுதிகள் மட்டும் பதிவிறக்கம் செய்யப்படுவதை உறுதி செய்கிறது.
வீடியோக்களிலிருந்து HLS ஸ்ட்ரீம்களை உருவாக்குவதற்கு பல கருவிகள் உள்ளன. FFmpeg ஐ நேரடியாக இயக்குதல் அல்லது கிளவுட் அடிப்படையிலான சேவைகளைப் பயன்படுத்தி மாற்றத்தைக் கையாளுதல் மற்றும் உள்கட்டமைப்பு நிர்வாகத்தைத் தவிர்ப்பது ஆகியவை இதில் அடங்கும். AWS Elemental MediaConvert, Google Cloud Transcoder, Bitmovin மற்றும் பல போன்ற சேவைகளின் எடுத்துக்காட்டுகள். இந்த இடுகையில், மீடியா கன்வெர்ட்டில் கவனம் செலுத்துவோம். பதிவேற்றப்பட்ட வீடியோக்களை தானாகவே HLS ஆக மாற்றுவதற்கும் ஸ்ட்ரீம்களை பயனர்களுக்குக் கிடைக்கச் செய்வதற்கும் சாத்தியமான பணிப்பாய்வு கீழே உள்ளது. நீங்கள் பணிப்பாய்வு வழியாகச் செல்லும்போது, இணைக்கப்பட்ட வரைபடத்தைப் பார்க்கவும், அங்கு ஒவ்வொரு அடியும் லேபிளிடப்பட்டுள்ளது.
மொபைல் அல்லது இணைய கிளையன்ட் பயன்பாட்டைப் பயன்படுத்தி ஒரு பயனர் ஒரு வீடியோவை S3 பக்கெட்டில் பதிவேற்றுகிறார்.
வீடியோ பதிவேற்றங்கள் S3 பக்கெட்டில் உள்ள ObjectCreate நிகழ்வால் Lambda செயல்பாடு தூண்டப்படுகிறது. இந்தச் செயல்பாடு வழங்கப்பட்ட உள்ளமைவைப் பயன்படுத்தி 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', }
MediaConvert வீடியோவை செயலாக்குகிறது மற்றும் வெளியீடு S3 வாளியில் HLS பிளேலிஸ்ட்கள் மற்றும் வீடியோ பிரிவுகளை உருவாக்குகிறது. வெளியீட்டு வாளி ஒரு CDN உடன் இணைக்கப்பட்டுள்ளது, இது பிளேலிஸ்ட்கள் மற்றும் வீடியோ பிரிவுகளைத் தேக்குகிறது. இந்த எடுத்துக்காட்டில், நாங்கள் Cloudfront ஐப் பயன்படுத்துகிறோம், ஆனால் S3 உடன் இணக்கமான எந்த CDNஐயும் பயன்படுத்தலாம்.
வெளியீட்டு வாளியில் உள்ள 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', }
பயனர்கள் கிளையன்ட் பயன்பாட்டின் UI இல் வீடியோவைத் திறக்கும்போது, API ஐப் பயன்படுத்தி தரவுத்தளத்திலிருந்து மீடியா பதிவை கிளையன்ட் பயன்பாடு மீட்டெடுக்கிறது. இந்த மீடியா பதிவில் முதன்மை பிளேலிஸ்ட் URL உள்ளது.
வீடியோ பிளேயர் CDN இலிருந்து முதன்மை பிளேலிஸ்ட்டைப் பெற்று, காட்சிப் பகுதி அளவு, திரை தெளிவுத்திறன், நெட்வொர்க் நிலைமைகள் போன்ற காரணிகளின் அடிப்படையில் எந்த ஸ்ட்ரீமை இயக்க வேண்டும் என்பதைத் தீர்மானிக்கிறது. பின்னர் அது CDN இலிருந்து ஸ்ட்ரீம் பிளேலிஸ்ட் மற்றும் வீடியோ பிரிவுகளைப் பெற்று வீடியோவை இயக்கத் தொடங்குகிறது. .
இந்த தீர்வு வரிசைப்படுத்த மிகவும் எளிதானது மற்றும் பராமரிப்பு தேவையில்லை. பல பயனர்களுக்கான அளவிடுதல் குறித்து, மீடியா கன்வெர்ட் வேலைகள், 100-200 வீடியோக்களை ஒரே நேரத்தில் (பிராந்தியத்தைப் பொறுத்து) செயலாக்கக்கூடிய ஒரு வரிசையில் சேர்க்கப்படும் என்பதை கவனத்தில் கொள்ள வேண்டும். கூடுதல் வரிசைகளை உருவாக்கலாம் (ஒரு பிராந்தியத்திற்கு 10 வரை), மேலும் வரிசைகளில் சேர்க்கப்படும்போது வேலைகளுக்கு முன்னுரிமைகள் ஒதுக்கப்படும். AWS இலிருந்து ஒதுக்கீடு அதிகரிப்பைக் கோருவதற்கான விருப்பமும் உள்ளது.
முடிவில், AWS Elemental MediaConvert போன்ற கிளவுட் அடிப்படையிலான சேவைகளைப் பயன்படுத்தி வீடியோ மாற்றத்தைத் தானியக்கமாக்குவது சிக்கலான உள்கட்டமைப்பை நிர்வகிக்கும் சுமையின்றி சாதனங்கள் முழுவதும் உயர்தர ஸ்ட்ரீமிங் உள்ளடக்கத்தை வழங்குவதற்கான ஒரு சிறந்த வழியாகும். இந்த அணுகுமுறை வீடியோ என்கோடிங் செயல்முறையை எளிதாக்குவது மட்டுமல்லாமல், உங்கள் இயங்குதளம் வளர்ந்து வரும் தேவையைக் கையாளும் என்பதை உறுதிசெய்து, அளவிடக்கூடிய தன்மையையும் மேம்படுத்துகிறது.
MediaConvert உடன் இணைந்து S3, Lambda செயல்பாடுகள் மற்றும் CloudFront போன்ற கருவிகளை மேம்படுத்துவதன் மூலம், பயனர்களுக்கு உகந்த பார்வை அனுபவத்தை வழங்கும், தகவமைப்பு HLS ஸ்ட்ரீம்களை நீங்கள் திறமையாக உருவாக்கி வழங்கலாம்.