أساسيات تطبيق الوسائط

Derek Herman
Derek Herman
Joe Medley
Joe Medley

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

أولاً، سنوضّح الاستخدام الأساسي لأداتَي مساعدة شائعتَين للوسائط من سطر الأوامر: Shaka Packager وFFmpeg وسنساعدك في تثبيت الأدوات بسرعة. ما أهمية تغطية تطبيقين؟ في حين أن كلاهما قوي ومفيد في حد ذاته، فضلاً عن ذلك، لم تعد كل الأشياء اللازمة لإعداد الوسائط على الويب. أنشأنا أيضًا مخطط تحويل الوسائط وتشفير الوسائط الصفحات التي تعرض العديد من العمليات الأكثر شيوعًا باستخدام هذين التطبيقين.

هذه التطبيقات ليست الخيارات الوحيدة المتاحة لمهام معالجة الملفات، لكنهما من أكثر الأدوات شيوعًا وقوة. تشمل الخيارات الأخرى واجهة المستخدم الرسومية التطبيقات Miro وHandBrake وVLC هناك أيضًا ترميز/تحويل ترميز خدمات مثل Zencoder وAmazon Elastic Encoder وGoogle Transcoder API.

شاكا باجر

Shaka Packager هي حزمة SDK مجانية لتغليف الوسائط. إذا كنت تستخدم مشغّل وسائط على موقعك، فإن Shaka Packager هو ما ستستخدمه لإعداد الملفات. أُنشأها جون هنتر، الذي كان متخصصًا يدعم التحويل بروتوكولي بث الفيديو الأكثر شيوعًا: الديناميكي البث المباشر التكيُّفي عبر HTTP (DASH) أو البث المباشر عبر HTTP (HLS) شاكا يدعم Packager ميزات الأمان الرئيسية: التشفير الشائع وتقنيات Widevine الرقمية إدارة الحقوق (DRM). ويمكنه أيضًا معالجة أحداث البث المباشر والفيديو عند الطلب.

رغم ما ورد في الحزمة، فإن هذه الأداة تُستخدم لأكثر من C++ المطورين. ويمكنك استخدامها كمكتبة لإنشاء برامج وسائط وكمية أداة سطر أوامر لإعداد ملفات الوسائط لتشغيلها على الويب. إنها والقدرة الأخيرة التي تفيدنا هنا. في الواقع، بالنسبة إلى منشئي الوسائط على الويب Shaka Packager هي الطريقة الوحيدة لأداء بعض المهام دون إنفاق أموال على التجارية باهظة الثمن.

فيما يلي النمط الأساسي لأمر Shaka Packager:

packager stream_descriptor [stream_descriptor-2 [stream_descriptor-n]] [flags]

ليس هذا تمامًا ما يظهر لك عند كتابة packager -help. هذا المثال هو أسهل في الاستنتاج، وهذا يعكس الأمثلة الموجودة في مستندات Shaka Packager: يُرجى العلم أنّ هناك العديد من أنواع stream_descriptor. العناصر في النمط. على الرغم من أنّنا لا نعرض هذا العنوان، يمكنك التلاعب بالفيديو. وعمليات البث الصوتي لملف بشكل منفصل في أمر واحد.

قارن هذا النمط الأساسي مع استخدام بسيط يعرض خصائص الملف. في المثال، وضعنا الأجزاء المكافئة في مصفوفة.

packager stream_descriptor [stream_descriptor-n] [flags]

packager input=glocken.mp4                       --dump_stream_info

ينتج عن الأمر ما يلي:

File "glocken.mp4":
Found 2 stream(s).
Stream [0] type: Video
 codec_string: avc1.640028
 time_scale: 30000
 duration: 300300 (10.0 seconds)
 is_encrypted: false
 codec: H264
 width: 1920
 height: 1080
 pixel_aspect_ratio: 1:1
 trick_play_factor: 0
 nalu_length_size: 4

Stream [1] type: Audio
 codec_string: mp4a.40.2
 time_scale: 48000
 duration: 481280 (10.0 seconds)
 is_encrypted: false
 codec: AAC
 sample_bits: 16
 num_channels: 2
 sampling_frequency: 48000
 language: eng
 seek_preroll_ns: 20833

البحث عن الخصائص التي تمت مناقشتها في أساسيات ملفات الوسائط ولاحظت بعض الأشياء. الارتفاع والعرض صحيحان للدقة الكاملة، تعتبر برامج ترميز الصوت والفيديو من برامج الترميز المفضلة لأنواع الحاويات، الترميز المتقدّم للصوت وH264 للفيديو. لاحظ أيضًا أنه يتم تحديد مجموعات البث باستخدام الأرقام. وهي مفيدة للعمليات التي تعالج الصوت والفيديو على حدة.

يُرجى العلم أنّ النتائج أعلاه لا تعرض معدل نقل البيانات. وبالرغم من ما هو مفقود، فإن هذا الإخراج أسهل في القراءة، لذا نستخدمه كلما استطعنا. عندما نحتاج التي لا يستطيع Shaka Packager الحصول عليها، مثل معدل نقل البيانات، فإننا نستخدم FFmpeg.

FFmpeg

FFmpeg هي أيضًا تطبيق مجاني للتسجيل والتحويل والبث. وملفات الوسائط. إنّ إمكاناته ليست أفضل أو أسوأ من إمكانات Shaka Packager. إنهما مختلفان تمامًا.

يبدو النمط الأساسي لأمر FFmpeg كما يلي:

ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output

وكما هو الحال مع Shaka Packager، يمكن لهذا التطبيق التعامل مع عمليات بث متعددة. سيتم تضمين يتم استخدام الخيارات في مواقع متعددة وتتعامل مع إخراج الملف بشكل مختلف حسب مكان وجودهم في الأمر. انتبه إلى هذا الأمر راجِع أسئلة FFmpeg على Stack Overflow ومواقع إلكترونية مشابهة.

سنقارن مرة أخرى النمط الأساسي بمثال عرض الملف وسماتها الشخصية.

    ffmpeg [GeneralOptions] [InputFileOptions] -i input        [OutputFileOptions] output

    ffmpeg                                     -i glocken.mp4

بالإضافة إلى المعلومات التي طلبناها، تظهر رسالة خطأ أيضًا. كما هو موضح في المثال أدناه. هذا لأن هذا الأمر غير صحيح من الناحية الفنية استخدام FFmpeg. ونحن نستخدم هذه المعلومات لأنه يعرض معلومات تهمّنا.

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'glocken.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.17.100
  Duration: 00:01:47.53, start: 0.000000, bitrate: 10715 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1920x1080, 10579 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
At least one output file must be specified

تثبيت التطبيقات باستخدام Docker

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

  1. ابدأ بإنشاء دليل جديد في مكان ما على جهاز الكمبيوتر باسم media-tools؛ يمكنك استخدام أي اسم تريده، ولكن يُرجى ملاحظة أن التعليمات التالية لنفترض أنّك تستخدم media-tools كاسم للدليل.

  2. أنشِئ الدليل docker وmedia داخل media-tools. سيؤدي ذلك إلى الحفاظ على دليل media خارج سياق الإصدار. هذا مهم لأنّ media هو المكان الذي يتم فيه تخزين الملفات التي نخطّط لإجراء عمليات عليه، وبعضها قد يكون كبيرًا جدًا. جارٍ وضع Dockerfile مباشرةً في سيعمل media-tools على إبطاء بناء الصورة إذا أعدت بنائها في أي وقت — ربما تغيير الإصدارات المثبتة.

  3. أنشئ /media-tools/docker/Dockerfile، وأضِف تعليمات الإصدار التالية:

    FROM google/shaka-packager:release-v2.4.3 as packager
    FROM jrottenberg/ffmpeg:4.3.2-alpine38
    COPY --from=packager /usr/bin /usr/bin
    ENTRYPOINT  ["sh"]
    
  4. إنشاء الصورة:

    docker build -t media-tools ./docker
    
  5. شغِّل الصورة كواجهة تفاعلية. في نظام التشغيل Linux:

    docker run -w /media -v ${PWD}/media:/media -it --rm media-tools
    /media #
    

    في نظام التشغيل Windows:

    docker run -w /media -v %cd%/media:/media -it --rm media-tools
    /media #
    

أثناء تشغيل الصورة، يمكنك التحقق من إصدارات كل من FFmpeg وShka Packager للتحقّق من أنّ كل شيء ناجح من خلال تشغيل ffmpeg -version packager --version من المفترض أن تبدو النتيجة على النحو التالي:

/media # ffmpeg -version
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 6.4.0 (Alpine 6.4.0)
configuration: --disable-debug --disable-doc --disable-ffplay --enable-shared --enable-avresample --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-gpl --enable-libass --enable-fontconfig --enable-libfreetype --enable-libvidstab --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxcb --enable-libx265 --enable-libxvid --enable-libx264 --enable-nonfree --enable-openssl --enable-libfdk_aac --enable-postproc --enable-small --enable-version3 --enable-libbluray --enable-libzmq --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-libopenjpeg --enable-libkvazaar --enable-libaom --extra-libs=-lpthread --enable-libsrt --enable-libaribb24 --extra-cflags=-I/opt/ffmpeg/include --extra-ldflags=-L/opt/ffmpeg/lib
libavutil      56. 51.100 / 56. 51.100
libavcodec     58. 91.100 / 58. 91.100
libavformat    58. 45.100 / 58. 45.100
libavdevice    58. 10.100 / 58. 10.100
libavfilter     7. 85.100 /  7. 85.100
libavresample   4.  0.  0 /  4.  0.  0
libswscale      5.  7.100 /  5.  7.100
libswresample   3.  7.100 /  3.  7.100
libpostproc    55.  7.100 / 55.  7.100
/media # packager --version
packager version v2.4.3-dd9870075f-release

الآن بعد أن جربت استخدام Shaka Packager وFFmpeg، يمكنك المتابعة للتعرّف على المفاهيم الأساسية، سننتقل إلى الخطوة التالية أساسيات بث الوسائط.