ملحوظة: البث الصوتي متعدد الغرف عبر AirPlay2 غير مدعوم: استخدم مزامنة shairport لذلك.
.
قم بتثبيت uxplay على أنظمة Linux المستندة إلى Debian باستخدام " sudo apt install uxplay
"؛ على FreeBSD مع " sudo pkg install uxplay
". متوفر أيضًا على الأنظمة المستندة إلى Arch من خلال AUR. منذ الإصدار 1.66، تم الآن تجميع uxplay أيضًا بتنسيق RPM بواسطة Fedora 38 (" sudo dnf install uxplay
").
بالنسبة للتوزيعات الأخرى المستندة إلى RPM والتي لم تقم بتغليف UxPlay بعد، يتم الآن توفير ملف RPM "specfile" uxplay.spec مع الإصدارات الحديثة (راجع "الأصول")، ويمكن العثور عليه أيضًا في الدليل العلوي لمصدر UxPlay. راجع القسم الخاص باستخدام ملف المواصفات هذا لإنشاء حزمة RPM قابلة للتثبيت.
بعد التثبيت:
(في Linux و*BSD): إذا كان جدار الحماية نشطًا على الخادم الذي يستضيف UxPlay، فتأكد من أن منفذ الشبكة الافتراضي (UDP 5353) لاستعلامات mDNS/DNS-SD مفتوح (راجع استكشاف الأخطاء وإصلاحها أدناه لمزيد من التفاصيل)؛ افتح أيضًا ثلاثة منافذ UDP وثلاثة منافذ TCP لـ Uxplay، واستخدم خيار "uxplay -p" (انظر " man uxplay
" أو " uxplay -h
").
حتى إذا قمت بتثبيت حزمة uxplay الثنائية المترجمة مسبقًا الخاصة بتوزيعك، فقد تحتاج إلى قراءة الإرشادات أدناه لتشغيل UxPlay لمعرفة أي من حزم المكونات الإضافية GStreamer الخاصة بتوزيعك يجب عليك تثبيتها أيضًا.
بالنسبة لوضع الصوت فقط (Apple Music، وما إلى ذلك) يتم الحصول على أفضل جودة من خلال خيار "uxplay -async"، ولكن هناك وقت استجابة مدته ثانيتان يفرضه نظام التشغيل iOS.
أضف أي خيارات UxPlay تريد استخدامها كإعدادات افتراضية إلى ملف بدء التشغيل ~/.uxplayrc
(راجع " man uxplay
" أو " uxplay -h
" للتعرف على التنسيق والمواقع المحتملة الأخرى). على وجه الخصوص، إذا كان نظامك يستخدم أنظمة PipeWire audio أو Wayland video، فقد ترغب في إضافة "as Pipewiresink" أو "vs waylandsink" كإعدادات افتراضية للملف. (الإخراج من الأوامر الطرفية "ps waux | greppulse" أو "pactl info" سيحتوي على "pipewire" إذا كان نظام Linux/BSD الخاص بك يستخدمه).
على Raspberry Pi: إذا كنت تستخدم Ubuntu 22.10 أو إصدار سابق، فيجب تصحيح GStreamer لاستخدام فك تشفير فيديو الأجهزة بواسطة وحدة معالجة الرسومات Broadcom (يوصى به أيضًا ولكنه اختياري لنظام التشغيل Raspberry Pi OS (Bullseye): استخدم الخيار " uxplay -bt709
" إذا كنت لا تستخدم التصحيح).
لتجميع أحدث إصدار من UxPlay (بسهولة)، راجع القسم الحصول على UxPlay.
هذا المشروع عبارة عن خادم GPLv3 مفتوح المصدر Unix AirPlay2 Mirror لأنظمة Linux وmacOS و*BSD. تم تطويره في البداية بواسطة antimof باستخدام كود من RPiPlay المستند إلى OpenMAX، والذي بدوره مشتق من AirplayServer وshairplay وplayfair. (لم يعد موقع antimof مشاركًا في التطوير، ولكنه ينشر بشكل دوري التحديثات المأخوذة من موقع UxPlay الرئيسي الجديد).
تم اختبار UxPlay على عدد من الأنظمة، بما في ذلك (من بين أنظمة أخرى) Debian (10 "Buster"، 11 "Bullseye"، 12 "Bookworm")، Ubuntu (20.04 LTS، 22.04 LTS، 23.04 (أيضًا مشتقات Ubuntu Linux Mint، Pop! _OS)، Red Hat والمستنسخات (Fedora 38، Rocky Linux 9.2)، openSUSE Leap 15.5، وMageia 9، وOpenMandriva "ROME"، وPCLinuxOS، وArch Linux، وManjaro، ويجب تشغيله على أي نظام Linux. تم اختباره أيضًا على macOS Catalina وVentura (Intel) وSonoma (M2)، وFreeBSD 14.0، وWindows 10 و11 (64). قليل).
في طراز Raspberry Pi 4 B، تم اختباره على Raspberry Pi OS (Bullseye وBookworm) (32 و64 بت)، وUbuntu 22.04 LTS و23.04، وManjaro RPi4 23.02، و(بدون فك تشفير فيديو الأجهزة) على openSUSE 15.5. تم اختباره أيضًا على Raspberry Pi Zero 2 W، 3 موديل B+، والآن 5.
استخدامه الرئيسي هو العمل مثل AppleTV لنسخ الشاشة (مع الصوت) لعملاء iOS/iPadOS/macOS (iPhone، iPod Touch، iPad، أجهزة كمبيوتر Mac) على شاشة الخادم لمضيف يعمل بنظام التشغيل Linux أو macOS أو أنظمة Unix الأخرى. (والآن أيضًا مايكروسوفت ويندوز). يدعم UxPlay بروتوكول AirPlay2 الخاص بشركة Apple باستخدام "Legacy Protocol"، لكن بعض الميزات مفقودة. (يمكن العثور على تفاصيل ما هو معروف علنًا حول بروتوكول AirPlay 2 الخاص بشركة Apple هنا وهنا وهنا؛ راجع أيضًا pyatv الذي يمكن أن يكون مصدرًا لإضافة البروتوكولات الحديثة.) في حين أنه لا يوجد ضمان بأن إصدارات iOS المستقبلية ستستمر في دعم "البروتوكول القديم". "، يستمر دعم iOS 17.
يجب أن يكون خادم UxPlay وعميله على نفس الشبكة المحلية، التي يعمل عليها أيضًا خادم Bonjour/Zeroconf mDNS/DNS-SD (خدمة "اكتشاف الخدمة" DNS-SD ضرورية للغاية، وليس من الضروري أن يكون تكون الشبكة المحلية أيضًا من النوع المستند إلى mDNS ".local". على خوادم Linux وBSD Unix، يتم توفير ذلك عادةً بواسطة Avahi، من خلال خدمة avahi-daemon، ويتم تضمينه في معظم توزيعات Linux (يمكن أيضًا توفير هذه الخدمة بواسطة خوادم macOS أو iOS أو Windows).
يمكن بدء الاتصالات بخادم UxPlay بواسطة عملاء iOS/MacOS سواء في وضع AirPlay Mirror (الذي يقوم ببث صوت AAC مضغوط بشكل ناقص أثناء عكس شاشة العميل، أو في وضع AirPlay Audio البديل الذي يبث صوت Apple Lossless (ALAC) بدون انعكاس الشاشة في وضع الصوت ، يتم عرض البيانات التعريفية في محطة uxplay؛ إذا تم استخدام خيار UxPlay -ca
، فسيتم أيضًا إخراج صورة الغلاف المصاحبة إلى ملف
يتم تحديثه بشكل دوري. ، ويمكن عرضه باستخدام عارض رسومات (إعادة التحميل) من اختيارك. من الممكن التبديل بين وضعي المرآة والصوت أثناء الاتصال النشط: في وضع المرآة ، قم بإيقاف النسخ المتطابق (أو أغلق نافذة المرآة) وابدأ اتصال وضع الصوت ، وقم بالتبديل. مرة أخرى عن طريق بدء اتصال وضع المرآة ، يتوقف/يعاد تشغيل عرض الغلاف الفني عند مغادرة/إعادة الدخول إلى وضع الصوت .
لاحظ أن Apple video-DRM (كما هو موجود في محتوى "تطبيق Apple TV" على العميل) لا يمكن فك تشفيره بواسطة UxPlay، ولا يمكن مشاهدة تطبيق Apple TV باستخدام وضع AirPlay Mirror الخاص بـ UxPlay (سيتم بث الصوت غير المحمي فقط بتنسيق AAC). تنسيق)، ولكن سيتم بث كل من محتوى الفيديو والصوت من التطبيقات الخالية من إدارة الحقوق الرقمية مثل "تطبيق YouTube" بواسطة UxPlay في وضع المرآة.
نظرًا لأن UxPlay لا يدعم حاليًا بث الفيديو بدون Mirror AirPlay (حيث يتحكم العميل في خادم ويب على خادم AirPlay الذي يتلقى محتوى HLS مباشرة لتجنب فك تشفيره وإعادة تشفيره من قبل العميل)، باستخدام أيقونة فيديو AirPlay في سترسل التطبيقات مثل تطبيق YouTube الصوت فقط (بتنسيق ALAC بدون فقدان البيانات) بدون الفيديو المصاحب (هناك خطط لدعم فيديو HLS في الإصدارات المستقبلية من UxPlay)
يستخدم UxPlay "المكونات الإضافية" لـ GStreamer لعرض الصوت والفيديو. وهذا يعني أن الفيديو والصوت مدعومان "خارج الصندوق"، وذلك باستخدام مجموعة مختارة من المكونات الإضافية. يقوم AirPlay ببث الفيديو بتنسيق h264: فك تشفير gstreamer لا يعتمد على المكونات الإضافية، ويستخدم وحدات فك ترميز h264 لأجهزة GPU المتسارعة إذا كانت متوفرة؛ إذا لم يكن الأمر كذلك، يتم استخدام فك تشفير البرمجيات.
VAAPI لرسومات Intel وAMD المدمجة، وNVIDIA مع برنامج تشغيل مفتوح المصدر "Nouveau".
باستخدام وحدة معالجة الرسومات Intel أو AMD، يُفضل فك تشفير الأجهزة باستخدام البرنامج الإضافي VAAPI gstreamer مفتوح المصدر. برامج تشغيل "Nouveau" مفتوحة المصدر لرسومات NVIDIA مدعومة أيضًا من حيث المبدأ: انظر هنا، ولكن هذا يتطلب استكمال VAAPI بالبرامج الثابتة المستخرجة من برامج تشغيل NVIDIA الخاصة.
NVIDIA مع برامج تشغيل خاصة
يمكن استخدام المكون الإضافي nvh264dec
(المضمن في gstreamer1.0-plugins-bad منذ GStreamer-1.18.0) لفك تشفير الفيديو بشكل سريع على وحدة معالجة الرسومات NVIDIA بعد تثبيت برنامج تشغيل CUDA الخاص بـ NVIDIA libcuda.so
. بالنسبة إلى GStreamer-1.16.3 أو الإصدارات الأقدم، يُسمى المكون الإضافي nvdec
ويجب أن يتم إنشاؤه بواسطة المستخدم.
دعم Video4Linux2 لفك تشفير الأجهزة h264 على Raspberry Pi (Pi 4B والإصدارات الأقدم)
يمكن الآن لأجهزة كمبيوتر Raspberry Pi (RPi) (التي تم اختبارها على Pi 4 Model B) تشغيل UxPlay باستخدام برنامج فك تشفير الفيديو، ولكن يفضل فك تشفير h264/h265 المسرّع بواسطة الأجهزة عن طريق البرامج الثابتة في وحدة معالجة الرسومات Pi's Broadcom 2835. يصل UxPlay إلى هذا باستخدام البرنامج الإضافي GStreamer-1.22 Video4Linux2 (v4l2)؛ يستخدم وحدة ترميز Linux kernel bcm2835 خارج الخط الرئيسي التي يحتفظ بها Raspberry Pi، والتي تم تضمينها حتى الآن فقط في Raspberry Pi OS، بالإضافة إلى توزيعتين أخريين (Ubuntu وManjaro) متاحتان مع Raspberry Pi Imager. (بالنسبة لـ GStreamer < 1.22، راجع UxPlay Wiki) .
(جديد): دعم فك تشفير الأجهزة h265 (HEVC) على Raspberry Pi (Pi 4 model B وPi 5)
الدعم موجود لكن حتى الآن لم يتم الحصول على نتائج مرضية. يوفر الطراز Pi Model 5 فقط فك تشفير الأجهزة (GPU) لفيديو h265، ولكن ليس H264، نظرًا لأن وحدة المعالجة المركزية الخاصة به قوية بما يكفي لفك تشفير H264 المُرضي للبرامج
لا يحتوي ترخيص GPLv3 الخاص بـ UxPlay على "استثناء GPL" مضاف مما يسمح صراحةً بتوزيعه في نموذج مجمع عند ربطه بإصدارات OpenSSL قبل الإصدار 3.0.0 (تحتوي الإصدارات الأقدم من OpenSSL على شرط ترخيص غير متوافق مع GPL ما لم يكن من الممكن ربط OpenSSL تعتبر "مكتبة النظام"، وهي موجودة في *BSD). تتعامل العديد من توزيعات Linux مع OpenSSL على أنها "مكتبة نظام"، لكن بعضها (مثل دبيان) لا تفعل ذلك: في هذه الحالة، يتم حل المشكلة عن طريق الارتباط بـ OpenSSL-3.0.0 أو الإصدارات الأحدث.
قم إما بتنزيل UxPlay-master.zip وفك ضغطه، أو (إذا كان git مثبتًا): "git clone https://github.com/FDH2/UxPlay". يمكنك أيضًا تنزيل إصدار حديث أو سابق مدرج في الإصدارات.
(قم بتكييف هذه التعليمات مع أنظمة Linux التي لا تعتمد على Debian أو *BSD؛ وبالنسبة لنظام التشغيل macOS، راجع التعليمات المحددة أدناه). راجع استكشاف الأخطاء وإصلاحها أدناه للحصول على مساعدة بشأن أي صعوبات.
أنت بحاجة إلى مترجم C/C++ (مثل g++) مع تثبيت مكتبات التطوير القياسية. توفر الأنظمة المستندة إلى دبيان حزمة "أساسية للبناء" لاستخدامها في تجميع البرامج. تحتاج أيضًا إلى pkg-config: إذا لم يتم العثور عليه بواسطة " which pkg-config
"، فقم بتثبيت pkg-config أو pkgconf البديل الذي يعمل به. تأكد أيضًا من تثبيت cmake>=3.5: " sudo apt install cmake
" (أضف build-essential
و pkg-config
(أو pkgconf
) إلى هذا إذا لزم الأمر).
تأكد من أن توزيعتك توفر OpenSSL 1.1.1 أو أحدث، وlibblist 2.0 أو أحدث. (وهذا يعني أن الأنظمة المستندة إلى Debian 10 "Buster" (على سبيل المثال، Ubuntu 18.04) أو أحدث؛ في أنظمة Debian 10، تعد "libplist" إصدارًا أقدم، فأنت بحاجة إلى "libplist3".) إذا لم يكن الأمر كذلك، فقد تحتاج إلى إنشاء وتثبيت هذه من المصدر (راجع التعليمات الموجودة في نهاية هذا الملف التمهيدي).
إذا كان لديك تثبيت OpenSSL غير قياسي، فقد تحتاج إلى تعيين متغير البيئة OPENSSL_ROOT_DIR ( على سبيل المثال ، " export OPENSSL_ROOT_DIR=/usr/local/lib64
" إذا كان هذا هو المكان الذي تم تثبيته فيه). وبالمثل، بالنسبة لعمليات تثبيت GStreamer غير القياسية (أو المتعددة)، قم بتعيين متغير البيئة GSTREAMER_ROOT_DIR إلى الدليل الذي يحتوي على الدليل ".../gstreamer-1.0/" الخاص بتثبيت gstreamer الذي يجب أن يستخدمه UxPlay (إذا كان هذا على سبيل المثال "~ /my_gstreamer/lib/gstreamer-1.0/"، قم بتعيين هذا الموقع باستخدام " export GSTREAMER_ROOT_DIR=$HOME/my_gstreamer/lib
").
في نافذة طرفية، قم بتغيير الدلائل إلى الدليل المصدر للكود المصدر الذي تم تنزيله ("UxPlay-*"، "*" = "master" أو علامة الإصدار لتنزيلات ملف zip، و"UxPlay" لتنزيلات "git clone")، ثم اتبع التعليمات أدناه:
ملاحظة: بشكل افتراضي، سيتم إنشاء UxPlay مع تحسين الكمبيوتر الذي تم إنشاؤه عليه؛ عندما لا يكون الأمر كذلك، كما هو الحال عندما تقوم بالتعبئة للتوزيع، استخدم خيار cmake -DNO_MARCH_NATIVE=ON
.
إذا كنت تستخدم X11 Windows على Linux أو *BSD، وترغب في التبديل بين الدخول/الخروج من وضع ملء الشاشة بضغطة مفتاح (F11 أو Alt_L+Enter)، فيجب تصميم UxPlay بالاعتماد على X11. بدءًا من UxPlay-1.59، سيتم تنفيذ ذلك افتراضيًا إذا تم تثبيت مكتبات تطوير X11 واكتشافها. قم بتثبيتها باستخدام " sudo apt install libx11-dev
". إذا تم اكتشاف GStreamer < 1.20، فسيتم أيضًا إجراء الإصلاح المطلوب بواسطة تطبيقات مشاركة الشاشة ( مثل Zoom).
-DNO_X11_DEPS=ON
.sudo apt install libssl-dev libplist-dev
". ( إلا إذا كنت بحاجة إلى إنشاء OpenSSL و libplist من المصدر ).sudo apt install libavahi-compat-libdnssd-dev
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
. (* تخطي إذا قمت ببناء Gstreamer من المصدر )cmake .
( للحصول على بنية أنظف، وهو أمر مفيد إذا قمت بتعديل المصدر، استبدل ذلك بـ " mkdir build; cd build; cmake ..
": يمكنك بعد ذلك حذف محتويات دليل build
إذا لزم الأمر، دون التأثير على المصدر. ) أيضًا أضف أي خيارات cmake " -D
" هنا حسب الحاجة (على سبيل المثال، -DNO_X11_DEPS=ON
أو -DNO_MARCH_NATIVE=ON
).make
sudo make install
(يمكنك بعد ذلك إلغاء التثبيت باستخدام sudo make uninstall
في نفس الدليل الذي تم تشغيله فيه). يؤدي هذا إلى تثبيت الملف القابل للتنفيذ " uxplay
" إلى /usr/local/bin
(ويثبت صفحة manpage في مكان قياسي مثل /usr/local/share/man/man1
وملفات README في مكان ما مثل /usr/local/share/doc/uxplay
). (إذا فشل "man uxplay"، فتحقق من تعيين $MANPATH: إذا كان الأمر كذلك، فيجب إضافة المسار إلى صفحة manpage (عادةً /usr/local/share/man/) إلى $MANPATH .) يمكن أيضًا أن يكون ملف uxplay القابل للتنفيذ يمكن العثور عليه في دليل البناء بعد عملية الإنشاء، إذا كنت ترغب في الاختبار قبل التثبيت (وفي هذه الحالة يجب تثبيت المكونات الإضافية GStreamer أولاً).
**بالنسبة لأولئك الذين لديهم توزيعات تعتمد على RPM، يتوفر أيضًا ملف مواصفات RPM uxplay.spec: راجع إنشاء حزمة rpm قابلة للتثبيت.
Red Hat، أو النسخ مثل CentOS (يستمر الآن باسم Rocky Linux أو Alma Linux): (sudo dnf install أو sudo yum install) opensl-devel libplist-devel avahi-compat-libdns_sd-devel gstreamer1-devel gstreamer1-plugins-base- devel (+libX11-devel لملء الشاشة X11) (قد يكون بعضها في ملف مستودع الوظائف الإضافية "CodeReady"، المسمى "PowerTools" بواسطة النسخ)
Mageia، PCLinuxOS، OpenMandriva: مثل Red Hat، باستثناء تغييرات الاسم: (Mageia) "gstreamer1.0-devel"، "gstreamer-plugins-base1.0-devel"؛ (OpenMandriva) "libopenssl-devel"، "gstreamer-devel"، "libgst-plugins-base1.0-devel". PCLinuxOS: مثل Mageia، لكنه يستخدم Synaptic (أو apt) كمدير الحزم الخاص به.
openSUSE: (sudo zypper install) libopenssl-3-devel (المعروف سابقًا باسم libopenssl-devel) libplist-2_0-devel (المعروف سابقًا باسم libplist-devel) avahi-compat-mDNSResponder-devel gstreamer-devel gstreamer-plugins-base-devel (+ libX11- تطوير لملء الشاشة X11).
Arch Linux ( متوفر أيضًا كحزمة في AUR ): (sudo pacman -Syu) opensl libplist avahi gst-plugins-base.
FreeBSD: (تثبيت sudo pkg) libplist gstreamer1. يجب أيضًا تثبيت avahi-libdns أو mDNSResponder لتوفير مكتبة dns_sd. تم تثبيت OpenSSL بالفعل كمكتبة نظام.
يجب على منشئي RPM لأول مرة تثبيت حزمتي rpm-build وrpmdevtools، ثم إنشاء شجرة rpmbuild باستخدام " rpmdev-setuptree
". ثم قم بتنزيل ونسخ uxplay.spec إلى ~/rpmbuild/SPECS
. في هذا الدليل، قم بتشغيل " rpmdev-spectool -g -R uxplay.spec
" لتنزيل الملف المصدر المقابل uxplay-*.tar.gz
إلى ~/rpmbuild/SOURCES
("rpmdev-spectool" قد يُطلق عليه أيضًا اسم "spectool" ); ثم قم بتشغيل " rpmbuild -ba uxplay.spec
" (ستحتاج إلى تثبيت أي تبعيات مطلوبة في هذه التقارير). يجب أن يؤدي هذا إلى إنشاء حزمة uxplay RPM في دليل فرعي لـ ~/rpmbuild/RPMS
. (تم اختبار uxplay.spec على Fedora 38، وRocky Linux 9.2، وopenSUSE Leap 15.5، وMageia 9، وOpenMandriva، وPCLinuxOS؛ ويمكن تعديله بسهولة ليشمل قوائم التبعية للتوزيعات الأخرى المستندة إلى RPM.)
قم بعد ذلك بتثبيت مكونات GStreamer الإضافية المطلوبة مع sudo apt install gstreamer1.0-
. قيم
المطلوبة هي:
تقوم التوزيعات المستندة إلى دبيان بتقسيم بعض حزم المكونات الإضافية إلى أجزاء أصغر: بعضها قد تكون هناك حاجة إليه أيضًا بما في ذلك " gl " لدعم OpenGL (وهذا يوفر رابط الفيديو "-vs glimagesink"، والذي يمكن أن يكون مفيدًا جدًا في العديد من الأنظمة (بما في ذلك Raspberry Pi )، ويجب استخدامه دائمًا عند استخدام فك تشفير h264/h265 بواسطة وحدة معالجة الرسومات NVIDIA)، و" gtk3 " (الذي يوفر رابط الفيديو "-vs gtksink")، و" x " لدعم X11، على الرغم من أنها قد تكون مثبتة بالفعل؛ يلزم وجود " vaapi " لفك تشفير فيديو h264 المُسرّع بواسطة الأجهزة بواسطة رسومات Intel أو AMD (ولكن ليس للاستخدام مع NVIDIA باستخدام برامج تشغيل خاصة). إذا كان الصوت لا يعمل، فقد يلزم تثبيت المكونات الإضافية " alsa " أو " pulseaudio " أو " pipewire "، اعتمادًا على كيفية إعداد الصوت لديك.
في بعض الحالات، بسبب مشكلات براءات الاختراع، لا يتم توفير ميزة libav plugin avdec_aac اللازمة لفك تشفير صوت AAC في وضع المرآة في التوزيعة الرسمية: احصل عليها من مستودعات المجتمع لتلك التوزيعات.
Red Hat، أو النسخ مثل CentOS (يستمر الآن باسم Rocky Linux أو Alma Linux): قم بتثبيت gstreamer1-libav gstreamer1-plugins-bad-free (+ gstreamer1-vaapi لرسومات Intel/AMD). في فيدورا الأخيرة، تمت إعادة تسمية gstreamer1-libav إلى gstreamer1-plugin-libav. للحصول على avdec_aac، قم بتثبيت الحزم من rpmfusion.org : (احصل على ffmpeg-libs من rpmfusion؛ على RHEL أو النسخ، ولكن ليس Fedora الحديثة، احصل أيضًا على gstreamer1-libav من هناك).
Mageia وPCLinuxOS وOpenMandriva: تثبيت gstreamer1.0-libav gstreamer1.0-plugins-bad (+ gstreamer1.0-vaapi لرسومات Intel/AMD). على Mageia، للحصول على avdec_aac، قم بتثبيت ffmpeg من المستودع "الملوث" ، (والذي يوفر أيضًا gstreamer1.0-plugins-bad الأكثر اكتمالاً).
openSUSE: تثبيت gstreamer-plugins-libav gstreamer-plugins-bad (+ gstreamer-plugins-vaapi لرسومات Intel/AMD). للحصول على avdec_aac، قم بتثبيت حزم libav* لـ openSUSE من Packman "Essentials" ؛ توصية: بعد إضافة مستودع Packman، استخدم الخيار الموجود في إدارة برامج YaST لتحويل جميع حزم النظام للوسائط المتعددة إلى Packman).
Arch Linux قم بتثبيت gst-plugins-good gst-plugins-bad gst-libav (+ gstreamer-vaapi لرسومات Intel/AMD).
FreeBSD: تثبيت gstreamer1-libav، gstreamer1-plugins، gstreamer1-plugins-* (* = core, good, bad, x, gtk, gl, vulkan,pulse, v4l2, ...), (+ gstreamer1-vaapi for Intel/ رسومات AMD).
منذ UxPlay-1.64، يمكن بدء UxPlay بخيارات مقروءة من ملف تكوين، والتي ستكون أول العثور على (1) ملف بمسار محدد بواسطة متغير البيئة $UXPLAYRC
، (2) ~/.uxplayrc
في منزل المستخدم الدليل ("~")، (3) ~/.config/uxplayrc
. التنسيق هو خيار واحد في كل سطر، مع حذف الحرف "-"
الأولي لخيار سطر الأوامر. يتم التعامل مع الأسطر الموجودة في ملف التكوين التي تبدأ بـ "#"
كتعليقات ويتم تجاهلها.
قم بتشغيل uxplay في نافذة طرفية . في بعض الأنظمة، يمكنك تحديد وضع ملء الشاشة باستخدام الخيار -fs
، أو التبديل إلى وضع ملء الشاشة والخروج منه باستخدام مفتاح F11 أو مفتاح Alt+Enter (المضغط باستمرار على اليسار). استخدم Ctrl-C (أو أغلق النافذة) لإنهائه عند الانتهاء. إذا لم تتم رؤية خادم UxPlay من خلال لوحة "Screen Mirroring" المنسدلة لعميل iOS، فتأكد من تشغيل خادم DNS-SD (عادةً avahi-daemon): قم بذلك في نافذة طرفية systemctl status avahi-daemon
. إذا أظهر هذا أن avahi-daemon لا يعمل، فتحكم فيه باستخدام sudo systemctl [start,stop,enable,disable] avahi-daemon
(على الأنظمة غير التابعة لنظام Systemd، مثل *BSD، استخدم sudo service avahi-daemon [status, start, stop, restart, ...]
). إذا تم رؤية UxPlay، ولكن فشل العميل في الاتصال عند تحديده، فقد يكون هناك جدار حماية على الخادم يمنع UxPlay من تلقي طلبات اتصال العميل ما لم يتم فتح بعض منافذ الشبكة: إذا كان جدار الحماية نشطًا، فافتح أيضًا منفذ UDP 5353 (لاستفسارات mDNS) التي يحتاجها Avahi . راجع استكشاف الأخطاء وإصلاحها أدناه للحصول على مساعدة بشأن هذه المشكلة أو غيرها.
على عكس Apple TV، لا يطلب خادم UxPlay افتراضيًا من العملاء "الاقتران" به في البداية باستخدام رمز التعريف الشخصي الذي يعرضه الخادم (وبعد ذلك "يثق" العميل بالخادم، ولا يحتاج إلى تكرار ذلك). منذ الإصدار 1.67، يقدم Uxplay "مصادقة الدبوس" كخيار: راجع " -pin
" و " -reg
" في الاستخدام للحصول على التفاصيل، إذا كنت ترغب في استخدامه. يُطلب من بعض العملاء الذين لديهم MDM (إدارة الأجهزة المحمولة، والتي غالبًا ما تكون موجودة على الأجهزة المملوكة لصاحب العمل) استخدام مصادقة الدبوس: سيوفر UxPlay ذلك حتى عند التشغيل بدون خيار الدبوس.
افتراضيًا، يتم قفل UxPlay على عميله الحالي حتى يقطع هذا العميل الاتصال؛ منذ UxPlay-1.58، يقوم الخيار -nohold
بتعديل هذا السلوك بحيث عندما يطلب عميل جديد اتصالاً، فإنه يزيل العميل الحالي ويتولى المهمة. يقدم UxPlay 1.66 آلية ( -restrict
, -allow
, -block
) للتحكم في العملاء المسموح لهم بالاتصال، باستخدام "deviceID" الخاص بهم (والذي يبدو أنه غير قابل للتغيير في أجهزة Apple).
في وضع المرآة، لدى GStreamer خيار من طريقتين لتشغيل الفيديو مع الصوت المصاحب له: قبل UxPlay-1.64، تم تشغيل تدفقات الفيديو والصوت في أسرع وقت ممكن بعد وصولهما (طريقة GStreamer " sync=false ") ، مع استخدام ساعة GStreamer الداخلية لمحاولة الحفاظ على مزامنتها. بدءًا من UxPlay-1.64، فإن الطريقة الأخرى (وضع " sync=true " الخاص بـ GStreamer)، والتي تستخدم الطوابع الزمنية في تدفقات الصوت والفيديو التي يرسلها العميل، هي الطريقة الافتراضية الجديدة . على مضيفات UxPlay ذات طاقة فك التشفير المنخفضة (مثل نماذج Raspberry Pi Zero W أو 3 B+)، سيؤدي هذا إلى إسقاط إطارات الفيديو التي لا يمكن فك تشفيرها في الوقت المناسب لتشغيل الصوت، مما يجعل الفيديو متشنجًا، لكنه لا يزال متزامنًا.
الطريقة القديمة التي لا تسقط إطارات الفيديو المتأخرة تعمل بشكل جيد على الأنظمة الأكثر قوة، ولا تزال متاحة مع خيار UxPlay " -vsync no
"؛ تم تكييف هذه الطريقة مع "البث المباشر"، وقد تكون أفضل عند استخدام UxPlay كشاشة ثانية لجهاز كمبيوتر Mac، على سبيل المثال، في حين أن الطريقة الافتراضية الجديدة المستندة إلى الطابع الزمني هي الأفضل لمشاهدة مقطع فيديو، للحفاظ على حركات الشفاه والأصوات. متزامن. (بدون استخدام الطوابع الزمنية، سيتخلف الفيديو في النهاية عن الصوت إذا لم يكن من الممكن فك تشفيره بالسرعة الكافية: ساعد فك تشفير الفيديو المسرع بواسطة الأجهزة على منع ذلك سابقًا عندما لم يتم استخدام الطوابع الزمنية.)
-async
خيار قائم. (على سبيل المثال، إذا كنت تريد متابعة كلمات Apple Music على العميل أثناء الاستماع إلى صوت فائق الجودة على خادم UxPlay). يؤدي هذا إلى تأخير الفيديو على العميل لمطابقة الصوت على الخادم، وبالتالي يؤدي إلى تأخير بسيط قبل بدء سريان الإيقاف المؤقت أو تغيير المسار على العميل على الصوت الذي يتم تشغيله بواسطة الخادم. يعمل التحكم في مستوى الصوت AirPlay على تخفيف مستوى الصوت (الكسب) بما يصل إلى -30 ديسيبل: يمكن إعادة ضبط نطاق الديسيبل -30:0 من منخفض :0، أو منخفض : مرتفع ، باستخدام الخيار -db
("-db Low " أو "-db" Low : High ")، يجب أن يكون Low سالبًا. إعادة القياس خطية بالديسيبل. لاحظ أن تنسيق الصوت الخاص بـ GStreamer سوف "يقطع" أي كسب صوت أعلى من +20 ديسيبل، لذا احتفظ بالمستوى العالي تحت هذا المستوى. يوفر الخيار -taper
ملف تعريف "مدبب" للتحكم في مستوى الصوت في AirPlay قد يفضله بعض المستخدمين.
تسمح خيارات -vsync و -async أيضًا بتعديل تأخير الصوت الإيجابي (أو السلبي) الاختياري بالمللي ثانية للضبط الدقيق: -vsync 20.5
يؤخر الصوت بالنسبة إلى الفيديو بمقدار 0.0205 ثانية؛ القيمة السالبة تقدمه.)
قد تجد أن الفيديو قد تم تحسينه من خلال الإعداد -fps 60 الذي يسمح بتشغيل بعض مقاطع الفيديو بمعدل 60 إطارًا في الثانية. (يمكنك معرفة معدل الإطارات الذي يتم دفقه فعليًا باستخدام -vs fpsdisplaysink و/أو -FPSdata.) عند استخدام هذا، يجب عليك استخدام خيار المزامنة الافتراضي المستند إلى الطابع الزمني -vsync
.
منذ UxPlay-1.54، يمكنك عرض "Cover Art" المصاحب من مصادر مثل Apple Music في وضع الصوت فقط (ALAC): قم بتشغيل " uxplay -ca
" في الخلفية، ثم قم بتشغيل عارض الصور مع إعادة التحميل التلقائي الميزة: مثال هو "feh": تشغيل " feh -R 1
" في المقدمة؛ قم بإنهاء feh ثم Uxplay باستخدام " ctrl-C fg ctrl-C
".
افتراضيًا، يستخدم GStreamer خوارزمية للبحث عن أفضل "مدخل فيديو" (مصطلح GStreamer يشير إلى برنامج تشغيل الرسومات لعرض الصور) لاستخدامه. يمكنك تجاوز ذلك باستخدام خيار uxplay -vs
. تعتمد منافذ الفيديو المتوفرة على نظام التشغيل وأجهزة الرسومات لديك: استخدم " gst-inspect-1.0 | grep sink | grep -e video -e Video -e image
" لمعرفة ما هو متاح. بعض الإمكانيات على Linux/*BSD هي:
glimagesink (OpenGL)، waylandsink
xviimagesink ، ximagesink (X11)
kmssink ، fbdevsink (رسومات وحدة التحكم بدون X11)
vaapisink (للرسومات المسرَّعة بأجهزة Intel/AMD)؛ بالنسبة لرسومات أجهزة NVIDIA (مع CUDA)، استخدم glimagesink مدمجًا مع " -vd nvh264dec
" (أو "nvh264sldec"، وهو متغير جديد سيصبح "nvh264dec" في GStreamer-1.24).
إذا كان الخادم "بلا رأس" (لا توجد شاشة متصلة، يعرض الصوت فقط) فاستخدم -vs 0
.
يبحث GStreamer أيضًا عن أفضل "موصل صوتي"؛ تجاوز اختياره باستخدام -as
. تشمل الاختيارات على نظام التشغيل Linux Pulsink، وAlsasink، وPipwiresink، وOSS4sink؛ تعرف على ما هو متاح مع gst-inspect-1.0 | grep sink | grep -e audio -e Audio
.
تتضمن إحدى المشكلات الشائعة محاولة GStreamer استخدام وحدة فك تشفير الفيديو h264 التي تم تكوينها بشكل غير صحيح أو غيابها (على سبيل المثال، VAAPI). جرب " uxplay -avdec
" لفرض فك تشفير فيديو البرنامج؛ إذا نجح هذا، فيمكنك محاولة إصلاح فك تشفير فيديو الأجهزة المتسارع إذا كنت في حاجة إليه، أو قم فقط بإلغاء تثبيت البرنامج الإضافي GStreamer vaapi.
راجع الاستخدام لمزيد من خيارات وقت التشغيل.
بالنسبة لفيديو Framebuffer (لنظام التشغيل Raspberry Pi OS "Lite" والتوزيعات الأخرى غير X11) استخدم KMS videosink "-vs kmssink" (تم كسر رابط فيديو DirectFB Framebuffer "dfbvideosink" على Pi، وsegfaults). في هذه الحالة، يجب عليك استخدام خيار "-vs kmssink" بشكل صريح، لأنه بدونه، لن تتمكن ميزة autovideosink من العثور على مقطع الفيديو الصحيح.
لا يوفر Raspberry Pi 5 فك تشفير الأجهزة H264 (ولا يحتاج إليه).
يجب أن يستخدم Pi Zero 2 W و3 Model B+ و4 Model B فك تشفير الأجهزة H264 بواسطة وحدة معالجة الرسومات من Broadcom، ولكنه يتطلب وحدة kernel خارج التيار bcm2835_codec يتم الاحتفاظ بها في شجرة Raspberry Pi kernel؛ التوزيعات المعروفة بتزويدها تشمل Raspberry Pi OS وUbuntu وManjaro-RPi4. استخدم فك تشفير البرنامج (الخيار -avdec) إذا لم تكن هذه الوحدة متوفرة.
يستخدم Uxplay المكوّن الإضافي Video4Linux2 (v4l2) من GStreamer-1.22 والإصدارات الأحدث للوصول إلى وحدة معالجة الرسومات، في حالة استخدام فك تشفير الأجهزة H264. يجب أن يحدث هذا تلقائيًا. يمكن استخدام الخيار -v4l2، ولكن من الأفضل عادةً السماح لـ GStreamer بالعثور على أفضل مسار فيديو بنفسه.
في التوزيعات الأقدم (GStreamer < 1.22)، يحتاج المكون الإضافي v4l2 إلى تصحيح: راجع UxPlay Wiki. يحتوي نظام Legacy Raspberry Pi OS (Bullseye) على نظام GStreamer-1.18.4 الذي تم تصحيحه جزئيًا والذي يحتاج إلى خيار uxplay -bt709 (ولا تستخدم -v4l2)؛ لا يزال من الأفضل تطبيق التصحيح الكامل من UxPlay Wiki في هذه الحالة.
بالنسبة لنظام التشغيل Raspberry Pi OS (Buster) "المزدوج القديم"، لا يوجد تصحيح لـ GStreamer-1.14. بدلاً من ذلك، قم أولاً بإنشاء إصدار جديد كامل من GStreamer-1.18.6 من المصدر باستخدام هذه التعليمات قبل إنشاء UxPlay.
يمكن لـ Raspberry Pi 3 Model B+ الذي يعمل بنظام تشغيل 32 بت أيضًا الوصول إلى وحدة معالجة الرسومات باستخدام البرنامج الإضافي GStreamer OMX (استخدم الخيار " -vd omxh264dec
")، ولكن تم كسر هذا بواسطة البرامج الثابتة Pi 4 Model B. تمت إزالة دعم OMX من Raspberry Pi OS (Bullseye)، ولكنه موجود في Buster.
يتم دعم فيديو H265 (4K) مع فك تشفير الأجهزة بواسطة وحدة معالجة الرسومات Broadcom على طرز Raspberry Pi 5، وكذلك على طراز Raspberry Pi 4 B. بينما يبدو أن GStreamer يستفيد من فك تشفير الأجهزة هذا، إلا أن سرعة العرض المُرضية لفيديو 4K بواسطة UxPlay على لم يتم تحقيق نماذج Raspberry Pi هذه بعد. الخيار "-h265" مطلوب لتفعيل دعم h265. يُفضل اتصال إيثرنت سلكي في هذا الوضع (وقد يطلبه العميل).
حتى مع فك تشفير فيديو GPU، قد يتم إسقاط بعض الإطارات بواسطة الطرز ذات الطاقة المنخفضة للحفاظ على مزامنة الصوت والفيديو باستخدام الطوابع الزمنية. في نظام التشغيل Legacy Raspberry Pi OS (Bullseye)، تسمح "خيارات الأداء" raspi-config بتحديد مقدار الذاكرة المخصصة لوحدة معالجة الرسومات، ولكن يبدو أن هذا الإعداد غائب في Bookworm (ولكن لا يزال من الممكن ضبطه على 128 ميجابايت على سبيل المثال عن طريق إضافة سطر "gpu_mem=128" في /boot/config.txt). يعمل جهاز Pi Zero 2 W (الذي يحتوي على ذاكرة بسعة 512 ميجابايت) بشكل جيد عند اختباره في إصدار 32 بت من Bullseye أو Bookworm Lite مع تخصيص 128 ميجابايت لوحدة معالجة الرسومات (يبدو أن الحجم الافتراضي هو 64 ميجابايت).
خيارات uxplay الأساسية لـ R Pi هي uxplay [-vs
. يكون الاختيار
= glimagesink
مفيدًا في بعض الأحيان. باستخدام أداة تركيب الفيديو Wayland، استخدم
= waylandsink
. مع فيديو Framebuffer، استخدم
= kmssink
.
ssh user@remote_host
export DISPLAY=:0
nohup uxplay [options] > FILE &
سيتم تشغيل الصوت والفيديو على المضيف البعيد؛ سيستمر "nohup" في تشغيل uxplay في حالة إغلاق جلسة ssh. يتم حفظ الإخراج الطرفي في FILE (والذي يمكن أن يكون /dev/null لتجاهله)
ملاحظة: يتم تضمين ميزة خادم AirPlay الأصلي في MacOS 12 Monterey ، ولكنها تقتصر على الأجهزة الحديثة. يمكن أن يعمل Uxplay على أنظمة MacOS القديمة التي لن تكون قادرة على تشغيل Monterey ، أو يمكن تشغيل Monterey ولكن ليس البث.
تفترض هذه الإرشادات الخاصة بـ MacOS أن أدوات مطور سطر أوامر Xcode مثبتة (إذا تم تثبيت Xcode ، فتح المحطة ، اكتب "Sudo Xcode-Select-install" وقبول الشروط).
من المفترض أيضًا أن يتم تثبيت CMake> = 3.13: يمكن القيام بذلك باستخدام Macports Mactors ( sudo port install cmake
) أو Homebrew ( brew install cmake
) ، أو عن طريق تنزيل من https://cmake.org/download/. قم أيضًا بتثبيت git
إذا كنت ستستخدمه لجلب Uxplay.
قم بتثبيت Libplist التالي و Openssl-3.x. لاحظ أنه سيتم استخدام الإصدارات الثابتة من هذه المكتبات في بناء MacOS ، بحيث يمكن إلغاء تثبيتها بعد بناء Uxplay ، إذا كنت ترغب في ذلك.
إذا كنت تستخدم Homebrew: brew install libplist openssl@3
إذا كنت تستخدم macports: sudo port install libplist-devel openssl3
خلاف ذلك ، قم ببناء libplist و OPENSSL من المصدر: انظر التعليمات القريبة من نهاية هذه القراءة ؛ يتطلب أدوات التطوير (AutoconF ، Automake ، Libtool ، وما إلى ذلك ) لتثبيت.
بعد ذلك ، احصل على أحدث إصدار من MacOS من Gstreamer-1.0.
باستخدام Gstreamer "الرسمي" (الموصى به لكل من Macports ومستخدمي Homebrew) : قم بتثبيت إصدار Gstreamer لـ MacOS من https://gstreamer.freedesktop.org/download/. (يحتوي هذا الإصدار على PKG-Config الخاص به ، لذلك لا يتعين عليك تثبيت واحدة.) قم بتثبيت كل من حزم Gstreamer-1.0 و Gstreamer-1.0. بعد التنزيل ، انقر فوقهم على التثبيت (يتم تثبيته على /library/frameworks/gstreamer.framework). يجب ألا يقوم مستخدمو Homebrew أو MacPorts بتثبيت (أو يجب إلغاء تثبيته) Gstreamer المقدم من مدير الحزمة ، إذا استخدموا الإصدار "الرسمي".
باستخدام Homebrew's Gstreamer : هناك حاجة إلى PKG-Config: ("Brew تثبيت PKG-Config Gstreamer"). يؤدي هذا إلى تثبيت عدد كبير من الحزم الإضافية بواسطة Homebrew كتبعيات. تمت إعادة صياغة تثبيت Gstreamer Homebrew مؤخرًا في "صيغة واحدة" تدعى gstreamer
، والتي تعمل الآن دون الحاجة إلى ضبط GST_Plugin_Path في Enviroment. يقوم Homebrew بتثبيت GStreamer إلى (HOMEBREW)/lib/gstreamer-1.0
حيث (HOMEBREW)/*
هو /opt/homebrew/*
على macs silicon Apple ، و /usr/local/*
on intel macs ؛ لا تضع أي ملحقات إضافية غير متوفرة (التي تبنيها بنفسك) هناك ، وبدلاً من ذلك ، قم بتعيين GST_Plugin_Path للإشارة إلى موقعها (لا يوفر Homebrew gstreamer كامل ، ولكن يبدو أنه يحتوي على كل ما هو مطلوب لـ Uxplay).
باستخدام Gstreamer المثبت من Macports : لا ينصح بذلك ، حيث أن MacTors Gstreamer حاليًا قديم (v1.16.2) ، غير محافظ ، ومصمم لاستخدام x11:
(إذا كنت ترغب حقًا في استخدام MacPorts Gstreamer-1.16.2 ، قم بتثبيت PKGConf ("Sudo Port تثبيت PKGConf") ، ثم "Sudo Port Port Gstreamer1-GST-Pase-Base Gstreamer1-GST-Plugins-Gstreamer1-GST-Plugins -bad gstreamer1-gst-libav ". لدعم x11 على macOS ، تجميع Uxplay باستخدام خيار cmake خاص -DUSE_X11=ON
، وقم بتشغيله من محطة Xquartz مع -VS XIMAGESIND uxplay -s 800x600
بعد تثبيت Gstreamer ، قم ببناء وتثبيت Uxplay: افتح محطة وتغييرها إلى دليل مصدر Uxplay ("Uxplay-Master" لتنزيلات zipfile ، "Uxplay" لتنزيلات "git clone") وإنشاء/تثبيت مع "cmake. ؛ make ؛ Sudo جعل التثبيت "(كما هو الحال مع Linux).
يكشف تشغيل UXPlay أثناء التحقق من تحذيرات GStreamer (قم بذلك باستخدام "Export GST_DEBUG = 2" قبل Runnng uxplay) أنه من خلال التخفيض الافتراضي (نظرًا لأن Uxplay 1.64) يستخدم الطابع الزمني لمزامنة الفيديو ، يتم إسقاط العديد من أطر الفيديو (فقط على MACOS) ، ربما بسبب خطأ آخر (حول videometa) الذي يظهر في تحذيرات gstreamer. التوصية: استخدم خيار UXPlay الجديد "No Timestamp" -vsync no
" (يمكنك إضافة سطر" VSYNC NO "في ملف تكوين UXPlayRC).
على جهاز MacOS مع هذا التثبيت لـ GStreamer ، يبدو أن مقاطع الفيديو الوحيدة المتاحة هي مفاهيم (الاختيار الافتراضي الذي تم إجراؤه بواسطة AutoVideosink) و Osxvideosink. لا يعرض عنوان النافذة اسم خادم AirPlay ، لكن النافذة مرئية لتطبيقات مشاركة الشاشة (على سبيل المثال ، التكبير). يبدو أن Audiosink الوحيد المتاح هو Osxaudiosink.
يتم استخدام الخيار -NC دائمًا ، سواء تم تحديده أم لا. هذا حل بديل لمشكلة مع Gstreamer Videosinks على MacOS: إذا تم تدمير خط أنابيب Gstreamer أثناء ظهور نافذة المرآة ، يحدث Segfault.
في حالة Grimagesink ، لا تؤثر إعدادات الدقة "-S WXH" على حجم نافذة OpenGL Mirror الأولي (الصغير) ، ولكن يمكن توسيع النافذة باستخدام الماوس أو لوحة التتبع. على النقيض من ذلك ، فإن نافذة تم إنشاؤها باستخدام "-vs osxvideosink" كبيرة في البداية ، ولكن لها نسبة العرض إلى الارتفاع الخاطئة (صورة ممتدة) ؛ في هذه الحالة ، تتغير نسبة العرض إلى العرض عندما يتم تغيير عرض النافذة عن طريق سحب جانبها ؛ يمكن استخدام الخيار -vs "osxvideosink force-aspect-ratio=true"
لجعل النافذة لها نسبة العرض إلى الارتفاع الصحيحة عند فتحها لأول مرة.
قم بتنزيل وتثبيت Bonjour SDK لنظام التشغيل Windows V3.0 . يمكنك تنزيل SDK دون أي تسجيل في softpedia.com ، أو الحصول عليها من موقع Apple الرسمي https://developer.apple.com/download (تجعلك Apple تسجل كمطور للوصول إليه من موقعه). يجب أن يقوم هذا بتثبيت Bonjour SDK C:Program FilesBonjour SDK
.
(هذا مخصص للنوافذ 64 بت ؛ يجب أن يكون إنشاء نوافذ 32 بت ممكنة ، ولكن لم يتم اختبار .msys2.org/. اقبل موقع التثبيت الافتراضي C:mysys64
.
يتم تثبيت حزم MSYS2 مع متغير من مدير حزمة "Pacman" المستخدم بواسطة Arch Linux. افتح محطة "MSYS2 MINGW64" من علامة التبويب MSYS2 في قائمة Windows Start ، وقم بتحديث تثبيت MSYS2 الجديد باستخدام "Pacman -syu". ثم قم بتثبيت برنامج التحويل البرمجي Mingw-64 و Cmake
pacman -S mingw-w64-x86_64-cmake mingw-w64-x86_64-gcc
سيتم تثبيت المترجم الذي يحتوي على جميع التبعيات المطلوبة في دليل MSYS64 ، مع المسار الافتراضي C:/msys64/mingw64
. سنقوم ببساطة ببناء uxplay من سطر الأوامر في بيئة MSYS2 (هذا يستخدم " ninja
" بدلاً من " make
" لنظام الإنشاء).
قم بتنزيل أحدث uxplay من github (لاستخدام git
، وتثبيته مع pacman -S git
، ثم " git clone https://github.com/FDH2/UxPlay
") ، ثم تثبيت uxplay تبعيات (تم تثبيت OpenSSL بالفعل مع msys2):
pacman -S mingw-w64-x86_64-libplist mingw-w64-x86_64-gstreamer mingw-w64-x86_64-gst-plugins-base
إذا كنت تحاول نظام بناء Windows مختلف ، فإن إصدارات MSVC من GSTreamer للنوافذ متوفرة من موقع Gstreamer الرسمي ، ولكن تم اختبار Mingw 64 بت على MSYS2 فقط.
CD إلى دليل مصدر UXPlay ، ثم " mkdir build
" و " cd build
". تفترض عملية الإنشاء أن Bonjour SDK مثبتة على C:Program FilesBonjour SDK
. إذا كان في مكان آخر ، فقم بتعيين Enviroment Variable Bonjour_sdk_home للإشارة إلى موقعه. ثم بناء uxplay مع
cmake ..
ninja
على افتراض عدم وجود خطأ في أي من هذه الأشياء ، فستقوم ببناء UXPlay القابلة للتنفيذ. exe في دليل ("build") الحالي. لا تتوفر ميزات "Sudo Make Install" و "Sudo Make Uninstall" المقدمة في المباني الأخرى على Windows ؛ بدلاً من ذلك ، تحتوي بيئة MSYS2 على /mingw64/...
ويمكنك تثبيت uxplay.exe القابلة للتنفيذ في C:/msys64/mingw64/bin
(بالإضافة إلى manpage والوثائق في C:/msys64/mingw64/share/...
) مع
cmake --install . --prefix /mingw64
لتكون قادرًا على عرض Manpage ، تحتاج إلى تثبيت مشاهد ManPage مع " pacman -S man
".
لتشغيل uxplay.exe ، تحتاج إلى تثبيت بعض حزم المكون الإضافي Gstreamer مع pacman -S mingw-w64-x86_64-gst-
، حيث تم تقديم الحزم المطلوبة
بواسطة
يتم إدراج حزم مكونات مكونات مكونة من MSYS2 GSTEAMER الأخرى التي قد تستخدمها في حزم MSYS2.
ستحتاج أيضًا إلى منح إذن إلى UXPlay.exe القابل للتنفيذ uxplay للوصول إلى البيانات من خلال جدار حماية Windows. قد يتم عرض خيار القيام بذلك تلقائيًا عند تشغيل Uxplay لأول مرة ، أو قد تحتاج إلى القيام بذلك باستخدام إعدادات Windows-> التحديث والأمان-> أمان Windows-> حماية جدار الحماية وحماية الشبكة-> السماح للتطبيق من خلال جدار الحماية . إذا كانت أعلام حماية الفيروس الخاصة بك uxplay.exe "مشبوهة" (ولكن بدون توقيع برامج ضارة حقيقية) ، فقد تحتاج إلى إعطائها استثناءً.
اختبر الآن عن طريق تشغيل " uxplay
" (في نافذة طرفية MSYS2). إذا كنت بحاجة إلى تحديد Audiosink ، فهناك خياران رئيسيان على Windows: المكون الإضافي الأقدم DirectSound " -as directsoundsink
" ، والمكون الإضافي للجلسة الصوتية الأكثر حداثة (WASAPI) " -as wasapisink
" ، الذي يدعم خيارات إضافية مثل
uxplay -as 'wasapisink device=""'
حيث يحدد
جهاز صوتي متاح بواسطة GUID ، والذي يمكن العثور عليه باستخدام " gst-device-monitor-1.0 Audio
":
يحتوي على نموذج مثل {0.0.0.00000000}.{98e35b2b-8eba-412e-b840-fd2c2492cf44}
. إذا لم يتم تحديد " device
" ، فسيتم استخدام جهاز الصوت الافتراضي.
إذا كنت ترغب في تحديد VideoSink باستخدام خيار -vs
، glimagesink
بعض الخيارات لـ
هي d3d11videosink
و d3dvideosink
و gtksink
.
-vs "d3d11videosink fullscreen-toggle-mode=property fullscreen=true"
مزيج مع الخيار -vs "d3d11videosink fullscreen-toggle-mode=alt-enter"
. للراحة ، ستتم إضافة هذه الخيارات إذا تم استخدام فقط -vs d3d11videosink
مع أو بدون خيار شاشة ملء الشاشة "-fs". (قد يرغب مستخدمو Windows في إضافة " vs d3d11videosink
" (بدون أولي " -
") إلى ملف خيارات بدء التشغيل Uxplay ؛ انظر "Man Uxplay" أو "Uxplay -H".) يمكن أيضًا تشغيل uxplay.exe القابلة للتنفيذ بدون بيئة MSYS2 ، في محطة Windows ، مع C:msys64mingw64binuxplay
.
خيارات:
-
") في ملف بدء التشغيل uxplay (إما المعطى بواسطة متغير البيئة $UXPLAYRC
، أو ~/.uxplayrc
أو ~/.config/uxplayrc
) ؛ يتم التعامل مع الخطوط التي تبدأ بـ " #
" كتعليقات ، وتجاهلها. تحل خيارات سطر الأوامر محل الخيارات في ملف بدء التشغيل.-n server_name (افتراضي: uxplay) ؛ سيكون اسم HostName server_name@ هو الاسم الذي يظهر يقدم خدمات AirPlay إلى iPad و iPhone وما إلى ذلك ، حيث يكون اسم المضيف هو اسم الخادم الذي يقوم بتشغيل Uxplay. سيكون هذا الآن هو الاسم الموضح فوق نافذة عرض المرآة (X11).
-NH لا تُلحق "@ assname " في نهاية اسم خادم AirPlay.
-H265 قم بتفعيل "ميزات ScreenMulticodec" (AirPlay "Bit 42) لقبول فيديو H265 (4K/HEVC) بالإضافة إلى H264 Video (1080p) في وضع Mirror الشاشة. عند استخدام هذا الخيار ، يتم إنشاء اثنين من خطوط أنابيب الفيديو (واحدة لـ H264 ، واحد لـ H265). إذا كانت أي مكونات Gstreamer في خط الأنابيب محددًا لـ H264 أو H265 ، فسيتم استخدام الإصدار الصحيح في كل خط أنابيب. يفضل اتصال Ethernet لخادم العميل السلكي على WiFi للفيديو 4K ، وقد يكون من المطلوب من قبل العميل. فقط أجهزة Apple الحديثة (M1/M2 Macs أو iPads ، وبعض أجهزة iPhone) يمكنها إرسال فيديو H265 إذا تم طلب حل "-S WXH" مع H> 1080. يغير خيار "-H265" الدقة الافتراضية ("-S" الخيار من 1920 × 1080 إلى 3840 × 2160 ، ويترك الحد الأقصى للإطار الافتراضي ("-fps") في 30 إطارًا في الثانية.
-Pin [nnnn] : (منذ الإصدار 1.67) استخدم مصادقة "PIN" على طراز Apple (لمرة واحدة) عندما يتصل عميل جديد لأول مرة: يتم عرض رمز دبوس من أربعة أرقام على المحطة ، والعميل تعرض الشاشة موجه تسجيل الدخول لإدخال هذا. عند استخدام "-pin" في حد ذاته ، يتم اختيار رمز دبوس عشوائي جديد لكل مصادقة ؛ إذا تم استخدام "-pin nnnn" (على سبيل المثال ، "-pin 3939") ، فسيقوم هذا بتعيين رمز ثابت غير متغير. يضيف المصادقة الخادم إلى قائمة "الخوادم الموثوقة" الخاصة بالعميل ولن يحتاج العميل إلى إعادة صياغة شريطة أن تظل المفاتيح العامة العميل والخادم دون تغيير. (بشكل افتراضي منذ الإصدار 1.68 ، يتم إنشاء مفتاح الخادم العام من عنوان MAC ، والذي يمكن تغييره باستخدام خيار -M ؛ انظر خيار المفتاح لطريقة بديلة لتوليد المفاتيح). (أضف سطر "PIN" في ملف بدء التشغيل Uxplay إذا كنت ترغب في استخدام خادم Uxplay لاستخدام بروتوكول مصادقة PIN).
-reg [ اسم الملف ] : (منذ V1.68). إذا تم استخدام "-pin" ، فإن هذا الخيار يحتفظ بسجل لـ "العملاء الموثوق بهم" المعتمدين في $ home/.uxplay.register (أو اختياريًا ، في اسم الملف ). بدون هذا الخيار ، يتم الوثوق بالعملاء الذين يتخطون مصادقة الدبوس ولا يتم فحصهم. قد يكون هذا الخيار مفيدًا إذا تم استخدام Uxplay في بيئة عامة أكثر ، لتسجيل تفاصيل العميل ؛ السجل هو نص ، سطر واحد لكل عميل ، مع مفتاح العميل العام (تنسيق BASE-64) ومعرف الجهاز واسم الجهاز ؛ التعليق على (مع "#") أو حذف رسائل إلغاء مرشحات السطر العميل المقابل (انظر الخيارات -rurtrict ، -lock ، -السماح لمزيد من الطرق للتحكم في وصول العميل). (أضف سطر "Reg" في ملف بدء التشغيل إذا كنت ترغب في استخدام هذه الميزة.)
-vsync [x] (في وضع المرآة :) يستخدم هذا الخيار ( الآن الافتراضي ) الطوابع الزمنية لمزامنة الصوت مع الفيديو على الخادم ، مع تأخير صوتي اختياري في ميلي ثانية ( X = "20.5" يعني 0.0205 ثانية تأخير: يُسمح بتأخيرات إيجابية أو سلبية أقل من ثانية.) هناك حاجة إلى أنظمة الطاقة المنخفضة مثل Raspberry Pi بدون فك تشفير الفيديو.
-vsync no (في وضع المرآة :) هذا يؤدي إلى إيقاف التزامن الصوتي-video المستند إلى الطابع الزمني ، واستعادة السلوك الافتراضي قبل uxplay-1.64. يبدو أن أنظمة سطح المكتب القياسية تعمل بشكل جيد دون استخدام الطوابع الزمنية: هذا الوضع مناسب لـ "البث المباشر" مثل استخدام Uxplay كشاشة ثانية لجهاز كمبيوتر Mac ، أو مراقبة كاميرا ويب ؛ مع ذلك ، لا يتم إسقاط إطارات الفيديو.
-async [x] (في وضع الصوت فقط (ALAC) :) يستخدم هذا الخيار الطوابع الزمنية لمزامنة الصوت على الخادم مع الفيديو على العميل ، مع تأخير صوتي اختياري في المللي ثانية (العشرية) ( x = "20.5" يعني 0.0205 تأخير الثواني: يتم السماح بتأخير إيجابي أو سلبي أقل من ثانية.) نظرًا لأن العميل يضيف تأخير فيديو لحساب الكمون ، فإن الخادم الموجود في وضع async يضيف صوتًا مكافئًا التأخير ، مما يعني أن التغييرات الصوتية مثل الإيقاف المؤقت أو تغيير المسار لن تدخل سارية المفعول على الفور. قد يتم تخفيف هذا من حيث المبدأ باستخدام إعداد زمن الوصول إلى -al
إلى تغيير الكمون (الافتراضي 0.25 ثانية) التي يوفرها الخادم إلى العميل ، ولكن في الوقت الحالي ، لا يبدو أن تغيير هذا له أي تأثير .
-لا . هذا هو لا يزال السلوك الافتراضي في وضع الصوت فقط ، ولكن قد يكون هذا الخيار مفيدًا كخيار لخط الأوامر لإيقاف خيار -async
في ملف تكوين "uxplayrc".
-DB LOW [: HIVE ] RESCALES توهين التحكم في حجم الهواء (الكسب) من -30DB: 0DB إلى LOW : 0DB أو LOW : High . يجب أن يكون الحد الأدنى المنخفض سلبيًا (التوهين) ؛ الحد الأعلى العالي يمكن أن يكون إما علامة. (يقيد GSTreamer التغذية ذات الحجم المرتفع بحيث لا يمكن أن يتجاوز +20dB). إن عملية إعادة القياس "مسطحة" ، بحيث يتم ترجمة -إلى -50: 10: تغير في توهين الهواء بمقدار -7dB إلى -7 × (60/30) = -14 ديسيبل التوهين ، والحجم القصوى (AirPlay 0dB) هو زيادة 10 ديسيبل ، وسيصبح AirPlay -30dB -50dB. لاحظ أن الحد الأدنى لقيمة AirPlay (-30dB بالضبط) تتم ترجمة إلى "كتم".
-يوفر Tapper ملفًا "مدببًا" لسيطرة Airplay Control (مطابقة واحدة تسمى "DASL-Tapering" في shairport-sync): في كل مرة طول منزلق وحدة التخزين (أو عدد الخطوات فوق كتم ، حيث 16 خطوة = كاملة يتم تخفيض حجم) بنسبة 50 ٪ ، ويصبح الحجم المتصور النصف (توهين 10 ديسيبل). (يتم تعديل هذا بأحجام منخفضة ، لاستخدام وحدة التخزين "غير المشقوق" إذا كان أعلى صوتًا.)
-S WXH EG -S 1920X1080 (= "1080p") ، قرارات العرض الافتراضية والارتفاع في البكسلات للفيديو H264. (يصبح الافتراضي 3840x2160 (= "4K") عند استخدام خيار -H265.) هذا مجرد طلب إلى عميل AirPlay ، وربما لن يكون الدقة النهائية التي تحصل عليها. W و H هي أرقام كاملة مع أربعة أرقام أو أقل. لاحظ أن حجم بكسل الارتفاع هو التحكم الذي يستخدمه العميل لتحديد تنسيق البث ؛ يتم تعديل العرض ديناميكيًا على شكل الصورة (تنسيق صورة أو منظر طبيعي ، اعتمادًا على كيفية احتجاز جهاز iPad ، على سبيل المثال).
-S WXH@R على النحو الوارد أعلاه ، ولكن أيضًا يُبلغ عميل AirPlay عن معدل تحديث الشاشة في الشاشة. الافتراضي هو r = 60 (60 هرتز) ؛ يجب أن يكون R عدد كامل أقل من 256.
-O تشغيل خيار "مفرط" لإطار العرض. هذا يقلل من دقة الصورة باستخدام بعض وحدات البكسل المطلوبة من قبل الخيار -WXH (أو قيمها الافتراضية 1920x1080) عن طريق إضافة إطار حدود فارغ من وحدات البكسل غير المستخدمة (والتي ستضيع في شاشة كاملة الشاشة التي تفرط عرضه Gstreamer). التوصية: لا تستخدم هذا الخيار ما لم يكن هناك سبب خاص لاستخدامه.
-FS يستخدم وضع ملء الشاشة ، ولكنه يعمل فقط مع X11 و Wayland و VAAPI و D3D11 (Windows).
-P يتيح لك تحديد منافذ الشبكة المستخدمة بواسطة Uxplay (يجب فتحها إذا كان الخادم وراء جدار الحماية). في حد ذاته ، يقوم -P بتعيين منافذ "Legacy" TCP 7100 ، 7000 ، 7001 ، UDP 6000 ، 6001 ، 7011. -PN (على سبيل المثال -P 35000) تقوم بتعيين منافذ TCP و UDP N ، N+1 ، N+2. -P N1 ، N2 ، N3 (القيم المفصلية للفاصلة) يعين كل منفذ بشكل منفصل ؛ -P N1 ، N2 يقوم بتعيين المنافذ N1 ، N2 ، N2+1. -P TCP N أو -P UDP N يعمل فقط على منافذ TCP أو UDP. يجب أن تكون الموانئ في النطاق [1024-65535].
إذا لم يتم استخدام خيار -P ، يتم اختيار المنافذ ديناميكيًا (بشكل عشوائي) ، والتي لن تعمل إذا كان جدار الحماية قيد التشغيل.
-AVDEC قوات استخدام البرامج H264 فك تشفير باستخدام عنصر GSTreamer AVDEC_H264 (فك تشفير LIBAV H264). يجب أن يمنع هذا الخيار AutoVideOsink اختيار مكون إضافي مكون من أجهزة Videosink مثل Vaapisink.
-vp parser يختار عنصر محلل H264 لخط أنابيب Gstreamer ، الافتراضي هو H264Parse. باستخدام عروض الأسعار "..." يسمح بإضافة خيارات.
-يختار وحدة فك ترميز VD عنصر فك ترميز خط أنابيب Gstreamer H264 ، بدلاً من القيمة الافتراضية "decodebin" التي تختارها لك. يتم فك تشفير البرمجيات بواسطة AVDEC_H264 ؛ تشمل أجهزة تجزئة الأجهزة المختلفة: VAAPIH264DEC ، NVDEC ، NVH264DEC ، V4L2H264DEC (تتطلب هذه الأجهزة المناسبة متاحة). باستخدام علامات الاقتباس "..." يتيح تضمين بعض المعلمات مع اسم وحدة فك الترميز.
-يختار محول VC عنصر Videoconverter الخاص بخيل Gstreamer ، بدلاً من القيمة الافتراضية "videoconvert". عند استخدام Video4Linux2 Dected Hardware بواسطة GPU ، ستستخدم -vc v4l2convert
أيضًا وحدة معالجة الرسومات لتحويل الفيديو. باستخدام علامات الاقتباس "..." يتيح تضمين بعض المعلمات مع اسم المحول.
-VS Videosink تختار Gstreamer Videosink ، بدلاً من القيمة الافتراضية "AutoVideOsink" التي تختارها لك. بعض خيارات Videosink هي: Ximagesink و XVimagesink و Vaapisink (لرسومات Intel) و Gtksink و Gtksinking و Waylandsink و OsxVideosink (ل MACOS) أو KMSSINK (للأنظمة بدون X11 ، مثل Raspberry Pi OS) FPS). باستخدام عروض الأسعار "..." يتيح تضمين بعض المعلمات مع اسم Videosink. على سبيل المثال ، يتم دعم وضع ملء الشاشة بواسطة البرنامج المساعد Vaapisink ، ويتم الحصول عليه باستخدام -vs "vaapisink fullscreen=true"
؛ هذا يعمل أيضا مع waylandsink
. بناء جملة مثل هذه الخيارات خاصة بمكون إضافي معين (انظر وثائق Gstreamer) ، وقد لا تعمل بعض خيارات Videosink على نظامك.
-VS 0 يقمع عرض الفيديو المتدفق. في وضع المرآة ، لا تزال شاشة العميل تتناقص بمعدل أقل من إطار واحد في الثانية ، ولكن لا يتم عرضه أو عرضه. يجب دائمًا استخدام هذا الخيار إذا كان الخادم "مقطوع الرأس" (بدون شاشة مرفقة لعرض الفيديو) ، ويستخدم فقط لتقديم الصوت ، والذي سيكون صوتًا مضغوطًا على AAC في وضع المرآة مع فيديو غير متميز ، و ALAC فائق الجودة Apple Appless Audio في وضع AirPlay Audio فقط.
-V4L2 إعدادات الفيديو للأجهزة H264 فك تشفير الفيديو في GPU بواسطة Video4Linux2. أي ما يعادل -vd v4l2h264dec -vc v4l2convert
.
-BT709 حل بديل لفشل المكون الإضافي Video4Linux2 الأقدم في التعرف على استخدام Apple لمتغير "اللون الكامل" غير المألوف (ولكنه مسموح به) لمعايير اللون BT709 للتلفزيون الرقمي. لم يعد هناك حاجة إلى هذا من قِبل Gstreamer-1.20.4 والركود الخلفي منه.
-RPI يعادل "-v4l2" (غير صالح لنموذج Raspberry PI 5 ، وإزالته في Uxplay 1.67)
-rpigl يعادل "-rpi -vs glimagesink". (تمت إزالته منذ Uxplay 1.67)
-RPIFB يعادل "-RPI -VS KMSSINK" (تمت إزالته منذ Uxplay 1.67)
-RPIWL يعادل "-RPI -VS Waylandsink". (تمت إزالته منذ Uxplay 1.67)
-حيث تختار Audiosink مجموعة Gstreamer Audiosink ، بدلاً من السماح لـ AutoAudiosink باختيارها لك. بعض خيارات Audiosink هي: Pulsesink ، alsasink ، pipewiresink ، Osssink ، OSS4Sink ، Jackaudiosink ، Osxaudiosink (لـ MacOS) ، Wasapisink ، DirectOndsink (للنوافذ). قد يسمح باستخدام علامات الاقتباس "..." ببعض المعلمات الاختيارية (على سبيل المثال -as "alsasink device=..."
لتحديد جهاز إخراج غير متفرغ). بناء جملة هذه الخيارات خاصة بمكون إضافي معين (انظر وثائق Gstreamer) ، وقد لا تعمل بعض خيارات Audiosink على نظامك.
-as 0 (أو فقط -A ) يقمع تشغيل الصوت المتدفق ، ولكن يعرض الفيديو المتدفق.
-ال X يحدد زمن الوصول الصوتي X في ثواني (عشرية) في الصوت فقط (ALAC) ، والتي يتم الإبلاغ عنها إلى العميل. يُسمح بالقيم في النطاق [0.0 ، 10.0] ثواني ، وسيتم تحويلها إلى عدد كامل من microseconds. الافتراضي هو 0.25 ثانية (250000 USEC). (ومع ذلك ، يبدو أن العميل يتجاهل هذا الكمون المبلغ عنه ، لذلك يبدو هذا الخيار غير وظيفي.)
يوفر اسم FileName CA ملفًا (حيث يمكن أن يتضمن اسم الملف مسارًا كاملًا) يستخدم لإخراج "فن الغلاف" (من Apple Music ، وما إلى ذلك ) في وضع ALAC الصوت فقط. يتم كتابة هذا الملف بأحدث فن الغلاف عند وصوله. يتم التخلص من فن الغلاف (تنسيق JPEG) إذا لم يتم استخدام هذا الخيار. استخدم مع عارض صورة يعيد تحميل الصورة إذا تغيرت ، أو بانتظام ( على سبيل المثال مرة واحدة في الثانية.). لتحقيق ذلك ، قم بتشغيل " uxplay -ca [path/to/]filename &
" في الخلفية ، ثم قم بتشغيل عارض الصورة في المقدمة. على سبيل المثال ، باستخدام feh
كمشاهد: قم بتشغيل " feh -R 1 [path/to/]filename
" (في نفس النافذة الطرفية التي وضعت فيها Uxplay في الخلفية). لاستقالة ، استخدم ctrl-C fg ctrl-C
لإنهاء عارض الصورة ، وإحضار uxplay
إلى المقدمة ، وإنهائه أيضًا.
-يضع Reset N حدًا من إخفاقات المهلة المتتالية للعميل للرد على طلبات NTP من الخادم (يتم إرسالها كل 3 ثوان للتحقق مما إذا كان العميل لا يزال موجودًا ، ويتزامن معه). بعد إخفاقات N ، يُفترض أن يكون العميل غير متصل بالإنترنت ، وسيتم إعادة تعيين الاتصال للسماح بتوصيل جديد. القيمة الافتراضية لـ N هي 5 ؛ القيمة n = 0 تعني "لا حدود" على الموعد.
-Nofreeze يغلق نافذة الفيديو بعد إعادة التعيين بسبب مهلة NTP (الافتراضي هو ترك نافذة مفتوحة للسماح بإيواء أكثر سلاسة لنفس العميل). قد يكون هذا الخيار مفيدًا في وضع ملء الشاشة.
-NC يحافظ على uxplay السابق <1.45 سلوك لا يغلق نافذة الفيديو عندما يرسل العميل إشارة "توقف النسخ المتطابق". يتم استخدام هذا الخيار حاليًا افتراضيًا في MacOS ، حيث أن النافذة التي تم إنشاؤها في MacOS بواسطة Gstreamer لا تنتهي بشكل صحيح (تسبب segfault) إذا كانت لا تزال مفتوحة عند إغلاق خط أنابيب Gstreamer.
-لا تسقط الاتصال الحالي عندما يحاول عميل جديد الاتصال. بدون هذا الخيار ، يحافظ العميل الحالي على ملكية حصرية لـ Uxplay حتى يتم فصلها.
-رُهِم بتأكيد العملاء المسموح لهم بالاتصال بتلك المحددة بواسطة -allow
. يحتوي DeviceId على شكل عنوان MAC الذي يتم عرضه بواسطة Uxplay عندما يحاول العميل الاتصال ، ويبدو أنه غير قابل للتغيير. يحتوي على التنسيق XX:XX:XX:XX:XX:XX
، x = 0-9 ، af ، وربما يكون عنوان MAC للأجهزة "true" للجهاز. لاحظ أن عملاء iOS يعرضون عمومًا "عناوين Wi_FI الخاصة" العشوائية المختلفة (عناوين MAC "المزيفة") لشبكات مختلفة (لأسباب خصوصية ، لمنع التتبع) ، والتي قد تتغير ، ولا تتنقل إلى جهاز DeviceId.
-لا يتم التأكيد على القيود (الافتراضي). هذا مفيد كوسيطة سطر الأوامر للإفراط في القيود المحددة في ملف بدء التشغيل.
-معرّف معرف يضيف DeviceId = معرف إلى قائمة العملاء المسموح بهم عند فرض قيود العميل. عادةً ما يكون هذا إدخالًا في ملف بدء تشغيل UxplayRC.
-معرف التعبير دائمًا عن حظر العملاء باستخدام DeviceId = معرف ، حتى عندما لا يتم فرض قيود العميل بشكل عام. عادةً ما يكون هذا إدخالًا في ملف بدء تشغيل UxplayRC.
-FPSDATA يحول مراقبة التقارير العادية حول أداء دفق الفيديو الذي يرسله العميل. سيتم عرض هذه في النافذة الطرفية إذا تم استخدام هذا الخيار. يتم تحديث البيانات من قبل العميل على فترات زمنية ثانية واحدة.
-FPS N يضع معدل إطار الحد الأقصى (في الإطارات في الثانية) لعميل AirPlay لدفق الفيديو ؛ يجب أن يكون N أقل من 256. (قد يختار العميل خدمة الفيديو بمعدل إطار أقل من هذا ؛ الافتراضي هو 30 إطارًا في الثانية). قد يكون الإعداد أقل من 30 إطارًا في الثانية مفيدًا لتقليل الكمون إذا كنت تقوم بتشغيل أكثر من مثيل من Uxplay في نفس الوقت. هذا الإعداد هو مجرد استشاري لجهاز العميل ، لذلك لن يجبر إعداد قيمة عالية إطارًا مرتفعًا. (يمكنك الاختبار باستخدام "-VS FPSDISPlaysink" لمعرفة ما يتم استلامه ، أو استخدام الخيار-FPSDATA الذي يعرض بيانات الأداء التي تم إرسالها بشكل مستمر من قبل العميل أثناء بث الفيديو.)
-f {h | v | i} تنفذ صورة "videoflip" تحويلات: h = flip flip (flip اليمنى اليمنى ، أو صورة المرآة) ؛ v = الوجه العمودي ؛ أنا = 180 درجة الدوران أو الانقلاب (وهو مزيج من H مع V).
-r {r | l} 90 درجة يمين (في اتجاه عقارب الساعة) أو اليسار (عكس اتجاه عقارب الساعة) ؛ يتم إجراء تحويلات الصور هذه بعد أي تحويلات -F .
-M [MAC] يغير عنوان MAC (معرف الجهاز) الذي يستخدمه UXPlay (الافتراضي هو استخدام عنوان MAC للأجهزة الحقيقية التي أبلغت عنها بطاقة شبكة الكمبيوتر المضيفة). (هناك حاجة إلى Server_name ، عناوين Mac مختلفة ، ومنافذ الشبكة لكل Uxplay إذا حاولت تشغيل أكثر من مثيل واحد من Uxplay على نفس الكمبيوتر.) إذا [Mac] (في النموذج xx: xx: xx: xx: xx: XX ، 6 Orm -hex Octets) لم يتم إعطاؤها ، يتم إنشاء عنوان MAC عشوائي. إذا فشل Uxplay في العثور على عنوان MAC الحقيقي لبطاقة الشبكة ، (بشكل أكثر تحديداً ، عنوان MAC المستخدم في واجهة الشبكة النشطة الأولى التي تم اكتشافه) سيتم استخدام عنوان MAC العشوائي حتى إذا لم يتم تحديد الخيار -M . (لاحظ أن عنوان MAC عشوائي سيكون مختلفًا في كل مرة يتم فيها بدء تشغيل UXPlay).
-key [ fileName ] : تم استبدال هذا الخيار (أكثر أمانًا) لإنشاء وتخزين مفتاح عام ثابت (مطلوب لخيار -Pin) افتراضيًا بطريقة (أقل أمانًا) تقوم بإنشاء مفتاح من معرف "الخادم" للخادم "(عنوان MAC ، الذي يمكن تغييره مع خيار -M ، بسهولة كخيار ملف بدء التشغيل). عند استخدام الخيار -key ، يتم إنشاء Keypair الذي تم إنشاؤه بشكل آمن وتخزينه في $HOME/.uxplay.pem
، إذا لم يكن هذا الملف موجودًا ، أو يقرأ منه ، إذا كان موجودًا. (اختياريًا ، يمكن تخزين المفتاح في اسم الملف .) هذه الطريقة أكثر أمانًا من الطريقة الافتراضية الجديدة ، (لأن معرف الجهاز يتم بثه في إعلان DNS_SD) ولكنه لا يزال يترك المفتاح الخاص المعرض لأي شخص يمكنه الوصول إلى ملف PEM . يجب تعيين هذا الخيار في ملف بدء تشغيل Uxplay كخط "مفتاح" أو " اسم ملف مفتاح" (بدون أولي "-") ، حيث يكون اسم الملف مسارًا كاملًا يجب أن يكون محاطًا في علامات الاقتباس ( "...."
) إذا أنه يحتوي على أي مساحات فارغة. نظرًا لأن الطريقة الافتراضية أبسط ، ومن غير المرجح أن يكون أمان وصول العميل إلى Uxplay مشكلة مهمة ، لم يعد خيار المفتاح موصى به .
-DACP [ FILENAME ] : تصدير العميل الحالي DACP-ID ومفتاح إعادة التمييز النشط إلى الملف: الافتراضي هو $ home/.uxplay.dacp. (يمكن تغييرها اختياريًا إلى اسم الملف ). يمكن استخدامها بواسطة تطبيقات التحكم عن بُعد. الملف عابر: موجود فقط أثناء توصيل العميل.
-vdmp Dumps H264 Video to FileDomeOdump.h264. -vdmp n Dumps لا يزيد عن وحدات n nal إلى videodump.x.h264 ؛ x = 1،2 ، ... يزيد في كل مرة تصل وحدة SPS/PPS NAL. لتغيير اسم FILEODUMP ، استخدم -vDMP [n] اسم الملف .
-DMP Dumps Audio لتقديم AudioDump.x.AAC (AAC-ELD Format Audio) ، Audiodump.alac (ALAC Format Audio) أو Audiodump.x.aud (Aother-Format Audio) ، حيث x = 1،2،3 ... يزيد في كل مرة يتغير تنسيق الصوت. -DMP N يقيد عدد الحزم التي تم إلقاؤها على ملف إلى n أو أقل. لتغيير اسم AudioDump ، استخدم -ADMP [n] اسم الملف . لاحظ أنه (على عكس الفيديو المُرفع) ، فإن الصوت المُرفع مفيدًا حاليًا فقط لتصحيح الأخطاء ، لأنه لم يتم تحريكه لجعله قابل للعب مع مشغلات الصوت القياسية.
-D تمكين ناتج التصحيح. ملاحظة: هذا لا يعرض خطأ Gstreamer أو رسائل تصحيح الأخطاء. لرؤية خطأ GSTreamer ورسائل التحذير ، قم بتعيين متغير البيئة GST_DEBUG مع "تصدير GST_DEBUG = 2" قبل تشغيل Uxplay. لرؤية رسائل معلومات gstreamer ، قم بتعيين GST_DEBUG = 4 ؛ لرسائل التصحيح ، GST_DEBUG = 5 ؛ زيادة هذا لرؤية المزيد من الأعمال الداخلية gstreamer.
ملاحظة: يتم تشغيل uxplay
من سطر أوامر طرفي ، ويتم كتابة رسائل إعلامية إلى المحطة.
فشل أحد المستخدمين (على Ubuntu) الذي تم العثور عليه في الرسائل حول الارتباط بـ "usr/local/lib/libcrypto.a" و "Zlib". هذا بسبب (بالإضافة إلى تثبيت Ubuntu القياسي لـ LIBSSL-DEV) ، لم يكن المستخدم على دراية بأن التثبيت الثاني مع Libcrypto في /usr /local كان موجودًا. الحل: عند وجود أكثر من تثبيت OpenSSL ، قم بتعيين متغير البيئة Open_SSL_ROOT_DIR للإشارة إلى التركيب الصحيح ؛ في Ubuntu 64 بت ، يتم ذلك عن طريق تشغيل export OPENSSL_ROOT_DIR=/usr/lib/X86_64-linux-gnu/
قبل تشغيل cmake.
مطلوب خدمة DNS_SD لاكتشاف خدمة ("Bonjour" أو "Zeroconf") لعمل Uxplay. على Linux ، سيتم توفيره عادةً بواسطة Avahi ، واستكشاف الأخطاء وإصلاحها ، يجب عليك استخدام أداة avahi-browse
. (قد تحتاج إلى تثبيت حزمة منفصلة تحمل اسمًا مثل avahi-utils
للحصول على هذا.)
على Linux ، تأكد من تثبيت Avahi ، وابدأ خدمة Avahi-Daemon على النظام الذي يعمل على تشغيل Uxplay (سيقوم التوزيع الخاص بك بتوثيق كيفية القيام بذلك ، على سبيل المثال: sudo systemctl
أو sudo service avahi-daemon
، مع وجود
واحد من التمكين والتعطيل والبدء والمكانة. /etc /avahi /، ابحث عنه مع " sudo find /etc -name avahi-daemon.conf
"): تأكد من أن "نشر النشر" ليس خيارًا محددًا). قد تستخدم بعض الأنظمة بدلاً من ذلك الخفي MDNSD كبديل لتوفير خدمة DNS-SD. (FreeBSD offers both alternatives, but only Avahi was tested; see here.)
If UxPlay stops with the "No DNS-SD Server found" message, this means that your network does not have a running Bonjour/zeroconf DNS-SD server. Before v1.60, UxPlay used to stall silently if DNS-SD service registration failed, but now stops with an error message returned by the DNSServiceRegister function: kDNSServiceErr_Unknown if no DNS-SD server was found: (A NixOS user found that in NixOS, this error can also occur if avahi-daemon service IS running with publishing enabled, but reports "the error disappeared on NixOS by setting services.avahi.openFirewall to true".) Other mDNS error codes are in the range FFFE FF00 (-65792) to FFFE FFFF (-65537), and are listed in the dnssd.h file. An older version of this (the one used by avahi) is found here. A few additional error codes are defined in a later version from Apple.
If UxPlay stalls without an error message and without the server name showing on the client , this is a network problem (if your UxPlay version is older than 1.60, it is also the behavior when no DNS-SD server is found.)
A useful tool for examining such network problems from the client end is the (free) Discovery DNS-SD browser available in the Apple App Store for both iOS (works on iPadOS too) and macOS.
If your router has this problem, a reported "fix" is to (at least on 5GHz) use fixed channel and/or fixed (not dynamic) channel width.
This is usually because Avahi is only using the "loopback" network interface, and is not receiving mDNS queries from new clients that were not listening when UxPlay started.
To check this, after starting uxplay, use the utility avahi-browse -a -t
in a different terminal window on the server to verify that the UxPlay AirTunes and AirPlay services are correctly registered (only the AirTunes service is used in the "Legacy" AirPlay Mirror mode used by UxPlay, but the AirPlay service is used for the initial contact).
The results returned by avahi-browse should show entries for uxplay like
+ eno1 IPv6 UxPlay AirPlay Remote Video local
+ eno1 IPv4 UxPlay AirPlay Remote Video local
+ lo IPv4 UxPlay AirPlay Remote Video local
+ eno1 IPv6 863EA27598FE@UxPlay AirTunes Remote Audio local
+ eno1 IPv4 863EA27598FE@UxPlay AirTunes Remote Audio local
+ lo IPv4 863EA27598FE@UxPlay AirTunes Remote Audio local
If only the loopback ("lo") entries are shown, a firewall on the UxPlay host is probably blocking full DNS-SD service, and you need to open the default UDP port 5353 for mDNS requests, as loopback-based DNS-SD service is unreliable.
If the UxPlay services are listed by avahi-browse as above, but are not seen by the client, the problem is likely to be a problem with the local network.
This shows that a DNS-SD service is working, clients hear UxPlay is available, but the UxPlay server is not receiving the response from the client. This is usually because a firewall on the server is blocking the connection request from the client. (One user who insisted that the firewall had been turned off turned out to have had two active firewalls ( firewalld and ufw ) both running on the server!) If possible, either turn off the firewall to see if that is the problem, or get three consecutive network ports, starting at port n, all three in the range 1024-65535, opened for both tcp and udp, and use "uxplay -pn" (or open UDP 7011,6001,6000 TCP 7100,7000,7001 and use "uxplay -p").
If you are really sure there is no firewall, you may need to investigate your network transmissions with a tool like netstat, but almost always this is a firewall issue.
If you do not see the message raop_rtp_mirror starting mirroring
, something went wrong before the client-server negotiations were finished. For such problems, use "uxplay -d " (debug log option) to see what is happening: it will show how far the connection process gets before the failure occurs. You can compare your debug output to that from a successful start of UxPlay in the UxPlay Wiki.
If UxPlay reports that mirroring started, but you get no video or audio, the problem is probably from a GStreamer plugin that doesn't work on your system (by default, GStreamer uses the "autovideosink" and "autoaudiosink" algorithms to guess what are the "best" plugins to use on your system). A different reason for no audio occurred when a user with a firewall only opened two udp network ports: three are required (the third one receives the audio data).
Raspberry Pi devices ( Pi 4B+ and earlier: this does not apply to the Pi 5, which does not provide hardware h264 decoding, and does not need it ) work best with hardware GPU h264 video decoding if the Video4Linux2 plugin in GStreamer v1.20.x or earlier has been patched (see the UxPlay Wiki for patches). This is fixed in GStreamer-1.22, and by backport patches from this in distributions such as Raspberry Pi OS (Bullseye): use option -bt709
with the GStreamer-1.18.4 from Raspberry Pi OS . This also needs the bcm2835-codec kernel module that is not in the standard Linux kernel (it is available in Raspberry Pi OS, Ubuntu and Manjaro).
-avdec
for software h264-decoding.Sometimes "autovideosink" may select the OpenGL renderer "glimagesink" which may not work correctly on your system. Try the options "-vs ximagesink" or "-vs xvimagesink" to see if using one of these fixes the problem.
Other reported problems are connected to the GStreamer VAAPI plugin (for hardware-accelerated Intel graphics, but not NVIDIA graphics). Use the option "-avdec" to force software h264 video decoding: this should prevent autovideosink from selecting the vaapisink videosink. Alternatively, find out if the gstreamer1.0-vaapi plugin is installed, and if so, uninstall it. (If this does not fix the problem, you can reinstall it.)
There are some reports of other GStreamer problems with hardware-accelerated Intel HD graphics. One user (on Debian) solved this with "sudo apt install intel-media-va-driver-non-free". This is a driver for 8'th (or later) generation "*-lake" Intel chips, that seems to be related to VAAPI accelerated graphics.
If you do have Intel HD graphics, and have installed the vaapi plugin, but -vs vaapisink
does not work, check that vaapi is not "blacklisted" in your GStreamer installation: run gst-inspect-1.0 vaapi
, if this reports 0 features
, you need to export GST_VAAPI_ALL_DRIVERS=1
before running uxplay, or set this in the default environment.
You can try to fix audio or video problems by using the " -as
" or " -vs
" options to choose the GStreamer audiosink or videosink , rather than letting GStreamer choose one for you. (See above, in Starting and running UxPlay for choices of
or
.)
The "OpenGL renderer" window created on Linux by "-vs glimagesink" sometimes does not close properly when its "close" button is clicked. (this is a GStreamer issue). You may need to terminate uxplay with Ctrl-C to close a "zombie" OpenGl window. If similar problems happen when the client sends the "Stop Mirroring" signal, try the no-close option "-nc" that leaves the video window open.
rm -rf ~/.cache/gstreamer-1.0/*
may be the solution to problems where gst-inspect-1.0 does not show a plugin that you believe is installed. The cache will be regenerated next time GStreamer is started. This is the solution to puzzling problems that turn out to come from corruption of the cache, and should be tried first. If UxPlay fails to start, with a message that a required GStreamer plugin (such as "libav") was not found, first check with the GStreamer tool gst-inspect-1.0 to see what GStreamer knows is available. (You may need to install some additional GStreamer "tools" package to get gst-inspect-1.0). For, eg a libav problem, check with " gst-inspect-1.0 libav
". If it is not shown as available to GStreamer, but your package manager shows the relevant package as installed (as one user found), try entirely removing and reinstalling the package. That user found that a solution to a " Required gstreamer plugin 'libav' not found " message that kept recurring was to clear the user's gstreamer cache.
If it fails to start with an error like ' no element "avdec_aac"
' this is because even though gstreamer-libav is installed. it is incomplete because some plugin features are missing: " gst-inspect-1.0 | grep avdec_aac
" will show if avdec_aac is available. Unlike other GStreamer plugins, the libav plugin is a front end to FFmpeg codecs which provide avdec_*.
Some distributions (RedHat, SUSE, etc) provide incomplete versions of FFmpeg because of patent issues with codecs used by certain plugins. In those cases there will be some "extra package" provider like RPM fusion (RedHat), packman (SUSE) where you can get complete packages (your distribution will usually provide instructions for this, Mageia puts them in an optional "tainted" repo) . The packages needed may be "ffmpeg*" or "libav*" packages: the GStreamer libav plugin package does not contain any codecs itself, it just provides a way for GStreamer to use ffmpeg/libav codec libraries which must be installed separately. For similar reasons, distributions may ship incomplete packages of GStreamer "plugins-bad". Use user on Fedora thought they had installed from rpmfusion, but the system had not obeyed: "Adding --allowerasing to the dnf command fixed it after a restart" .
starting with release UxPlay-1.65.3, UxPlay will continue to function, but without audio in mirror mode, if avdec_aac is missing.
To troubleshoot GStreamer execute "export GST_DEBUG=2" to set the GStreamer debug-level environment-variable in the terminal where you will run uxplay, so that you see warning and error messages; see GStreamer debugging tools for how to see much more of what is happening inside GStreamer. Run "gst-inspect-1.0" to see which GStreamer plugins are installed on your system.
Some extra GStreamer packages for special plugins may need to be installed (or reinstalled: a user using a Wayland display system as an alternative to X11 reported that after reinstalling Lubuntu 18.4, UxPlay would not work until gstreamer1.0-x was installed, presumably for Wayland's X11-compatibility mode). Different distributions may break up GStreamer 1.x into packages in different ways; the packages listed above in the build instructions should bring in other required GStreamer packages as dependencies, but will not install all possible plugins.
The GStreamer video pipeline, which is shown in the initial output from uxplay -d
, has the default form
appsrc name=video_source ! queue ! h264parse ! decodebin ! videoconvert ! autovideosink name=video_sink sync=false
The pipeline is fully configurable: default elements "h264parse", "decodebin", "videoconvert", and "autovideosink" can respectively be replaced by using uxplay options -vp
, -vd
, -vc
, and -vs
, if there is any need to modify it (entries can be given in quotes "..." to include options).
This can happen if the TCP video stream from the client stops arriving at the server, probably because of network problems (the UDP audio stream may continue to arrive). At 3-second intervals, UxPlay checks that the client is still connected by sending it a request for a NTP time signal. If a reply is not received from the client within a 0.3 sec time-window, an "ntp timeout" is registered. If a certain number (currently 5) of consecutive ntp timeouts occur, UxPlay assumes that the client is "dead", and resets the connection, becoming available for connection to a new client, or reconnection to the previous one. Sometimes the connection may recover before the timeout limit is reached, and if the default limit is not right for your network, it can be modified using the option "-reset n ", where n is the desired timeout-limit value ( n = 0 means "no limit"). If the connection starts to recover after ntp timeouts, a corrupt video packet from before the timeout may trigger a "connection reset by peer" error, which also causes UxPlay to reset the connection.
A protocol failure may trigger an unending stream of error messages, and means that the audio decryption key (also used in video decryption) was not correctly extracted from data sent by the client.
The protocol was modifed in UxPlay-1.65 after it was discovered that the client-server "pairing" step could be avoided (leading to a much quicker connection setup, without a 5 second delay) by disabling "Supports Legacy Pairing" (bit 27) in the "features" code UxPlay advertises on DNS-SD Service Discovery. Most clients will then not attempt the setup of a "shared secret key" when pairing, which is used by AppleTV for simultaneous handling of multiple clients (UxPlay only supports one client at a time). This change is now well-tested, but in case it causes any protocol failures, UxPlay can be reverted to the previous behavior by uncommenting the previous "FEATURES_1" setting (and commenting out the new one) in lib/dnssdint.h, and then rebuilding UxPlay. ("Pairing" is re-enabled when the new Apple-style one-time "pin" authentication is activated by running UxPlay with the "-pin" option introduced in UxPlay 1.67.)
Protocol failure should not happen for iOS 9.3 or later clients. However, if a client uses the same older version of the protocol that is used by the Windows-based AirPlay client emulator AirMyPC , the protocol can be switched to the older version by the setting OLD_PROTOCOL_CLIENT_USER_AGENT_LIST
in UxPlay/lib/global.h
. UxPlay reports the client's "User Agent" string when it connects. If some other client also fails to decrypt all audio and video, try adding its "User Agent" string in place of "xxx" in the entry "AirMyPC/2.0;xxx" in global.h and rebuild uxplay.
Note that for DNS-SD Service Discovery, Uxplay declares itself to be an AppleTV3,2 (a 32 bit device) with a sourceVersion 220.68; this can also be changed in global.h. UxPlay also works if it declares itself as an AppleTV6,2 with sourceVersion 380.20.1 (an AppleTV 4K 1st gen, introduced 2017, running tvOS 12.2.1), so it does not seem to matter what version UxPlay claims to be.
1.70 2024-10-04 Add support for 4K (h265) video (resolution 3840 x 2160). Fix issue with GStreamer >= 1.24 when client sleeps, then wakes.
1.69 2024-08-09 Internal improvements (eg in -nohold option, identifying GStreamer videosink selected by autovideosink, finding X11 display) in anticipation of future HLS video support. New -nofreeze option to not leave frozen video in place when a network connection is reset. Fixes for GStreamer-1.24.x changes.
1.68 2023-12-31 New simpler (default) method for generating a persistent public key from the server MAC address (which can now be set with the -m option). (The previous method is still available with -key option). New option -reg to maintain a register of pin-authenticated clients. Corrected volume-control: now interprets AirPlay volume range -30dB:0dB as decibel gain attenuation, with new option -db low[:high] for "flat" rescaling of the dB range. Add -taper option for a "tapered" AirPlay volume-control profile.
1.67 2023-11-30 Add support for Apple-style one-time pin authentication of clients with option "-pin": (uses SRP6a authentication protocol and public key persistence). Detection with error message of (currently) unsupported H265 video when requesting high resolution over wired ethernet. Removed rpi* options (which are not valid with new Raspberry Pi model 5, and can be replaced by combinations of other options). Added optional argument "mac" to "-m" option, to specify a replacement MAC address/Device ID. Update llhttp to v. 9.1.3. Add -dacp option for exporting current client DACP info (for remotes).
1.66 2023-09-05 Fix IPV6 support. Add option to restrict clients to those on a list of allowed deviceIDs, or to block connections from clients on a list of blocked deviceIDs. Fix for #207 from @thiccaxe (screen lag in vsync mode after client wakes from sleep).
1.65.3 2023-07-23 Add RPM spec file; add warning if required gstreamer libav feature "avdec_aac" is missing: (this occurs in RPM-based distributions that ship an incomplete FFmpeg for Patent or License reasons, and rely on users installing an externally-supplied complete FFmpeg). Mirror-mode airplay will now work without audio if avdec_aac is missing.
1.65 2023-06-03 Eliminate pair_setup part of connection protocol to allow faster connections with clients (thanks to @shuax #176 for this discovery); to revert, uncomment a line in lib/dnssdint.h. Disconnect from audio device when connection closes, to not block its use by other apps if uxplay is running but not connected. Fix for AirMyPC client (broken since 1.60), so its older non-NTP timestamp protocol works with -vsync. Corrected parsing of configuration file entries that were in quotes.
1.64 2023-04-23 Timestamp-based synchronization of audio and video is now the default in Mirror mode. (Use "-vsync no" to restore previous behavior.) A configuration file can now be used for startup options. Also some internal cleanups and a minor bugfix that fixes #192.
1.63 2023-02-12 Reworked audio-video synchronization, with new options -vsync (for Mirror mode) and -async (for Audio-Only mode, to sync with client video). Option -vsync makes software h264 decoding of streamed videos with option -avdec viable on some recent Raspberry Pi models. Internal change: all times are now processed in nanoseconds units. Removed -ao option introduced in 1.62.
1.62 2023-01-18 Added Audio-only mode time offset -ao x to allow user synchronization of ALAC audio playing on the server with video, song lyrics, etc. playing on the client. x = 5.0 appears to be optimal in many cases. Quality fixes: cleanup in volume changes, timestamps, some bugfixes.
1.61 2022-12-30 Removed -t option (workaround for an Avahi issue, correctly solved by opening network port UDP 5353 in firewall). Remove -g debug flag from CMAKE_CFLAGS. Postpend (instead of prepend) build environment CFLAGS to CMAKE_CFLAGS. Refactor parts of uxplay.cpp
1.60 2022-12-15 Added exit with error message if DNSServiceRegister fails (instead of just stalling). Test for Client's attempt to using unsupported AirPlay 2 "REMOTE CONTROL" protocol (with no timing channel), and exit if this occurs. Reworked metadata processing to correctly parse DMAP header (previous version worked with DMAP messages currently received, but was not correct).
1.59 2022-12-12 remove "ZOOMFIX" compile option and make compilation with X11-dependence the default if X11 development libraries are detected (this now also provides fullscreen mode with a F11 or Alt+Enter key toggle); ZOOMFIX is now automatically applied for GStreamer < 1.20. New cmake option -DNO_X11_DEPS compiles uxplay without X11 dependence. Reworked internal metadata handling. Fix segfault with "-vs 0".
1.58 2022-10-29 Add option "-nohold" that will drop existing connections when a new client connects. Update llhttp to v8.1.0.
1.57 2022-10-09 Minor fixes: (fix coredump on AUR on "stop mirroring", occurs when compiled with AUR CFLAGS -DFORTIFY_SOURCE); graceful exit when required plugins are missing; improved support for builds on Windows. Include audioresample in GStreamer audio pipeline.
1.56 2022-09-01 Added support for building and running UxPlay-1.56 on Windows (no changes to Unix (Linux, *BSD, macOS) codebase.)
1.56 2022-07-30 Remove -bt709 from -rpi, -rpiwl, -rpifb as GStreamer is now fixed.
1.55 2022-07-04 Remove the bt709 fix from -v4l2 and create a new -bt709 option (previous "-v4l2" is now "-v4l2 -bt709"). This allows the currently-required -bt709 option to be used on its own on RPi without -v4l2 (sometimes this give better results).
1.54 2022-06-25 Add support for "Cover Art" display in Audio-only (ALAC) mode. Reverted a change that caused VAAPI to crash with AMD POLARIS graphics cards. Minor internal changes to plist code and uxplay option parsing.
1.53 2022-06-13 Internal changes to audio sync code, revised documentation, Minor bugfix (fix assertion crash when resent audio packets are empty).
1.52 2022-05-05 Cleaned up initial audio sync code, and reformatted streaming debug output (readable aligned timestamps with decimal points in seconds). Eliminate memory leaks (found by valgrind). Support for display of ALAC (audio-only) metadata (soundtrack artist names, titles etc.) in the uxplay terminal.
1.51 2022-04-24 Reworked options forVideo4Linux2 support (new option -v4l2) and short options -rpi, -rpifb, -rpiwl as synonyms for -v4l2, -v4l2 -vs kmssink, and -v4l2 -vs waylandsink. Reverted a change from 1.48 that broke reconnection after "Stop Mirroring" is sent by client.
1.50 2022-04-22 Added -fs fullscreen option (for Wayland or VAAPI plugins only), Changed -rpi to be for framebuffer ("lite") RPi systems and added -rpigl (OpenGL) and -rpiwl (Wayland) options for RPi Desktop systems. Also modified timestamps from "DTS" to "PTS" for latency improvement, plus internal cleanups.
1.49 2022-03-28 Addded options for dumping video and/or audio to file, for debugging, etc. h264 PPS/SPS NALU's are shown with -d. Fixed video-not-working for M1 Mac clients.
1.48 2022-03-11 Made the GStreamer video pipeline fully configurable, for use with hardware h264 decoding. Support for Raspberry Pi.
1.47 2022-02-05 Added -FPSdata option to display (in the terminal) regular reports sent by the client about video streaming performance. Internal cleanups of processing of video packets received from the client. Added -reset n option to reset the connection after n ntp timeouts (also reset after "connection reset by peer" error in video stream).
1.46 2022-01-20 Restore pre-1.44 behavior (1.44 may have broken hardware acceleration): once again use decodebin in the video pipeline; introduce new option "-avdec" to force software h264 decoding by libav h264, if needed (to prevent selection of vaapisink by autovideosink). Update llhttp to v6.0.6. UxPlay now reports itself as AppleTV3,2. Restrict connections to one client at a time (second client must now wait for first client to disconnect).
1.45 2022-01-10 New behavior: close video window when client requests "stop mirroring". (A new "no close" option "-nc" is added for users who wish to retain previous behavior that does not close the video window).
1.44 2021-12-13 Omit hash of aeskey with ecdh_secret for an AirMyPC client; make an internal rearrangement of where this hash is done. Fully report all initial communications between client and server in -d debug mode. Replace decodebin in GStreamer video pipeline by h264-specific elements.
1.43 2021-12-07 Various internal changes, such as tests for successful decryption, uniform treatment of informational/debug messages, etc., updated README.
1.42 2021-11-20 Fix MAC detection to work with modern Linux interface naming practices, MacOS and *BSD.
1.41 2021-11-11 Further cleanups of multiple audio format support (internal changes, separated RAOP and GStreamer audio/video startup)
1.40 2021-11-09 Cleanup segfault in ALAC support, manpage location fix, show request Plists in debug mode.
1.39 2021-11-06 Added support for Apple Lossless (ALAC) audio streams.
1.38 2021-10-8 Add -as audiosink option to allow user to choose the GStreamer audiosink.
1.37 2021-09-29 Append "@hostname" to AirPlay Server name, where "hostname" is the name of the server running uxplay (reworked change in 1.36).
1.36 2021-09-29 Implemented suggestion (by @mrbesen and @PetrusZ) to use hostname of machine runing uxplay as the default server name
1.35.1 2021-09-28 Added the -vs 0 option for streaming audio, but not displaying video.
1.35 2021-09-10 now uses a GLib MainLoop, and builds on macOS (tested on Intel Mac, 10.15 ). New option -t timeout for relaunching server if no connections were active in previous timeout seconds (to renew Bonjour registration).
1.341 2021-09-04 fixed: render logger was not being destroyed by stop_server()
1.34 2021-08-27 Fixed "ZOOMFIX": the X11 window name fix was only being made the first time the GStreamer window was created by uxplay, and not if the server was relaunched after the GStreamer window was closed, with uxplay still running. Corrected in v. 1.34
If you need to do this, note that you may be able to use a newer version (OpenSSL-3.0.1 is known to work). You will need the standard development toolset (autoconf, automake, libtool). Download the source code from https://www.openssl.org/source/. Install the downloaded openssl by opening a terminal in your Downloads directory, and unpacking the source distribution: ("tar -xvzf openssl-3.0.1.tar.gz ; cd openssl-3.0.1"). Then build/install with "./config ; make ; sudo make install_dev". This will typically install the needed library libcrypto.*
, either in /usr/local/lib or /usr/local/lib64.
(Ignore the following for builds on MacOS:) On some systems like Debian or Ubuntu, you may also need to add a missing entry /usr/local/lib64
in /etc/ld.so.conf (or place a file containing "/usr/local/lib64/libcrypto.so" in /etc/ld.so.conf.d) and then run "sudo ldconfig".
(Note: on Debian 9 "Stretch" or Ubuntu 16.04 LTS editions, you can avoid this step by installing libplist-dev and libplist3 from Debian 10 or Ubuntu 18.04.) As well as the usual build tools (autoconf, automake, libtool), you may need to also install some libpython*-dev package. Download the latest source with git from https://github.com/libimobiledevice/libplist, or get the source from the Releases section (use the *.tar.bz2 release, not the *.zip or *.tar.gz versions): download libplist-2.3.0, then unpack it ("tar -xvjf libplist-2.3.0.tar.bz2 ; cd libplist-2.3.0"), and build/install it: ("./configure ; make ; sudo make install"). This will probably install libplist-2.0.* in /usr/local/lib. The new libplist-2.3.0 release should be compatible with UxPlay; libplist-2.2.0 is also available if there are any issues.
(Ignore the following for builds on MacOS:) On some systems like Debian or Ubuntu, you may also need to add a missing entry /usr/local/lib
in /etc/ld.so.conf (or place a file containing "/usr/local/lib/libplist-2.0.so" in /etc/ld.so.conf.d) and then run "sudo ldconfig".
All the resources in this repository are written using only freely available information from the internet. The code and related resources are meant for educational purposes only. It is the responsibility of the user to make sure all local laws are adhered to.
This project makes use of a third-party GPL library for handling FairPlay. The legal status of that library is unclear. Should you be a representative of Apple and have any objections against the legality of the library and its use in this project, please contact the developers and the appropriate steps will be taken.
Given the large number of third-party AirPlay receivers (mostly closed-source) available for purchase, it is our understanding that an open source implementation of the same functionality wouldn't violate any of Apple's rights either.
[adapted from fdraschbacher's notes on RPiPlay antecedents]
The code in this repository accumulated from various sources over time. Here is an attempt at listing the various authors and the components they created:
UxPlay was initially created by antimof from RPiPlay, by replacing its Raspberry-Pi-adapted OpenMAX video and audio rendering system with GStreamer rendering for desktop Linux systems; the antimof work on code in renderers/
was later backported to RPiPlay, and the antimof project became dormant, but was later revived at the current GitHub site to serve a wider community of users.
The previous authors of code included in UxPlay by inheritance from RPiPlay include:
lib/playfair
folder. License: GNU GPLlib/
originally stems from this project. License: GNU LGPLv2.1+lib/
concerning mirroring is dsafa22's work. License: GNU LGPLv2.1+Independent of UxPlay, but used by it and bundled with it:
lib/llhttp/
. License: MIT