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

Derek Herman
Derek Herman
Joe Medley
Joe Medley

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

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

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

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

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

إنشاء مفتاح

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

إنشاء ملف معلومات مفتاح

لتشفير المحتوى باستخدام بروتوكول HLS، تحتاج إلى ملف معلومات مفاتيح بالإضافة إلى ملف مفاتيح. ملف معلومات المفتاح هو ملف نصي بالتنسيق أدناه. يجب أن يتضمّن .keyinfo. على سبيل المثال: encrypt.keyinfo.

key URI
key file path
private key

عنوان URL للمفتاح هو المكان الذي سيتم فيه تثبيت 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 ومتى يتم استخدامه. ولكن متى يجب استخدام خدمة إدارة الحقوق الرقمية لتوفير أمان إضافي؟ في هذه الحالة، سيتم استخدام Widevine أو خدمة أخرى لتشفير الوسائط وفك تشفيرها بأمان. يتوافق Widevine مع MPEG-DASH و HLS، وهو نظام إدارة حقوق رقمية من Google. يستخدم متصفّحَا الويب Google Chrome وFirefox وAndroid MediaDRM وAndroid TV وأجهزة إلكترونيات المستهلك الأخرى التي تستخدم Encrypted Media Extensions وMedia Source Extensions تقنية Widevine لفك تشفير المحتوى.

التشفير باستخدام Widevine

استخدَمت معظم الأمثلة الواردة في هذه المقالة تشفير Clear Key. ومع ذلك، بالنسبة إلى Widevine، عليك استبدال الخيارات التالية.

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

يجب نسخ كل شيء في الأمر demultiplexer (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 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. فك ترميز (فصل) الصوت والفيديو، وتشفير الملفات الجديدة، وإخراج ملف وصف عرض الوسائط (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
    

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