FFmpeg (https://www.ffmpeg.org/) یک راه حل کامل و چند پلتفرمی برای ضبط، تبدیل و پخش جریانی صدا و تصویر است. FFmpeg یک چارچوب چندرسانهای پیشرو است که میتواند تقریباً هر چیزی را که انسانها و ماشینها ساختهاند را رمزگشایی، رمزگذاری، ترانکد، mux، demux، استریم، فیلتر و پخش کند. از مبهم ترین فرمت های باستانی تا لبه برش پشتیبانی می کند. مهم نیست که آنها توسط برخی از کمیته استانداردها، انجمن یا یک شرکت طراحی شده باشند.
همچنین بسیار قابل حمل است: FFmpeg زیرساخت آزمایشی FATE ما را در لینوکس، Mac OS X، Microsoft Windows، BSDs، Solaris و غیره کامپایل میکند، اجرا میکند، و تحت طیف گستردهای از محیطهای ساخت، معماری ماشین، و تنظیمات.
خود کتابخانه FFmpeg تحت مجوز LGPL 2.1 است. فعال کردن برخی از کتابخانههای خارجی (مانند libx264) مجوز را به GPL 2 یا جدیدتر تغییر میدهد.
من از اسکریپت ffmpeg-android-maker (مشارکت کنندگان: Alexander Berezhnoi Javernaut + codacy-badger Codacy Badger + A2va) برای کامپایل کتابخانه ها استفاده کردم. این اسکریپت کد منبع FFmpeg را از https://www.ffmpeg.org دانلود می کند و کتابخانه را می سازد و آن را برای اندروید مونتاژ می کند. این اسکریپت کتابخانه های مشترک (فایل های *.so) و همچنین فایل های سرصفحه (فایل های *.h) را تولید می کند.
تمرکز اصلی ffmpeg-android-maker این است که کتابخانه های مشترک را برای ادغام یکپارچه در یک پروژه اندروید آماده کند. اسکریپت دایرکتوری «خروجی» را آماده می کند که قرار است استفاده شود. و این تنها کاری نیست که این پروژه انجام می دهد. کد منبع ffmpeg-android-maker تحت مجوز MIT در دسترس است. برای جزئیات بیشتر در https://github.com/Javernaut/ffmpeg-android-maker/ به فایل LICENSE.txt مراجعه کنید کتابخانههای eXport-it FFmpeg فقط با libaom، libdav1d، liblame، libopus و libtwolame...اما نه همه کتابخانههای مرتبط جمعآوری شدهاند.
برای توسعه پشتیبانی جاوا برای FFmpeg و اجرای آن در اندروید 7.1 تا 12، از پروژه MobileFFmpeg مستند شده در https://github.com/tanersener/mobile-ffmpeg/ توسط Taner Sener شروع کردم، که دیگر نگهداری نمی شود. ... و تحت مجوز LGPL 3.0 ...
استدر نهایت، یک پروژه JNI Android Studio با کتابخانهها آماده کردم، شامل فایلها و کد پشتیبانی جاوا میشود و یک فایل کتابخانه .aar را برای ادغام به عنوان یک کتابخانه اضافی در پروژههای موجود خود ایجاد کردم.
برای شروع یک کانال چندپخشی نیاز به استفاده از یک کلاینت برای دسترسی به سرور UPnP در شبکه محلی خود (Wi-Fi) با پشتیبانی FFmpeg است. این سرور باید با لیست فایل هایی را که صادر می کند پاسخ دهد. اگر این سرور دارای پشتیبانی FFmpeg است، یک متن کوچک "به عنوان کانال" باید در انتهای خط بالای صفحه لیست به رنگ قرمز نشان داده شود. هنگامی که متن "قرمز" است، کلیک بر روی دکمه "play" مانند قبل با استفاده از پروتکل UPnP عمل می کند. اگر روی متن کلیک کنید، باید "سبز" شود و با کلیک بر روی دکمه "پخش"، پس از انتخاب فایل های ویدئویی یا صوتی، باید یک "کانال" شروع شود.
فایلهای رسانه انتخابشده ظاهراً به روشی مشابه از طریق UPnP پخش میشوند، با این تفاوت که تاخیر راهاندازی به دلیل کارهای اضافی بیشتر است. شما باید این کلاینت را در حال پخش فایل های رسانه ای نگه دارید تا لوله فعال بماند.
چندپخشی IP از طریق اینترنت کار نمی کند، فقط در شبکه محلی کار می کند، بنابراین عمدتاً روی Wi-Fi. یک کانال داده چندپخشی می تواند توسط بسیاری از مشتریان به طور همزمان به اشتراک گذاشته شود. شما در حال ارسال یک جریان داده رسانه در شبکه Wi-Fi خود هستید و این داده ها را در دستگاه های متصل تقریباً همزمان نشان می دهید، فقط تفاوت تاخیر تأخیر.
با پخش جریانی UPnP یا HTTP، هر دستگاه به پهنای باند ویدیوی نمایش داده شده نیاز دارد و پهنای باند جهانی مجموع هر دو ترافیک است. با پخش چندپخشی، یک جریان داده در شبکه محلی ارسال می کنیم که بین چندین مشتری به اشتراک گذاشته می شود.
اگر پس از راهاندازی کانال، از مشتری دیگری در شبکه خود استفاده میکنید، باید یک خط اضافی در پنجره اصلی سرویس گیرنده مشاهده کنید. فقط با کلیک بر روی این خط باید نمایش شروع شود.
همچنین استفاده از محصولات دیگر مانند VLC، SMplayer، ... برای نمایش یک ویدیو یا گوش دادن به موسیقی توزیع شده در یک کانال چندپخشی فقط با استفاده از URL "UDP" نشان داده شده در مشتری eXport-it امکان پذیر است. p>
روش خوب برای توقف یک کانال چندپخشی این است که آن را روی کلاینتی که آن را راه اندازی کرده اید متوقف کنید زیرا این کانال در آنجا کنترل می شود. پخش تا انتهای فایلهای رسانه پخششده نیز باید نمایش را به پایان برساند.
برای راهاندازی یک کانال چندپخشی، به بخش مشتری خاصی از این برنامه نیاز است، مانند مشتری eXport-it سایر محصولات بهروز من. برای استفاده از یک کانال چندپخشی در حال اجرا می توان با برنامه مشتری یا با سایر محصولات مانند VLC، SMPlayer، ... در حال اجرا بر روی پلتفرم های دیگر یا اندروید انجام داد. هنگام استفاده از VLC، URL برای استفاده از یک کانال Multicast کاملاً متفاوت است مانند udp://@239.255.147.111:27192... فقط با یک "@" اضافی. با یک کانال چندپخشی UDP، دادههای رسانه فقط یک بار ارسال میشوند تا در چندین مشتری نشان داده شوند، اما هیچ همگامسازی واقعی وجود ندارد و تأخیر بسته به بافر و ویژگیهای دستگاه میتواند چند ثانیه باشد.
گوش دادن به یک کانال چندپخشی صوتی را میتوان با سایر محصولات انجام داد، اما مشتری خاص تصاویری را که از طریق IP چندپخشی ارسال میشوند نیز نشان میدهد. اگر میخواهید عکسهای خاصی را همراه با موسیقی خود ارسال کنید، میتوانید از گزینه منوی «صفحه ۲» در سرور استفاده کنید، فقط تصاویر مورد نظر خود را انتخاب کنید، با یک کلیک همه تصاویر را از حالت انتخاب خارج کنید، سپس موارد مورد نظر خود را انتخاب کنید... p>
هر پروتکل مزایا و مشکلاتی دارد. کانال UPnP و Multicast فقط در شبکه محلی (عمدتاً Wi-Fi) قابل استفاده است، جریان HTTP به صورت محلی و همچنین از طریق اینترنت کار می کند و از یک مرورگر وب به عنوان مشتری استفاده می کند. کانال UPnP و Multicast هیچ راه امنی برای کنترل دسترسی ندارند و هر دستگاهی که در شبکه Wi-Fi متصل است می تواند از سرور در حال اجرا استفاده کند. با پروتکل HTTP میتوانید نامهای کاربری و رمز عبور را تعریف کنید و فایلها را در دستههای دسترسی (گروهها) تنظیم کنید و دسترسی به برخی فایلهای رسانهای را برای کاربران خاص محدود کنید. تنظیمات سرور اجازه میدهد که فایلهای توزیع شده را محدود کند و در صورت نیاز، نام دستهبندی را برای هر فایل تعیین کند.