इस सेक्शन में, हम आपके मीडिया को एन्क्रिप्ट करने के लिए दो अलग-अलग रणनीतियों के बारे में बताएंगे. साथ ही, FFmpeg और Shaka Packager के साथ इनका इस्तेमाल करने के कुछ उदाहरण भी देंगे. हम एन्क्रिप्शन की दो रणनीतियों के बारे में बात करेंगे. पहला, क्लीयर पासकोड और दूसरा, Google Widevine जैसी सेवा का इस्तेमाल करना. दोनों रणनीतियां, डिजिटल राइट्स मैनेजमेंट (DRM) का एक रूप हैं. इनकी मदद से यह कंट्रोल किया जा सकता है कि उपयोगकर्ता आपके मीडिया का इस्तेमाल कैसे कर सकते हैं. हालांकि, पुष्टि करने के लिए पासकोड को पास करने के तरीके की वजह से, एक तरीका दूसरे से कम सुरक्षित होता है. इसलिए, डीआरएम सेवा का इस्तेमाल करना ज़्यादा सही होता है.
Google Widevine, Microsoft Play ready, और Apple FairPlay वेब के लिए मुख्य डीआरएम सेवाएं हैं. हालांकि, हम इस लेख में इन सभी सेवाओं के बारे में जानकारी नहीं देंगे. हालांकि, अगर सभी आधुनिक ब्राउज़र को टारगेट किया जा रहा है, तो हो सकता है कि आप तीनों डीआरएम सेवाओं का इस्तेमाल करें.
कन्वर्ज़न और एन्क्रिप्ट (सुरक्षित) करने का काम इन ऐप्लिकेशन की मदद से किया जाता है:
क्लियर की एन्क्रिप्शन
सबसे पहले, आपको इस बात की अच्छी समझ होनी चाहिए कि क्या होती है और क्या नहीं है. अगर आपको किसी मौजूदा डीआरएम सेवा का इस्तेमाल नहीं करना है और आपको लगता है कि मीडिया के लिए बुनियादी एन्क्रिप्शन एक बेहतर विकल्प है, तो 'क्लियर बटन' का इस्तेमाल करें. हालांकि, ध्यान रखें कि इस तरह के एन्क्रिप्शन से उतनी सुरक्षा नहीं मिलती जितनी डीआरएम सेवाओं का इस्तेमाल करने से मिलती है. ऐसा इसलिए होता है, क्योंकि कुंजी की वैल्यू के जोड़े को किसी दूसरी कुंजी से एन्क्रिप्ट (सुरक्षित) नहीं किया जाता है, जबकि एन्क्रिप्ट (सुरक्षित) की गई कुंजियां, लाइसेंस सर्वर पर सेव की गई डिक्रिप्शन कुंजी से जनरेट होती हैं. इसके अलावा, क्लियर की, की-वैल्यू पेयर को सादे टेक्स्ट के तौर पर भेजती है. इसलिए, मीडिया को एन्क्रिप्ट करते समय, उसे डिक्रिप्ट करने की कुंजी को गुप्त नहीं रखा जाता.
पासकोड बनाना
DASH और एचएलएस, दोनों के लिए एक ही तरीके से कुंजी बनाई जा सकती है. ऐसा करने के लिए, OpenSSL का इस्तेमाल करें. इससे, 16 हेक्स वैल्यू वाली एन्क्रिप्शन पासकोड बनेगा.
openssl rand -hex 16 > media.key
आईवी बनाना
इसके बाद, हम इनिशलाइज़ेशन वेक्टर (IV) जनरेट कर सकते हैं.
openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66
साफ़ तौर पर दिखने वाली कुंजी से एन्क्रिप्ट करना
इस उदाहरण में, रॉ पासकोड के साथ Shaka Packager का इस्तेमाल किया गया है. इसमें keys
और
key_ids
को सीधे Shaka Packager को दिया गया है. ज़्यादा उदाहरणों के लिए, दस्तावेज़ पढ़ें.
key
फ़्लैग के लिए, पहले से बनाई गई कुंजी का इस्तेमाल करें. यह कुंजी, media.key
फ़ाइल में सेव होती है. हालांकि, कमांड लाइन में इसे डालते समय, पक्का करें कि आपने इसके व्हाइटस्पेस को हटा दिया हो. key_id
फ़्लैग के लिए, media.id
वैल्यू को दोहराएं या ऊपर जनरेट की गई IV वैल्यू का इस्तेमाल करें.
packager \
input=glocken.mp4,stream=audio,output=glockena.m4a \
input=glocken.mp4,stream=video,output=glockenv.mp4 \
--enable_fixed_key_encryption \
--keys label=audio:key=INSERT_AUDIO_KEY_HERE:key_id=INSERT_AUDIO_KEY_ID_HERE,label=video:key=INSERT_VIDEO_KEY_HERE:key_id=INSERT_VIDEO_KEY_ID_HERE
मुख्य जानकारी वाली फ़ाइल बनाना
एचएलएस के लिए एन्क्रिप्ट (सुरक्षित) करने के लिए, आपको कुंजी फ़ाइल के साथ-साथ कुंजी की जानकारी वाली फ़ाइल की भी ज़रूरत होती है. मुख्य जानकारी वाली फ़ाइल, एक टेक्स्ट फ़ाइल होती है. इसका फ़ॉर्मैट नीचे दिया गया है. इसका एक्सटेंशन .keyinfo
होना चाहिए. उदाहरण के लिए: encrypt.keyinfo
.
key URI
key file path
private key
पासकोड के यूआरआई में, media.key
(ऊपर बनाया गया) आपके सर्वर पर मौजूद होगा. मुख्य फ़ाइल के पाथ की जगह, मुख्य जानकारी वाली फ़ाइल के आस-पास मौजूद होती है. आखिर में, निजी पासकोड, media.key
फ़ाइल का कॉन्टेंट या पहले बनाया गया आईवी होता है. उदाहरण के लिए:
https://example.com/keys/media.key
/path/to/media.key
6143b5373a51cb46209cfed0d747da66
एचएलएस के लिए एन्क्रिप्ट (सुरक्षित) करना
packager \
'input=input.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \
'input=input.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
--hls_master_playlist_output="master_playlist.m3u8" \
--hls_base_url="http://localhost:5000/"
यह कमांड, 16 या 32 वर्णों वाली कुंजी स्वीकार करेगा.
ffmpeg -i myvideo.mov -c:v libx264 -c:a aac -hls_key_info_file encrypt.keyinfo myvideo.m3u8
Widevine एन्क्रिप्शन
अब आपको पता है कि क्लियर की एन्क्रिप्शन क्या है और इसका इस्तेमाल कब करना चाहिए. हालांकि, ज़्यादा सुरक्षा के लिए, डीआरएम सेवा का इस्तेमाल कब करना चाहिए? यही वह जगह है जहां Widevine या दूसरी सेवा का इस्तेमाल आपके मीडिया को सुरक्षित तरीके से एन्क्रिप्ट (सुरक्षित) और डिक्रिप्ट करने के लिए किया जाएगा. Widevine, MPEG-DASH और एचएलएस के साथ काम करता है. यह Google का डीआरएम है. Google Chrome और Firefox वेब ब्राउज़र, Android MediaDRM, Android TV, और अन्य उपभोक्ता इलेक्ट्रॉनिक डिवाइसों में Widevine का इस्तेमाल किया जाता है. ये डिवाइस, एन्क्रिप्ट किए गए मीडिया एक्सटेंशन और मीडिया सोर्स एक्सटेंशन का इस्तेमाल करते हैं. इनमें Widevine, कॉन्टेंट को डिक्रिप्ट करता है.
Widevine से एन्क्रिप्ट (सुरक्षित) करें
इस लेख के ज़्यादातर उदाहरणों में, क्लियर की एन्क्रिप्शन का इस्तेमाल किया गया है. हालांकि, Widevine के लिए आपको यहां दिए गए विकल्पों को बदलना होगा.
--enable_fixed_key_encryption \
--enable_fixed_key_decryption \
--keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE
आपकी फ़ाइलों के नाम और
--content-id
फ़्लैग को छोड़कर, डीमल्टीप्लेक्सर (demux) कमांड में सब कुछ ठीक इसी उदाहरण से कॉपी किया जाना चाहिए. --content-id
में 16 या 32 रैंडम हेक्स अंक होते हैं. अपनी कुंजियों के बजाय, यहां दी गई कुंजियों का इस्तेमाल करें. ज़्यादा उदाहरणों के लिए, Widevine Key Server का इस्तेमाल करने के बारे में Shaka Packager का दस्तावेज़ पढ़ें.
ऑडियो और वीडियो को अलग करें, नई फ़ाइलों को एन्क्रिप्ट करें, और मीडिया प्रज़ेंटेशन डिस्क्रिप्शन (एमपीडी) फ़ाइल को आउटपुट करें.
packager \ input=tmp_glocken.mp4,stream=video,output=glocken_video.mp4 \ input=tmp_glocken.mp4,stream=audio,output=glocken_audio.m4a \ --enable_widevine_encryption \ --key_server_url "https://license.uat.widevine.com/cenc/getcontentkey/widevine_test" \ --content_id "fd385d9f9a14bb09" \ --signer "widevine_test" \ --aes_signing_key "1ae8ccd0e7985cc0b6203a55855a1034afc252980e970ca90e5202689f947ab9" \ --aes_signing_iv "d58ce954203b7c9a9a9d467f59839249"
ऑडियो और वीडियो स्ट्रीम को फिर से जोड़ना (एक साथ जोड़ना). अगर वीडियो फ़्रेमवर्क का इस्तेमाल किया जा रहा है, तो हो सकता है कि आपको ऐसा करने की ज़रूरत न पड़े.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocke.mp4
मीडिया कन्वर्ज़न का क्रम
यह सेक्शन, रॉ .mov
फ़ाइल से डैश या एचएलएस के लिए पैकेज की गई एन्क्रिप्ट की गई ऐसेट पर जाने के लिए ज़रूरी कमांड दिखाता है. उदाहरण के लिए, हम किसी सोर्स फ़ाइल को 1080 पिक्सल (1920 x 1080) रिज़ॉल्यूशन पर 8 एमबीएस की बिटरेट में बदल रहे हैं. अपनी ज़रूरत के हिसाब से इन वैल्यू में बदलाव करें.
DASH/WebM
फ़ाइल टाइप और कोडेक बदलें.
इस निर्देश के लिए, ऑडियो कोडेक के तौर पर
liborbis
याlibopus
का इस्तेमाल किया जा सकता है.ffmpeg -i glocken.mov -c:v libvpx-vp9 -c:a libvorbis -b:v 8M -vf setsar=1:1 -f webm tmp_glocken.webm
क्लियर कुंजी एन्क्रिप्शन कुंजी बनाएं.
openssl rand -hex 16 > media.key
ऑडियो और वीडियो को अलग करें, नई फ़ाइलों को एन्क्रिप्ट करें, और मीडिया प्रज़ेंटेशन डिस्क्रिप्शन (एमपीडी) फ़ाइल को आउटपुट करें.
packager \ input=tmp_glocken.webm,stream=video,output=glocken_video.webm \ input=tmp_glocken.webm,stream=audio,output=glocken_audio.webm \ --enable_fixed_key_encryption \ --enable_fixed_key_decryption \ --keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE \ --mpd_output glocken_webm_vod.mpd
ऑडियो और वीडियो स्ट्रीम को रीमक्स (संयुक्त रूप से) करें. अगर वीडियो फ़्रेमवर्क का इस्तेमाल किया जा रहा है, तो हो सकता है कि आपको ऐसा करने की ज़रूरत न पड़े.
ffmpeg -i glocken_video.webm -i glocken_audio.webm -c copy glocken.webm
DASH/MP4
फ़ाइल टाइप, वीडियो कोडेक, और बिटरेट बदलें.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 tmp_glocken.mp4
कुंजी को एन्क्रिप्ट (सुरक्षित) करने की कोई कुंजी बनाएं.
openssl rand -hex 16 > media.key
ऑडियो और वीडियो को अलग करें, नई फ़ाइलों को एन्क्रिप्ट करें, और मीडिया प्रज़ेंटेशन डिस्क्रिप्शन (एमपीडी) फ़ाइल को आउटपुट करें.
packager \ input=tmp_glocken.mp4,stream=video,output=glocken_video.mp4 \ input=tmp_glocken.mp4,stream=audio,output=glocken_audio.m4a \ --enable_fixed_key_encryption \ --enable_fixed_key_decryption \ --keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE \ --mpd_output glocken_mp4_vod.mpd
ऑडियो और वीडियो स्ट्रीम को फिर से जोड़ना (मर्ज करना). अगर वीडियो फ़्रेमवर्क का इस्तेमाल किया जा रहा है, तो ऐसा करने की ज़रूरत नहीं है.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocken.mp4
HLS/MP4
एचएलएस सिर्फ़ MP4 के साथ काम करता है. इसलिए, पहले आपको उसे MP4 कंटेनर और उस पर काम करने वाले कोडेक में बदलना होगा.
फ़ाइल टाइप, वीडियो कोडेक, और बिटरेट बदलें.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 glocken.mp4
क्लियर कुंजी एन्क्रिप्शन कुंजी बनाएं.
openssl rand -hex 16 > media.key
मुख्य जानकारी वाली फ़ाइल बनाना
packager \ 'input=glocken.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \ 'input=glocken.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \ --hls_master_playlist_output="master_playlist.m3u8" \ --hls_base_url="http://localhost:5000/" \ --enable_fixed_key_encryption \ --enable_fixed_key_decryption \ --keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE
हमने काफ़ी बातें बताई हैं. हालांकि, हमें उम्मीद है कि अब आप अपने मीडिया को भरोसे के साथ एन्क्रिप्ट कर पाएंगे. अगले लेख में, हम आपको अपनी साइट पर मीडिया जोड़ने का तरीका बताएंगे.