تشفير الوسائط

Derek Herman
Derek Herman
Joe Medley
Joe Medley

سنتناول في هذا القسم استراتيجيتين مختلفتين لتشفير ملفات الوسائط، بالإضافة إلى بعض الأمثلة العملية حول كيفية استخدامهما مع برنامجَي FFmpeg وShaka Packager. استراتيجيتا التشفير اللتان سنناقشهما هما محو المفتاح واستخدام خدمة مثل Google Widevine. هاتان الاستراتيجيتان هما شكل من أشكال إدارة الحقوق الرقمية (DRM) للتحكم في ما يمكن للمستخدمين فعله باستخدام الوسائط التابعة لك. ومع ذلك، يكون أحدهما أقل أمانًا من الآخر في الأساس بسبب طريقة تمرير المفاتيح للمصادقة، وهذا هو السبب في أنّ خدمة إدارة الحقوق الرقمية قد تكون أكثر منطقية.

خدمات إدارة الحقوق الرقمية الأساسية للويب هي Google Widevine وMicrosoft Play ready وApple FairPlay، ولكننا لن نتناولها جميعًا في هذه المقالة. ومع ذلك، إذا كنت تستهدف جميع المتصفحات الحديثة، فمن المحتمل أنّك ستستخدم خدمات إدارة الحقوق الرقمية الثلاث جميعها.

يتم التحويل والتشفير باستخدام التطبيقات التالية:

محو تشفير المفتاح

أولاً، يجب أن تكون لديك فهمًا جيدًا لماهية المفتاح الواضح وغيره قبل استخدامه. إذا لا تريد استخدام خدمة إدارة الحقوق الرقمية الحالية وتشعر أن التشفير الأساسي للوسائط هو خيار قابل للتطبيق، فيمكنك استخدام ميزة "محو المفتاح". يُرجى العِلم أنّ هذا النوع من التشفير لا يوفّر مستوى الأمان نفسه الذي يوفره استخدام إحدى خدمات إدارة الحقوق الرقمية. ويرجع ذلك إلى أنّ زوج قيمة المفتاح لا يتم تشفيره تحت مفتاح آخر، على عكس المفاتيح المشفَّرة التي يتم إنشاؤها بواسطة مفتاح فك التشفير المُخزَّن على خادم ترخيص. بالإضافة إلى ذلك، يرسل "المفتاح الواضح" زوج قيمة المفتاح كنص عادي، لذا أثناء تشفير الوسائط، لا يكون مفتاح فك تشفيره سريًا.

إنشاء مفتاح

يمكنك استخدام الطريقة نفسها لإنشاء مفتاح لكل من DASH وHLS. يمكنك إجراء ذلك باستخدام OpenSSL. سيؤدي ما يلي إلى إنشاء مفتاح تشفير مكون من 16 قيمة سداسية عشرية.

openssl rand -hex 16 > media.key

إنشاء حدث IV

بعد ذلك، يمكننا إنشاء متجه تهيئة (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

إنشاء ملف معلومات أساسية

لتشفير بروتوكول 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

أنت الآن تعرف المقصود بتشفير "Clear Key" ومتى يتم استخدامه. متى يجب استخدام خدمة إدارة الحقوق الرقمية (DRM) للحصول على مزيد من الأمان؟ وهذا هو المكان الذي سيتم فيه استخدام Widevine أو خدمة أخرى لتشفير الوسائط وفك تشفيرها بأمان. يتوافق Widevine مع MPEG-DASH وHLS وهو برنامج إدارة الحقوق الرقمية من Google. يتم استخدام 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 رقمًا سداسيًا عشريًا عشوائيًا. استخدِم المفاتيح المتوفّرة هنا بدلاً من المفاتيح الخاصة بك. اقرأ وثائق Shaka Packager حول استخدام خادم مفاتيح 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. إعادة المزج (دمج) عمليات بث الصوت والفيديو. إذا كنت تستخدم إطار عمل فيديو، قد لا تحتاج إلى إجراء ذلك

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

تسلسل الإحالات الناجحة للوسائط

يعرض هذا القسم أوامر الترتيب اللازمة للانتقال من ملف .mov أوّلي إلى مواد العرض المشفَّرة المضمَّنة في DASH أو HLS. ولتوضيح هدف التوضيح، نحن بصدد تحويل الملف المصدر إلى معدل نقل بيانات يبلغ 8 ميغابايت بدرجة دقة 1080p (1920 × 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. قم بتصفية (فصل) الصوت والفيديو، وتشفير الملفات الجديدة، وإخراج ملف وصف عرض الوسائط (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. إعادة المزج (دمج) عمليات بث الصوت والفيديو. إذا كنت تستخدم إطار عمل فيديو، قد لا تحتاج إلى إجراء ذلك

    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. إعادة المزج (دمج) عمليات بث الصوت والفيديو. إذا كنت تستخدم إطار عمل فيديو، قد لا تحتاج إلى إجراء ذلك

    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
    

كان ذلك كثيرًا لاستيعابه، ولكن نأمل أن تتمكن الآن من تشفير وسائطك بثقة. سنشرح لك بعد ذلك كيفية إضافة وسائط إلى موقعك الإلكتروني.