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

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
    

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