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

Derek Herman
Derek Herman
Joe Medley
Joe Medley

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

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

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

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

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

إنشاء مفتاح

يمكنك استخدام الطريقة نفسها لإنشاء مفتاح لكل من 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 أو الملف نفسه الذي أنشأته من قبل. على سبيل المثال:

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
    

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