آشنایی با مبانی نرمافزارهای مدیا پلیر و شیوه پردازش فایل فرمتهای تصویری
در این سند مبانی نرمافزارهای مدیا پلیر و شیوه پردازشی فایل فرمتهای مربوطه، جهت کشف آسیبپذیری مورد بررسی قرار داده شده است
نویسنده: مهدی داودآبادی فراهانی
تاریخ انتشار: 23 فروردین 1404
فهرست
مقدمه
در زندگی روزمره اکثر افرادی که با کامپیوتر مشغول هستند، استفاده از پخشکنندههای رسانه بسیار معمول و پر استفاده است. برای اینکه بتوانیم این پخشکنندهها را از منظر کاربری و امنیتی بررسی کنیم لازم است تا اجزای آنها را به خوبی بشناسیم. در این مقاله به درک مبانی از نرمافزارهای مدیا پلیر و شیوه پردازش فایل فرمتهای تصویری و صوتی خواهیم پرداخت.
پخشکننده رسانه چیست؟
پخشکنندههای رسانه، سیستمهای نرمافزاری یا سختافزاری هستند که برای رمزگشایی و پردازش محتوای چندرسانهای، مانند صدا، ویدئو و دیگر رسانهها طراحی شدهاند. این دستگاه میتواند فایلهای رسانهای دیجیتال را از یک منبع، مانند دیسک ذخیرهسازی و یا به صورت استریم از اینترنت پخش کند. نمونه هایی از پخشکنندههای رسانه شامل برنامههای نرمافزاری مانند VLC Media Player، Windows Media Player یا دستگاههای سختافزاری مانند پخشکننده های DVD و تلویزیون های هوشمند است. اما در پشت صحنه، آنها مسئول تفسیر فایلهای رسانهای رمزگذاری شده و تبدیل آنها به شکلی قابل مشاهده یا شنیدن هستند. این فرآیند شامل استخراج دادههای مربوطه از کانتینرها، رمزگشایی فرمتهای رسانهای فشرده شده و سپس نمایش محتوا بر روی صفحه یا پخش آن از طریق بلندگوها است.
اجزای اصلی پخشکنندههای رسانه
یک پخشکننده رسانه معمولی از اجزای کلیدی زیر تشکیل شده است، که توضیحات جداگانه برای هرکدام از اجزاء در ادامهی سند آورده شده است:
- تجزیهکننده (Demuxer)ها: این اجزاء وظیفه استخراج جریانهای داده از کانتینر (Container)ها (مانند MP4 یا MKV) را بر عهده دارند. همچنین اطمینان حاصل میکنند که صدا، ویدئو و زیرنویسها به درستی برای پردازش جدا میشوند.
- رمزگشا (Decoder)ها: این اجزاء رسانههای فشرده (مانند 264، AAC و …) را به دادههای غیرفشردهای تبدیل میکنند که توسط پخشکننده قابل پردازش هستند.
- پردازشکننده (Renderer)ها: این اجزاء مسئول نمایش فریمهای ویدئویی و خروجی سیگنالهای صوتی هستند. پردازشکنندههای ویدئو (Video Renderers) وظیفه مدیریت تغییر نرخ فریم (Frame Rate Conversion)، مقیاسبندی رزولوشن (Resolution Scaling) و سایر جلوههای بصری را مدیریت میکنند، در حالی که پردازشکنندههای صوتی، وظیفه مدیریت خروجی صدا، از جمله فضاسازی و ترکیب صدا را بر عهده دارند.
- رابطهای کاربری (User Interface): رابطهای گرافیکی برای سهولت تعامل کاربران با نرمافزار طراحی شدهاند. این تعامل شامل تغییر در تنظیمات پخشکننده و همچنین نمایش رسانه که خود در بر گیرنده پخش یا توقف رسانه، کم یا زیاد کردن صدا، ایجاد لیست پخش و … میشود.
تجزیهکننده (Demuxing) چیست؟
تجزیهکننده را میتوان به عنوان عضوی حیاتی از هر محتوای چندرسانهای دیجیتال در نظر گرفت. تجزیهکنندهها اساساً جریانهای مختلفی که یک فایل رسانهای را تشکیل میدهند، از هم جدا میکند. برای داشتن یک تصویر ذهنی میتوانید یک تکه پارچه بافته شده را تصور کنید. این عمل مشابه باز کردن نخهای منفردی است که الگویی را تشکیل میدهند، و هر نخ نشاندهنده یک جریان داده متفاوت است، مانند صدا، ویدئو، زیرنویس و غیره.
حال، چرا جداسازی مهم است؟ این جریانها برای تفسیر توسط رمزگشاهای مختلف در پخشکننده رسانه طراحی شدهاند. بنابراین، جداسازی این جریانها منجر به تفسیر، رمزگشایی و در نهایت پخش روانتر میشود. اگر نخها یا جریانها جدا نمیشدند، یک پخشکننده رسانه برای انتخاب اینکه روی کدام thread تمرکز کند، با مشکل مواجه میشد.
تجزیهکننده برای چه مواردی استفاده میشود؟
تجزیهکننده در دنیای رسانه اهداف متنوعی را دنبال میکند و با اطمینان از پخش بینقص فایلهای چندرسانهای، تجربه کلی کاربر را بهبود میبخشد. کاربردهای آن از پخش ساده فایلهای رسانهای تا تکنیکهای پیشرفتهتر تحلیل صدا و ویدئو را شامل میشود. برخی از زمینههای رایجی که تجزیهکننده در آنها نقش حیاتی ایفا میکند عبارتند از:
- پخش: جداسازی جریانهای صدا، ویدئو و زیرنویس برای رمزگشایی و همگامسازی توسط پخشکنندههای رسانه.
- ویرایش ویدئو: استخراج جریانهای خاص برای اهداف ویرایش، مانند حذف صوت یا زیرنویسهای ناخواسته.
- بازترکیب (Remultiplexing): ترکیب جریان های مختلف، مانند همگامسازی یک صوت جایگزین با یک ویدیو.
- تحلیل: جداسازی جریانهای منفرد برای تحلیل دقیق صدا یا ویدئو، که در کنترل کیفیت و موقعیتهای تشخیصی (Diagnostic) مفید است.
- ترنسکدینگ (Transcoding): تبدیل جریانها به طور مستقل قبل از ترکیب مجدد آنها، که امکان فشردهسازی کارآمد یا تغییرات فرمت را فراهم میکند.
تجزیهکننده چگونه کار میکند؟
تجزیهکننده فرآیندی کاملاً سیستماتیک است که نیازمند توجه به جزئیات و درک عمیق از ساختارهای فایلهای رسانهای دارد. در اینجا یک توالی ساده از نحوه عملکرد تجزیهکننده آورده شده است:
- شناسایی: تجزیهکننده، فرمت فایل رسانهی ورودی را شناسایی میکند، به عنوان مثال MP4، MKV، AVI و غیره، و تشخیص میدهد که چگونه جریانها در آن نوع فایل خاص ترکیب شدهاند.
- استخراج: پس از شناسایی، شروع به استخراج بسته دادههای منفرد میکند. این بستهها از جریان ترکیبی استخراج شده و به مخازن مربوطه خود هدایت میشوند، صدا، ویدئو، زیرنویس و موارد دیگر.
- تخصیص: پس از استخراج موفقیتآمیز جریانها، تجزیهکننده، آنها را برای پردازش بیشتر به رمزگشاهای مناسب خود تخصیص میدهد.
زیبایی واقعی تجزیهکنندهها نهفته در توانایی آنها برای انجام این مراحل تقریباً به طور همزمان است، که به کاربران، یک پخش رسانهای بینقص را ارائه میدهد و یک تجربه رسانهای روان، قابل تنظیم و تعاملی را ایجاد میکند.
کدک (Codec) چیست؟
کدک مخفف Coder/Decoder یا Compression/Decompression بخشی از برنامه است که ویدئو یا صدا را پردازش میکند. به طور کلی، کدک روشی برای فشردهسازی یا رفع فشردهسازی فایلهای رسانهای مانند ویدئو یا موسیقی است. این روش شامل دو بخش است: یک رمزگذار که فایل رسانهای را فشرده میکند (که به آن encoding میگویند) و یک رمزگشا که فایل رسانهای را رفع فشردهسازی میکند (که به آن Decoding میگویند). برخی از کدکها هر دو بخش را در خود دارند، در حالی که برخی دیگر فقط یکی از آنها، یعنی رمزگذار و یا رمزگشا، را دارند.
DivX و Theora نمونههایی از کدکهای ویدئویی و MP3 و Vorbis نیز نمونههایی از کدکهای صوتی هستند. جریان خروجی تولید شده هنگام استفاده از یک کدک برای صدا یا ویدئو، عموماً در یک فرمت کانتینر مانند AVI یا Ogg مالتیپلکس (Multiplex) میشود. از آنجایی که کدکهای خاص اغلب با فرمتهای کانتینر خاص مرتبط هستند، نام کانتینر اغلب برای اشاره به کدک استفاده میشود، مانند “Ogg”، که معمولاً به یک جریان وربیس (Vorbis) در یک Ogg container اشاره دارد.
برای سازگاری با تقریباً همه رمزگشاها، توصیه میشود از استاندارد MPEG-1 با تنظیمات vcodec=mp1v، acodec=mpga و mux=mpeg1 استفاده کنید.
| نام کامل | نام |
|---|---|
| MPEG-1 Video - recommended for portability | mp1v |
| MPEG-2 Video - used in DVDs | mp2v |
| MPEG-4 Video | mp4v |
| Sorenson Video v1 | SVQ1 |
| Sorenson Video v3 | SVQ3 |
| VOB Video - used in DVDs | DVDv |
| Windows Media Video v1 | WMV1 |
| Windows Media Video v2 | WMV2 |
| Windows Media Video v3, also called Windows Media 9 (unsupported) | WMV3 |
| Digital Video | DVSD |
| MJPEG | MJPG |
| H263 | H263 |
| H264 | h264 |
جدول 1: مثالهایی از کدکهای ویدئویی پرکاربرد
| نام کامل | نام |
|---|---|
| MPEG audio (recommended for portability) | mpga |
| MPEG Layer 3 audio | mp3 |
| MP4 audio | mp4a |
| Dolby Digital (A52 or AC3) | a52 |
| Vorbis | vorb |
| Opus | opus |
| Speex | spx |
| FLAC | flac |
جدول 2: مثالهایی از کدکهای صوتی پرکاربرد
پردازشکننده چیست؟
پردازشکنندهها، که با نامهای پخشکننده یا موتورهای نمایش نیز شناخته میشوند، به عنوان آخرین مرحله در پردازش چندرسانهای عمل میکنند. نقش آنها دریافت دادههای صوتی یا تصویری رمزگشایی شده و ارائه آن به کاربران در قالبی قابل درک است.
در زمینه صدا، پردازشکنندهها ، صدای دیجیتال رمزگشایی شده را به سیگنالهای آنالوگ تبدیل میکنند که میتوانند از طریق بلندگوها یا هدفونها پخش شوند و به کاربران امکان تجربه صدا را میدهند. این تبدیل شامل وظایف گوناگونی مانند تبدیل دیجیتال به آنالوگ و پردازش سیگنال است که تضمین میکند صدا به طور دقیق بازتولید شود.
در زمینه ویدئو، پردازشکنندهها مسئولیت تبدیل فریمهای ویدئویی رمزگشایی شده به فرمتی سازگار با دستگاههای پخش، مانند مانیتورها یا صفحههای تلویزیون را بر عهده دارند. این امر مستلزم وظایفی نظیر تنظیم رنگ، مقیاسبندی و همگامسازی است.
در حالی که رمزگشاها دادههای رمزگذاری شده را رمزگشایی کرده و امکان بازیابی اطلاعات چندرسانهای اصلی را فراهم میآورند، پردازشکنندهها آن دادههای رمزگشایی شده را گرفته و به خروجیهای قابل درک تبدیل میکنند.
در نهایت ترکیب تلاشهای این اجزاء منجر به پخش و نمایش یکپارچه محتوای صوتی و تصویری میشود.
معماریهای رایج پخشکنندههای رسانه
پخشکنندههای رسانه را میتوان با استفاده از معماریهای متنوعی طراحی کرد. در این میان، معماری کلاینت-سرور در زمینههای پخش استریم بسیار رایج است. در این معماری، کلاینت (پخشکننده رسانه) درخواست محتوای رسانهای را از طریق شبکه از سرور میکند و سپس محتوا به صورت جریان و در لحظه ارائه و پخش میشود. معماریهای دیگری مانند Peer-to-Peer یا مدلهایی که به صورت محلی تعریف شدهاند نیز وجود دارند که در سناریوهایی مانند پخش یک رسانه به صورت آفلاین مورد استفاده قرار میگیرند.
انواع پخشکنندههای رسانه
همانطور که قبلتر اشاره شد پخشکننده های رسانه ابزارهایی هستند، که به صورت نرمافزاری و سخت افزاری برای پخش محتوای چندرسانهای مانند صدا، تصویر و ویدئو طراحی شدهاند. در ادامه قرار است انواع این پخش کنندههای رسانه را مورد بررسی قرار دهیم.
پخشکنندههای رسانه نرمافزارهای
نرمافزارهای پخشکنندهی رسانه، برنامههای کاربردی هستند که برای رمزگشایی و ارائه محتوای چندرسانهای، به سختافزار محاسباتی عمومی (General-purpose Computing) وابسته هستند. این پخشکنندهها از روشهای رمزگشایی مبتنی بر نرمافزار استفاده میکنند و اغلب از کتابخانهها و APIهای متنباز مانند FFmpeg برای پشتیبانی از طیف گستردهای از کدکها و فرمتها بهره میبرند. به عنوان مثال، پخشکننده VLC Media Player برای رمزگشایی از FFmpeg استفاده میکند. همچنین این نرمافزار از کدکهای مختلف ویدئویی و صوتی، فرمتهای ویدئویی متفاوت و پروتکلهای پخش استریمینگ (Streaming) گوناگون پشتیبانی میکند.
FFmpeg (Fast Forward Moving Picture Experts Group) چیست؟
FFmpeg یک پروژه نرمافزاری رایگان و متنباز است که ابزارهای متعددی را برای پردازش ویدئو و صدا ارائه میدهد. این نرمافزار برای اجرا در محیط خط فرمان طراحی شده و شامل کتابخانهها و برنامههای گوناگونی برای ویرایش و مدیریت فایلهای ویدئویی است. FFmpeg برای استفاده در بسیاری از زبانهای برنامهنویسی مختلف در دسترس است. با استفاده از این ابزار میتوان اکثر فرمتهای ویدئویی و صوتی را رمزگشایی و رمزگذاری کرد، کدک (Transcode) آنها را تغییر داد، و یا آنها را ادغام (mux)، تجزیه (demux)، استریم، فیلتر و پخش کرد.
دستورات FFmpeg
FFmpeg سه ابزار اصلی را در خط فرمان ارائه میدهد:
- FFmpeg: یک ابزار خط فرمان قدرتمند که برای تبدیل فرمتهای صوتی و ویدئویی به کار میرود. این ابزار قادر به مدیریت طیف وسیعی از فایلها و جریانهای چندرسانهای است و میتواند وظایف متنوعی از جمله ضبط لحظهای از دستگاههای سختافزاری (مانند وبکمها و رابطهای صوتی) یا منابع نرمافزاری (مانند ضبط صفحه یا استریم)، استخراج صدا از فایلهای ویدئویی، ادغام چند ویدئو، افزودن واترمارک و غیره را انجام دهد.
- FFplay: یک پخشکننده رسانهای ساده که از کتابخانه Simple Direct Media Layer (SDL) و کتابخانههای FFmpeg برای پخش محتوای چندرسانهای استفاده میکند. این ابزار راهی آسان برای پخش سریع فایلهای صوتی و ویدئویی از طریق خط فرمان فراهم میکند. اگرچه فاقد قابلیتهای پیشرفته پخش موجود در پخشکنندههای پیچیدهتر است، اما برای آزمایش و عیبیابی مستقیم فایلهای رسانهای در محیط خط فرمان مفید است.
- FFprobe: که ابزاری برای نمایش جزئیات مربوط به رسانهها در قالب متن، CSV، XML یا JSON است. این ابزار چندرسانهای اطلاعات فنی دقیقی از فایلهای صوتی و ویدئویی استخراج میکند، از جمله جزئیات کدک، نرخ فریم، نرخ بیت، وضوح، مدت زمان و غیره. خروجی میتواند در قالبهای مختلفی مانند متن، CSV، XML یا JSON نمایش داده شود، که باعث آسانی تجزیه و استفاده از آن در اسکریپتها یا سایر برنامهها میشود.
پخشکنندههای رسانه سختافزاری
پخشکنندههای رسانه سختافزاری از اجزای سختافزاری اختصاصی برای واگذاری وظایف رمزگشایی و ارائه به پردازنده مرکزی استفاده میکنند. این دستگاهها اغلب شامل تراشههای اختصاصی پردازش کدکها یا رمزگشاهای سختافزاری هستند که پردازش رسانه را به طور کارآمدتری انجام میدهند که عملکرد را بهبود میبخشند و مصرف انرژی را کاهش میدهند. به عنوان مثال، رمزگشایی GPU-accelerated از قدرت پردازش موازی کارتهای گرافیکی برای تسریع ارائه ویدئوی با کیفیت بالا و از پخش روان حتی با فایلهای رسانهای با وضوح بالا یا فرمتهای رمزگذاری پیچیده مانند HEVC (H.265) اطمینان حاصل میکند.
پخشکنندههای رسانه ترکیبی
پخشکنندههای رسانه ترکیبی، اجزای سختافزاری و نرمافزاری را برای بهینهسازی عملکرد و انعطافپذیری ترکیب میکنند. این پخشکنندهها از رمزگشاهای سختافزاری و شتابدهندهها (Accelerators) برای مدیریت وظایف پرمصرف مانند رمزگشایی ویدئوی با کیفیت بالا استفاده میکنند، در حالی که برای مدیریت وظایف انعطافپذیرتر مانند تعامل کاربر، پروتکلهای پخش استریم یا پردازش رسانه پیشرفته (Advanced Media Processing) به اجزای نرمافزاری متکی هستند. نمونههایی از پخشکنندههای ترکیبی شامل تلویزیونهای هوشمند و کنسولهای بازی هستند که سختافزار قدرتمندی را برای پخش ویدئو در کنار نرمافزار سفارشی برای پخش استریم، بازی و تجربههای رسانهای تعاملی ادغام میکنند.