মিডিয়া এনক্রিপশন

ডেরেক হারম্যান
Derek Herman
জো মেডলি
Joe Medley

এই বিভাগে আমরা আপনার মিডিয়া এনক্রিপ্ট করার জন্য দুটি ভিন্ন কৌশল এবং FFmpeg এবং Shaka প্যাকেজারের সাথে কীভাবে ব্যবহার করতে হয় তার কিছু বাস্তব উদাহরণ কভার করতে যাচ্ছি। এনক্রিপশনের জন্য আমরা যে দুটি কৌশল নিয়ে আলোচনা করব তা হল Clear Key এবং Google Widevine- এর মতো একটি পরিষেবা ব্যবহার করা। উভয় কৌশল হল ডিজিটাল রাইটস ম্যানেজমেন্টের ( DRM ) একটি রূপ যা ব্যবহারকারীরা আপনার মিডিয়ার সাথে কী করতে পারে তা নিয়ন্ত্রণ করতে। যাইহোক, প্রমাণীকরণের জন্য কীগুলি পাস করার কারণে একটি সহজাতভাবে অন্যটির চেয়ে কম সুরক্ষিত এবং সেই কারণে একটি DRM পরিষেবা আরও অর্থবহ হতে পারে।

ওয়েবের জন্য প্রাথমিক DRM পরিষেবাগুলি হল Google Widevine , Microsoft PlayReady এবং Apple FairPlay , কিন্তু আমরা এই নিবন্ধে সেগুলিকে কভার করব না৷ যাইহোক, আপনি যদি সমস্ত আধুনিক ব্রাউজারগুলিকে লক্ষ্য করে থাকেন তবে আপনি সম্ভবত তিনটি DRM পরিষেবা ব্যবহার করতে চলেছেন।

এই অ্যাপ্লিকেশনগুলির সাথে রূপান্তর এবং এনক্রিপশন করা হয়:

সাফ কী এনক্রিপশন

প্রথমত, এটি ব্যবহার করার আগে আপনার ক্লিয়ার কী কী এবং কী নয় সে সম্পর্কে আপনার ভাল ধারণা থাকা উচিত। আপনি যখন একটি বিদ্যমান DRM পরিষেবা ব্যবহার করতে চান না এবং মনে করেন যে আপনার মিডিয়ার মৌলিক এনক্রিপশন একটি কার্যকর বিকল্প, আপনি ক্লিয়ার কী ব্যবহার করবেন। কিন্তু, মনে রাখবেন যে এই ধরনের এনক্রিপশন DRM পরিষেবাগুলির একটি ব্যবহার করার মতো একই স্তরের নিরাপত্তা প্রদান করে না। এটি কারণ কী মান জোড়া অন্য কী-এর অধীনে এনক্রিপ্ট করা হয় না, এনক্রিপ্ট করা কীগুলির বিপরীতে যা একটি লাইসেন্স সার্ভারে সংরক্ষিত একটি ডিক্রিপশন কী দ্বারা তৈরি হয়। অতিরিক্তভাবে, ক্লিয়ার কী মূল মানের জোড়াটিকে প্লেইন টেক্সট হিসাবে পাঠায়, তাই আপনি যখন আপনার মিডিয়া এনক্রিপ্ট করছেন তখন ডিক্রিপ্ট করার চাবিটি গোপন নয়।

একটি কী তৈরি করুন

আপনি DASH এবং HLS উভয়ের জন্য একটি কী তৈরি করতে একই পদ্ধতি ব্যবহার করতে পারেন। 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 মানটি পুনরাবৃত্তি করুন বা উপরে তৈরি করা 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

একটি মূল তথ্য ফাইল তৈরি করুন

HLS-এর জন্য এনক্রিপ্ট করতে আপনার একটি কী ফাইল ছাড়াও একটি মূল তথ্য ফাইলের প্রয়োজন। একটি মূল তথ্য ফাইল হল নীচের বিন্যাস সহ একটি পাঠ্য ফাইল। এটা এক্সটেনশন .keyinfo থাকা উচিত. যেমন: encrypt.keyinfo

key URI
key file path
private key

কী URI হল যেখানে media.key ( উপরে তৈরি করা আপনার সার্ভারে অবস্থিত হবে। কী ফাইল পাথ হল কী তথ্য ফাইলের সাপেক্ষে এর অবস্থান। অবশেষে, ব্যক্তিগত কী হল media.key ফাইলের বিষয়বস্তু, অথবা IV আপনি আগে তৈরি করেছেন। উদাহরণস্বরূপ:

https://example.com/keys/media.key
/path/to/media.key
6143b5373a51cb46209cfed0d747da66

HLS এর জন্য এনক্রিপ্ট করুন

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 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

আপনার ফাইলের নাম এবং --content-id পতাকা ছাড়া demultiplexer (demux) কমান্ডের সমস্ত কিছু উদাহরণ থেকে হুবহু কপি করা উচিত। --content-id হল 16 বা 32 র্যান্ডম হেক্স ডিজিট। আপনার নিজের পরিবর্তে এখানে দেওয়া কীগুলি ব্যবহার করুন৷ আরও উদাহরণের জন্য Widevine কী সার্ভার ব্যবহার করার বিষয়ে শাকা প্যাকেজার ডকুমেন্টেশন পড়ুন।

  1. অডিও এবং ভিডিও ডিমুক্স (আলাদা) করুন, নতুন ফাইলগুলি এনক্রিপ্ট করুন এবং একটি মিডিয়া উপস্থাপনা বিবরণ (MPD) ফাইল আউটপুট করুন।

    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. Remux (একত্রিত) অডিও এবং ভিডিও স্ট্রীম. আপনি যদি একটি ভিডিও ফ্রেমওয়ার্ক ব্যবহার করেন তবে আপনাকে এটি করার প্রয়োজন নাও হতে পারে।

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

মিডিয়া রূপান্তর ক্রম

এই বিভাগটি একটি কাঁচা .mov ফাইল থেকে DASH বা HLS এর জন্য প্যাকেজ করা এনক্রিপ্ট করা সম্পদে যাওয়ার জন্য প্রয়োজনীয় আদেশগুলি দেখায়৷ ব্যাখ্যা করার লক্ষ্য থাকার জন্য, আমরা 1080p (1920 x 1080) রেজোলিউশনে একটি উৎস ফাইলকে 8Mbs-এর বিটরেটে রূপান্তর করছি। আপনার প্রয়োজন অনুযায়ী এই মানগুলি সামঞ্জস্য করুন।

ড্যাশ/ওয়েবএম

  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. অডিও এবং ভিডিও ডিমুক্স (আলাদা) করুন, নতুন ফাইলগুলি এনক্রিপ্ট করুন এবং একটি মিডিয়া উপস্থাপনা বিবরণ (MPD) ফাইল আউটপুট করুন।

    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. Remux (একত্রিত) অডিও এবং ভিডিও স্ট্রীম. আপনি যদি একটি ভিডিও ফ্রেমওয়ার্ক ব্যবহার করেন তবে আপনাকে এটি করার প্রয়োজন নাও হতে পারে।

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

DASH/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. অডিও এবং ভিডিও ডিমুক্স (আলাদা) করুন, নতুন ফাইলগুলি এনক্রিপ্ট করুন এবং একটি মিডিয়া উপস্থাপনা বিবরণ (MPD) ফাইল আউটপুট করুন।

    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. Remux (একত্রিত) অডিও এবং ভিডিও স্ট্রীম. আপনি যদি একটি ভিডিও ফ্রেমওয়ার্ক ব্যবহার করেন তবে আপনাকে এটি করার প্রয়োজন নাও হতে পারে।

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

HLS/MP4

HLS শুধুমাত্র 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
    

এটি হজম করার মতো অনেক ছিল, তবে আশা করি আপনি এখন আত্মবিশ্বাসের সাথে আপনার মিডিয়া এনক্রিপ্ট করতে সক্ষম হয়েছেন। পরবর্তীতে আমরা আপনাকে দেখাব কিভাবে আপনার সাইটে মিডিয়া যোগ করতে হয়