मीडिया एन्क्रिप्ट (सुरक्षित) करने का तरीका

Derek Herman
Derek Herman
Joe Medley
Joe Medley

इस सेक्शन में, हम एन्क्रिप्ट (सुरक्षित) करने के लिए दो अलग-अलग रणनीतियों के बारे में बात करेंगे और उन्हें FFmpeg के साथ इस्तेमाल करने के कुछ व्यावहारिक उदाहरण और शाका पैकेजर. एन्क्रिप्ट (सुरक्षित) करने के लिए, हम क्लियर पासकोड और दो रणनीतियों के बारे में चर्चा करेंगे Google Widevine जैसी सेवा का इस्तेमाल करके. दोनों रणनीतियां एक तरह से डिजिटल अधिकारों के मैनेजमेंट (DRM) से यह कंट्रोल किया जा सकता है कि उपयोगकर्ता आपके मीडिया के साथ क्या-क्या कर सकते हैं. हालांकि, एक पासवर्ड, दूसरे सिस्टम की तुलना में कम सुरक्षित है. ऐसा इसलिए होता है, क्योंकि डिजिटल बटन एक-दूसरे से और इसलिए, डीआरएम सेवा के लिए सही विकल्प चुनना सही रहेगा.

वेब के लिए मुख्य डीआरएम सेवाएं Google Widevine और Microsoft Play Ready हैं और Apple FairPlay के बारे में ज़्यादा जानें, लेकिन हम इस लेख में उन सभी के बारे में नहीं बताएंगे. हालांकि, यदि आप उन सभी मॉडर्न ब्राउज़र को लक्षित कर रहे हैं, तो तीनों डीआरएम सेवाओं का इस्तेमाल कर रहे हों.

कन्वर्ज़न और एन्क्रिप्ट (सुरक्षित) करने का काम इन ऐप्लिकेशन की मदद से किया जाता है:

कुंजी को एन्क्रिप्ट (सुरक्षित) करने की सुविधा मिटाएं

सबसे पहले, आपको इस बात की अच्छी समझ होनी चाहिए कि हटाएं कुंजी पहले क्या होती है और क्या नहीं है उसका इस्तेमाल करना. जब आपको किसी मौजूदा डीआरएम सेवा का इस्तेमाल नहीं करना हो अपने मीडिया का मूलभूत एन्क्रिप्शन एक व्यवहार्य विकल्प है, आप साफ़ कुंजी का उपयोग करेंगे. हालांकि, ध्यान रखें कि इस तरह का एन्क्रिप्ट (सुरक्षित) करने का तरीका, सुरक्षा करता है जैसा कि DRM सेवाओं में से किसी एक का उपयोग करता है. ऐसा इसलिए होता है, क्योंकि की-वैल्यू पेयर यह होता है: किसी अन्य कुंजी के ज़रिए एन्क्रिप्ट नहीं किया जाता है. दूसरी कुंजी से जनरेट की गई कुंजी डिक्रिप्शन कुंजी, जो किसी लाइसेंस सर्वर पर सेव होती है. इसके अलावा, 'साफ़ करें' बटन से कुंजी के मान के जोड़े को सादे टेक्स्ट के रूप में बदला जा सकता है, ताकि जब आप मीडिया कुंजी को एन्क्रिप्ट कर रहे हों, तो यह कोई सीक्रेट नहीं है.

कुंजी बनाएं

डैश और एचएलएस, दोनों के लिए कुंजी बनाने के लिए भी इसी तरीके का इस्तेमाल किया जा सकता है. इसका इस्तेमाल करके ऐसा करें OpenSSL. नीचे दिए गए निर्देशों के मुताबिक, 16 हेक्स वैल्यू से बनी एन्क्रिप्ट (सुरक्षित) करने वाली कुंजी बन जाएगी.

openssl rand -hex 16 > media.key

IV बनाएं

इसके बाद, हम इनिशलाइज़ेशन वेक्टर (IV) जनरेट कर सकते हैं.

openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66

साफ़ कुंजी से एन्क्रिप्ट करें

नीचे दिए गए उदाहरण में रॉ कुंजियों के साथ शाका पैकेजर का इस्तेमाल किया गया है, जहां keys और शाका पैकेजर को सीधे key_ids दिए जाते हैं. इसके लिए दस्तावेज़ पढ़ें और उदाहरण.

key फ़्लैग के लिए, पहले बनाई गई कुंजी का इस्तेमाल करें जो media.key में सेव है फ़ाइल से लिए जाते हैं. हालाँकि, कमांड लाइन में इसे दर्ज करते समय, सुनिश्चित करें कि आपने इसे खाली सफ़ेद जगह शामिल करें. key_id फ़्लैग के लिए, media.id वैल्यू को दोहराएं या आईवी वैल्यू का इस्तेमाल करें ऊपर जनरेट किया गया.

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 का कॉन्टेंट होता है फ़ाइल या वह IV जो आपने पहले बनाया है. उदाहरण के लिए:

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 और HLS और Google की एक DRM है. Widevine का इस्तेमाल Google Chrome और Firefox के वेब ब्राउज़र पर किया जाता है ब्राउज़र, Android MediaDRM, Android TV, और अन्य उपभोक्ता इलेक्ट्रॉनिक डिवाइस एन्क्रिप्ट किए गए मीडिया एक्सटेंशन और मीडिया सोर्स एक्सटेंशन, जहां Widevine कॉन्टेंट को डिक्रिप्ट करता है.

Widevine से एन्क्रिप्ट (सुरक्षित) करें

इस लेख में दिए गए ज़्यादातर उदाहरणों में, 'साफ़ कुंजी' एन्क्रिप्शन का इस्तेमाल किया गया है. हालांकि, Widevine के लिए निम्न विकल्पों को बदलना चाहेगा.

--enable_fixed_key_encryption \
--enable_fixed_key_decryption \
--keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE

डीमल्टीप्लेक्सर (demux) कमांड में सब कुछ, सिर्फ़ आपकी फ़ाइलों के नाम और --content-id फ़्लैग, यहां दिए गए उदाहरण से ही कॉपी किया जाना चाहिए. --content-id की अवधि 16 साल है या 32 रैंडम हेक्स अंक. अपनी कुंजियों के बजाय यहां दी गई कुंजियों का इस्तेमाल करें. शाका किताबें पढ़ें ज़्यादा उदाहरणों के लिए, Widevine की सर्वर का इस्तेमाल करने के बारे में पैकेजर से जुड़े दस्तावेज़.

  1. Demux, ऑडियो और वीडियो को अलग करता है, नई फ़ाइलों को एन्क्रिप्ट करता है, और मीडिया प्रज़ेंटेशन की जानकारी (एमपीडी) फ़ाइल.

    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"
    
  2. ऑडियो और वीडियो स्ट्रीम को रीमक्स (संयुक्त रूप से) करें. अगर किसी वीडियो का इस्तेमाल किया जा रहा है, तो है, तो हो सकता है कि आपको ऐसा करने की ज़रूरत न पड़े.

    ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocke.mp4
    

मीडिया कन्वर्ज़न क्रम

यह सेक्शन, किसी रॉ .mov फ़ाइल से DASH या HLS के लिए पैकेज की गई एन्क्रिप्ट की गई एसेट. इसका मकसद सिर्फ़ इतना है कि उदाहरण के लिए, हम एक सोर्स फ़ाइल को 8 एमबी के रिज़ॉल्यूशन में बदल रहे हैं 1080 पिक्सल (1920 x 1080) में से एक फ़ॉर्मैट में. ज़रूरत के हिसाब से इन वैल्यू में बदलाव करें.

DASH/WebM

  1. फ़ाइल टाइप और कोडेक को बदलें.

    इस निर्देश के लिए, 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
    
  2. कुंजी को एन्क्रिप्ट (सुरक्षित) करने की कोई कुंजी बनाएं.

    openssl rand -hex 16 > media.key
    
  3. Demux, ऑडियो और वीडियो को अलग करता है, नई फ़ाइलों को एन्क्रिप्ट करता है, और मीडिया प्रज़ेंटेशन की जानकारी (एमपीडी) फ़ाइल.

    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
    
  4. ऑडियो और वीडियो स्ट्रीम को रीमक्स (संयुक्त रूप से) करें. अगर किसी वीडियो का इस्तेमाल किया जा रहा है, तो है, तो हो सकता है कि आपको ऐसा करने की ज़रूरत न पड़े.

    ffmpeg -i glocken_video.webm -i glocken_audio.webm -c copy glocken.webm
    

डैश/MP4

  1. फ़ाइल टाइप, वीडियो कोडेक, और बिटरेट को बदलें.

    ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 tmp_glocken.mp4
    
  2. कुंजी को एन्क्रिप्ट (सुरक्षित) करने की कोई कुंजी बनाएं.

    openssl rand -hex 16 > media.key
    
  3. Demux, ऑडियो और वीडियो को अलग करता है, नई फ़ाइलों को एन्क्रिप्ट करता है, और मीडिया प्रज़ेंटेशन की जानकारी (एमपीडी) फ़ाइल.

    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
    
  4. ऑडियो और वीडियो स्ट्रीम को रीमक्स (संयुक्त रूप से) करें. अगर किसी वीडियो का इस्तेमाल किया जा रहा है, तो है, तो हो सकता है कि आपको ऐसा करने की ज़रूरत न पड़े.

    ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocken.mp4
    

एचएलएस/MP4

एचएलएस सिर्फ़ MP4 के साथ काम करता है. इसलिए, पहले आपको MP4 कंटेनर में बदलना होगा और काम करने वाले कोडेक.

  1. फ़ाइल टाइप, वीडियो कोडेक, और बिटरेट को बदलें.

    ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 glocken.mp4
    
  2. कुंजी को एन्क्रिप्ट (सुरक्षित) करने की कोई कुंजी बनाएं.

    openssl rand -hex 16 > media.key
    
  3. मुख्य जानकारी वाली फ़ाइल बनाना

    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
    

इसे समझना काफ़ी मुश्किल था, लेकिन उम्मीद है कि अब आप मीडिया को एन्क्रिप्ट (सुरक्षित) कर पाएंगे भरोसा करते हैं. इसके बाद, हम आपको Google News में मीडिया जोड़ने का तरीका बताएंगे आपकी साइट.