หมายเหตุ: ไม่รองรับการสตรีมเสียงหลายห้อง AirPlay2: ใช้ shairport-sync สำหรับสิ่งนั้น
-
ติดตั้ง 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 ดูส่วนการใช้ specfile นี้เพื่อสร้างแพ็คเกจ 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" แต่จะมีเวลาแฝง 2 วินาทีที่กำหนดโดย iOS
เพิ่มตัวเลือก UxPlay ที่คุณต้องการใช้เป็นค่าเริ่มต้นให้กับไฟล์เริ่มต้น ~/.uxplayrc
(ดู " man uxplay
" หรือ " uxplay -h
" สำหรับรูปแบบและตำแหน่งอื่นๆ ที่เป็นไปได้) โดยเฉพาะอย่างยิ่ง หากระบบของคุณใช้เสียง PipeWire หรือระบบวิดีโอ Wayland คุณอาจต้องการเพิ่ม "as pipewiresink" หรือ "vs waylandsink" เป็นค่าเริ่มต้นให้กับไฟล์ (เอาต์พุตจากคำสั่งเทอร์มินัล "ps waux | grep pulse" หรือ "pactl info" จะมี "pipewire" หากระบบ Linux/BSD ของคุณใช้งาน)
บน Raspberry Pi: หากคุณใช้ Ubuntu 22.10 หรือเก่ากว่า GStreamer จะต้องได้รับการแพตช์เพื่อใช้การถอดรหัสวิดีโอด้วยฮาร์ดแวร์โดย Broadcom GPU (แนะนำเช่นกัน แต่เป็นทางเลือกสำหรับ Raspberry Pi OS (Bullseye): ใช้ตัวเลือก " uxplay -bt709
" หากคุณไม่ได้ใช้ แพทช์)
หากต้องการคอมไพล์ UxPlay ล่าสุดจากแหล่งที่มา (อย่างง่ายดาย) โปรดดูส่วนการรับ UxPlay
โปรเจ็กต์นี้เป็นเซิร์ฟเวอร์มิเรอร์ Unix AirPlay2 โอเพ่นซอร์ส GPLv3 สำหรับ 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 หรือยูนิกซ์อื่น ๆ (และตอนนี้ก็ยังมี Microsoft Windows ด้วย) UxPlay รองรับโปรโตคอล AirPlay2 ของ Apple โดยใช้ "Legacy Protocol" แต่คุณสมบัติบางอย่างขาดหายไป (รายละเอียดสิ่งที่เป็นที่รู้จักต่อสาธารณะเกี่ยวกับโปรโตคอล AirPlay 2 ของ Apple สามารถพบได้ที่นี่ ที่นี่ และ ที่นี่ โปรดดู pyatv ซึ่งอาจเป็นแหล่งข้อมูลสำหรับการเพิ่มโปรโตคอลสมัยใหม่) แม้ว่าจะไม่มีการรับประกันว่า iOS ในอนาคตจะรองรับ "Legacy Protocol ต่อไป" " iOS 17 ยังคงรองรับต่อไป
เซิร์ฟเวอร์ UxPlay และไคลเอนต์จะต้องอยู่บนเครือข่ายท้องถิ่นเดียวกัน ซึ่ง เซิร์ฟเวอร์ Bonjour/Zeroconf mDNS/DNS-SD ทำงานอยู่ด้วย (เฉพาะบริการ DNS-SD "Service Discovery" เท่านั้นที่จำเป็นอย่างยิ่ง ไม่จำเป็นที่ เครือข่ายท้องถิ่นยังเป็นประเภทที่ใช้ mDNS ".local" ด้วย) บนเซิร์ฟเวอร์ Linux และ BSD Unix โดยปกติ Avahi จะให้บริการผ่านบริการ avahi-daemon และรวมอยู่ในลีนุกซ์รุ่นส่วนใหญ่ (บริการนี้สามารถให้บริการโดยเซิร์ฟเวอร์ macOS, iOS หรือ Windows ได้เช่นกัน)
การเชื่อมต่อกับเซิร์ฟเวอร์ UxPlay โดยไคลเอนต์ iOS/MacOS สามารถเริ่มต้นได้ทั้งในโหมด AirPlay Mirror (ซึ่งจะสตรีมเสียง AAC ที่ถูกบีบอัดแบบ lossless ขณะมิเรอร์หน้าจอไคลเอนต์ หรือในโหมด AirPlay Audio สำรองซึ่งจะสตรีมเสียง Apple Lossless (ALAC) โดยไม่ต้องทำการมิเรอร์หน้าจอ ในโหมด เสียง ข้อมูลเมตาจะแสดงในเทอร์มินัล uxplay หากใช้ตัวเลือก UxPlay -ca
หน้าปกที่เกี่ยวข้องจะถูกส่งออกไปยังไฟล์ที่อัปเดตเป็นระยะ
และสามารถดูได้ด้วยการ (โหลดซ้ำ) โปรแกรมดูกราฟิกที่คุณเลือก สามารถ สลับระหว่าง โหมดมิเรอร์ และ โหมดเสียง ระหว่างการเชื่อมต่อที่ใช้งานอยู่: ในโหมด มิเรอร์ ให้หยุดการมิเรอร์ (หรือปิดหน้าต่างมิเรอร์) และเริ่ม การเชื่อมต่อโหมด เสียง สลับกลับโดยเริ่ม การเชื่อมต่อโหมด มิเรอร์ การแสดงผลงานศิลปะหยุด/รีสตาร์ทเมื่อคุณออก/เข้าสู่ โหมด เสียง อีกครั้ง
โปรดทราบว่า Apple video-DRM (ที่พบในเนื้อหา "แอป Apple TV" บนไคลเอนต์) ไม่สามารถถอดรหัสโดย UxPlay และไม่สามารถรับชมแอป Apple TV ได้โดยใช้โหมด AirPlay Mirror ของ UxPlay (เฉพาะเสียงที่ไม่มีการป้องกันเท่านั้นที่จะถูกสตรีมใน AAC ) แต่ทั้งเนื้อหาวิดีโอและเสียงจากแอปที่ไม่มี DRM เช่น "แอป YouTube" จะถูกสตรีมโดย UxPlay ในโหมด Mirror
เนื่องจากปัจจุบัน UxPlay ไม่รองรับการสตรีมวิดีโอ AirPlay ที่ไม่ใช่มิเรอร์ (โดยที่ไคลเอนต์ควบคุมเว็บเซิร์ฟเวอร์บนเซิร์ฟเวอร์ AirPlay ที่รับเนื้อหา HLS โดยตรงเพื่อหลีกเลี่ยงการถอดรหัสและเข้ารหัสใหม่โดยไคลเอนต์) โดยใช้ไอคอนสำหรับวิดีโอ AirPlay ใน แอปต่างๆ เช่น แอป YouTube จะส่งเฉพาะเสียง (ในรูปแบบ ALAC แบบไม่สูญเสียข้อมูล) โดยไม่มีวิดีโอประกอบ (มีแผนจะรองรับวิดีโอ HLS ใน UxPlay รุ่นต่อๆ ไป)
UxPlay ใช้ "ปลั๊กอิน" ของ GStreamer ในการแสดงเสียงและวิดีโอ ซึ่งหมายความว่าวิดีโอและเสียงได้รับการสนับสนุน "นอกกรอบ" โดยใช้ตัวเลือกปลั๊กอิน AirPlay สตรีมวิดีโอในรูปแบบ h264: การถอดรหัส gstreamer เป็นแบบไม่เชื่อเรื่องปลั๊กอิน และใช้ตัวถอดรหัส h264 ของฮาร์ดแวร์ GPU แบบเร่ง หากมี ถ้าไม่เช่นนั้น จะใช้การถอดรหัสซอฟต์แวร์
VAAPI สำหรับกราฟิกรวมของ Intel และ AMD, NVIDIA พร้อมไดรเวอร์โอเพ่นซอร์ส "Nouveau"
เมื่อใช้ Intel หรือ AMD GPU การถอดรหัสฮาร์ดแวร์ด้วยปลั๊กอิน gstreamer VAAPI แบบโอเพ่นซอร์สจะดีกว่า โดยหลักการแล้วไดรเวอร์ "Nouveau" แบบโอเพ่นซอร์สสำหรับกราฟิก NVIDIA ก็ได้รับการสนับสนุนเช่นกัน ดูที่นี่ แต่จำเป็นต้องเสริม VAAPI ด้วยเฟิร์มแวร์ที่แยกมาจากไดรเวอร์ NVIDIA ที่เป็นกรรมสิทธิ์
NVIDIA พร้อมไดรเวอร์ที่เป็นกรรมสิทธิ์
ปลั๊กอิน nvh264dec
(รวมอยู่ใน gstreamer1.0-plugins-bad ตั้งแต่ GStreamer-1.18.0) สามารถใช้สำหรับการถอดรหัสวิดีโอแบบเร่งบน NVIDIA GPU หลังจากติดตั้งไดรเวอร์ 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 ที่เร่งด้วยฮาร์ดแวร์ด้วยเฟิร์มแวร์ใน Broadcom 2835 GPU ของ Pi UxPlay เข้าถึงสิ่งนี้โดยใช้ปลั๊กอิน GStreamer-1.22 Video4Linux2 (v4l2) ใช้โมดูลเคอร์เนล Linux นอกระบบหลัก bcm2835-codec ที่ดูแลโดย 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 รุ่น 5 ให้การถอดรหัสแบบเร่งด้วยฮาร์ดแวร์ (GPU) สำหรับวิดีโอ h265 เท่านั้น แต่ไม่ใช่ H264 เนื่องจาก CPU มีประสิทธิภาพเพียงพอสำหรับการถอดรหัสซอฟต์แวร์ H264 ที่น่าพอใจ
ใบอนุญาต GPLv3 ของ UxPlay ไม่มี "ข้อยกเว้น GPL" เพิ่มเติม ซึ่งอนุญาตให้เผยแพร่ในรูปแบบที่คอมไพล์ได้อย่างชัดเจนเมื่อเชื่อมโยงกับเวอร์ชัน OpenSSL ก่อนเวอร์ชัน 3.0.0 (OpenSSL เวอร์ชันเก่ามีส่วนคำสั่งใบอนุญาตที่เข้ากันไม่ได้กับ GPL เว้นแต่ว่า OpenSSL สามารถ ถือเป็น "ไลบรารีระบบ" ซึ่งอยู่ใน *BSD) Linux จำนวนมากถือว่า OpenSSL เป็น "ไลบรารีระบบ" แต่บางรุ่น (เช่น Debian) ไม่ทำ ในกรณีนี้ ปัญหาได้รับการแก้ไขโดยการเชื่อมโยงกับ OpenSSL-3.0.0 หรือใหม่กว่า
ดาวน์โหลดและแตกไฟล์ UxPlay-master.zip หรือ (หากติดตั้ง git ไว้): "git clone https://github.com/FDH2/UxPlay" คุณยังสามารถดาวน์โหลดเวอร์ชันล่าสุดหรือเวอร์ชันก่อนหน้าที่แสดงอยู่ในรายการเผยแพร่ได้
(ปรับคำแนะนำเหล่านี้สำหรับ Linux ที่ไม่ใช่ Debian หรือ *BSD สำหรับ macOS ดูคำแนะนำเฉพาะด้านล่าง) ดูการแก้ไขปัญหาด้านล่างสำหรับความช่วยเหลือเกี่ยวกับปัญหาใดๆ
คุณต้องมีคอมไพเลอร์ C/C++ (เช่น g++) ที่ติดตั้งไลบรารีการพัฒนามาตรฐาน ระบบที่ใช้ Debian จัดเตรียมแพ็คเกจ "build-essential" เพื่อใช้ในการคอมไพล์ซอฟต์แวร์ คุณต้องมี pkg-config ด้วย: หากไม่พบโดย " which pkg-config
" ให้ติดตั้ง pkg-config หรือ pkgconf แทนที่การทำงานเหมือนกัน ตรวจสอบให้แน่ใจว่าติดตั้ง cmake>=3.5 แล้ว: " sudo apt install cmake
" (เพิ่ม build-essential
และ pkg-config
(หรือ pkgconf
) หากจำเป็น)
ตรวจสอบให้แน่ใจว่าการแจกจ่ายของคุณมี OpenSSL 1.1.1 หรือใหม่กว่า และ libplist 2.0 หรือใหม่กว่า (ซึ่งหมายถึงระบบที่ใช้ Debian 10 "Buster" (เช่น Ubuntu 18.04) หรือใหม่กว่า สำหรับระบบ Debian 10 "libplist" เป็นเวอร์ชันเก่า คุณต้องใช้ "libplist3") หากไม่มี คุณอาจต้องสร้างและติดตั้ง สิ่งเหล่านี้มาจากแหล่งที่มา (ดูคำแนะนำในตอนท้ายของ README นี้)
หากคุณมีการติดตั้ง 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" หรือแท็ก release สำหรับการดาวน์โหลดไฟล์ zipfile, "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 จะมีการแก้ไขที่จำเป็นสำหรับแอปแชร์หน้าจอ ( เช่น , ซูม) ด้วยเช่นกัน
-DNO_X11_DEPS=ON
sudo apt install libssl-dev libplist-dev
" ( เว้นแต่คุณจะต้องสร้าง OpenSSL และ libplist จาก source )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 อาจเป็น พบได้ในไดเร็กทอรี build หลังจากกระบวนการ build หากคุณต้องการทดสอบก่อนการติดตั้ง (ในกรณีนี้ จะต้องติดตั้งปลั๊กอิน GStreamer ก่อน)
**สำหรับผู้ที่มีการกระจายตาม RPM ไฟล์ข้อมูลจำเพาะ RPM uxplay.spec ก็พร้อมใช้งานเช่นกัน: โปรดดูที่การสร้างแพ็คเกจ rpm ที่สามารถติดตั้งได้
Red Hat หรือโคลนเช่น CentOS (ตอนนี้ยังคงเป็น Rocky Linux หรือ Alma Linux): (sudo dnf install หรือ sudo yum install) openssl-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) 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) openssl 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 GPU), " gtk3 " (ซึ่งมี videoink "-vs gtksink") และ " x " สำหรับการรองรับ X11 แม้ว่าสิ่งเหล่านี้อาจถูกติดตั้งไว้แล้วก็ตาม " vaapi " จำเป็นสำหรับการถอดรหัสวิดีโอ h264 ที่เร่งด้วยฮาร์ดแวร์โดยกราฟิก Intel หรือ AMD (แต่ไม่ใช้กับ NVIDIA ที่ใช้ไดรเวอร์ที่เป็นกรรมสิทธิ์) หากเสียงไม่ทำงาน อาจจำเป็นต้องติดตั้งปลั๊กอิน " alsa "", " pulseaudio " หรือ " pipewire " ขึ้นอยู่กับวิธีการตั้งค่าเสียงของคุณ
ในบางกรณี เนื่องจากปัญหาด้านสิทธิบัตร คุณลักษณะปลั๊กอิน libav avdec_aac ที่จำเป็นสำหรับการถอดรหัสเสียง AAC ในโหมดมิเรอร์จึงไม่มีให้ในการเผยแพร่อย่างเป็นทางการ: รับได้จากแหล่งเก็บข้อมูลชุมชนสำหรับการแจกจ่ายเหล่านั้น
Red Hat หรือโคลนเช่น CentOS (ตอนนี้ยังคงเป็น Rocky Linux หรือ Alma Linux): ติดตั้ง gstreamer1-libav gstreamer1-plugins-bad-free (+ gstreamer1-vaapi สำหรับกราฟิก Intel/AMD) ใน Fedora ล่าสุด 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 จากพื้นที่เก็บข้อมูล "tainted" (ซึ่งมี 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, ดี, แย่, x, gtk, gl, vulkan, พัลส์, v4l2, ...), (+ gstreamer1-vaapi สำหรับ Intel/ กราฟิกเอเอ็มดี)
ตั้งแต่ 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
timestamp- ตัวเลือกพื้นฐาน (ตัวอย่างอาจเป็นถ้าคุณต้องการติดตามเนื้อเพลง Apple Music บนไคลเอนต์ในขณะที่ฟังเสียงที่เหนือกว่าบนเซิร์ฟเวอร์ UxPlay) การดำเนินการนี้จะหน่วงเวลาวิดีโอบนไคลเอนต์เพื่อให้ตรงกับเสียงบนเซิร์ฟเวอร์ ดังนั้นจึงทำให้เกิดความล่าช้าเล็กน้อยก่อนที่การหยุดชั่วคราวหรือการเปลี่ยนแปลงแทร็กที่เริ่มต้นบนไคลเอนต์จะส่งผลต่อเสียงที่เล่นโดยเซิร์ฟเวอร์ การควบคุมระดับเสียง AirPlay จะลดระดับเสียง (เกน) ได้ถึง -30dB: ช่วงเดซิเบล -30:0 สามารถลดขนาดจาก ต่ำ :0 หรือ ต่ำ : สูง ได้ โดยใช้ตัวเลือก -db
("-db Low " หรือ "-db ต่ำ : สูง ") ต่ำ ต้องเป็นลบ การปรับขนาดจะเป็นเส้นตรงในหน่วยเดซิเบล โปรดทราบว่ารูปแบบเสียงของ GStreamer จะ "ตัด" เสียงใดๆ ที่ได้รับเกิน +20db ดังนั้นให้รักษา ระดับ High ให้ต่ำกว่าระดับนั้น ตัวเลือก -taper
ให้โปรไฟล์การควบคุมระดับเสียง AirPlay แบบ "เรียว" ที่ผู้ใช้บางคนอาจต้องการ
ตัวเลือก -vsync และ -async ยังอนุญาตให้มีการปรับการหน่วงเวลาเสียงเชิงบวก (หรือลบ) ใน หน่วยมิลลิวินาที เพื่อการปรับแต่งแบบละเอียด : -vsync 20.5
หน่วงเวลาเสียงที่สัมพันธ์กับวิดีโอ 0.0205 วินาที; ค่าลบจะก้าวหน้าไป)
คุณอาจพบว่าวิดีโอได้รับการปรับปรุงโดยการตั้งค่า -fps 60 ที่อนุญาตให้เล่นวิดีโอบางรายการได้ที่ 60 เฟรมต่อวินาที (คุณสามารถดูอัตราเฟรมที่สตรีมจริงได้โดยใช้ -vs fpsdisplaysink และ/หรือ -FPSdata) เมื่อใช้สิ่งนี้ คุณควรใช้ตัวเลือกการซิงโครไนซ์ตามการประทับเวลาเริ่มต้น -vsync
ตั้งแต่ UxPlay-1.54 คุณสามารถแสดง "ภาพหน้าปก" ที่มาพร้อมกันจากแหล่งต่างๆ เช่น Apple Music ในโหมดเสียงเท่านั้น (ALAC) ได้: เรียกใช้ " uxplay -ca
" ในพื้นหลัง จากนั้นเรียกใช้โปรแกรมดูรูปภาพพร้อมกับโหลดอัตโนมัติ คุณลักษณะ: ตัวอย่างคือ "feh": เรียกใช้ " feh -R 1
" ในเบื้องหน้า; ยุติ feh แล้ว Uxplay ด้วย " ctrl-C fg ctrl-C
"
ตามค่าเริ่มต้น GStreamer จะใช้อัลกอริธึมเพื่อค้นหา "videosink" ที่ดีที่สุด (คำของ GStreamer สำหรับไดรเวอร์กราฟิกเพื่อแสดงภาพ) เพื่อใช้งาน คุณสามารถแทนที่สิ่งนี้ด้วยตัวเลือก uxplay -vs
videoinks ใดบ้างที่ใช้งานได้ขึ้นอยู่กับระบบปฏิบัติการและฮาร์ดแวร์กราฟิกของคุณ: ใช้ " gst-inspect-1.0 | grep sink | grep -e video -e Video -e image
" เพื่อดูว่ามีอะไรบ้าง ความเป็นไปได้บางประการบน Linux/*BSD คือ:
glimagesink (OpenGL), เวย์แลนด์ซิงค์
ximagesink , ximagesink (X11)
kmssink , fbdevsink (กราฟิกคอนโซลที่ไม่มี X11)
vaapisink (สำหรับกราฟิกเร่งด้วยฮาร์ดแวร์ Intel/AMD); สำหรับกราฟิกฮาร์ดแวร์ NVIDIA (ที่มี CUDA) ให้ใช้ glimagesink รวมกับ " -vd nvh264dec
" (หรือ "nvh264sldec" ซึ่งเป็นตัวแปรใหม่ที่จะกลายเป็น "nvh264dec" ใน GStreamer-1.24)
หากเซิร์ฟเวอร์ "ไม่มีหัว" (ไม่มีจอภาพที่เชื่อมต่อ แสดงผลเสียงเท่านั้น) ให้ใช้ -vs 0
GStreamer ยังค้นหา "audiosink" ที่ดีที่สุดด้วย แทนที่ตัวเลือกด้วย -as
ตัวเลือกบน Linux ได้แก่ pulsesink, alsasink, pipewiresink, 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 videosink "dfbvideosink" ใช้งานไม่ได้บน Pi และ segfaults) ในกรณีนี้ คุณควรใช้ตัวเลือก "-vs kmssink" อย่างชัดเจน เนื่องจากหากไม่มีตัวเลือกนี้ autovideosink จะไม่พบ videoink ที่ถูกต้อง
Raspberry Pi 5 ไม่มีการถอดรหัสฮาร์ดแวร์ H264 (และไม่จำเป็นต้องใช้)
Pi Zero 2 W, 3 Model B+ และ 4 Model B ควรใช้การถอดรหัสฮาร์ดแวร์ H264 โดย Broadcom GPU แต่ต้องใช้โมดูลเคอร์เนลนอกกระแสหลัก bcm2835_codec ที่ดูแลรักษาในแผนผังเคอร์เนล Raspberry Pi การแจกแจงที่ทราบกันว่ามีให้ ได้แก่ Raspberry Pi OS, Ubuntu และ Manjaro-RPi4 ใช้การถอดรหัสซอฟต์แวร์ (ตัวเลือก -avdec) หากไม่มีโมดูลนี้
Uxplay ใช้ปลั๊กอิน Video4Linux2 (v4l2) จาก GStreamer-1.22 และใหม่กว่าเพื่อเข้าถึง GPU หากใช้การถอดรหัสฮาร์ดแวร์ 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) แบบ "double-legacy" จะไม่มีแพตช์สำหรับ GStreamer-1.14 อันดับแรกให้สร้าง GStreamer-1.18.6 ที่ใหม่กว่าจากแหล่งที่มาโดยใช้คำแนะนำเหล่านี้ก่อนสร้าง UxPlay
Raspberry Pi 3 รุ่น B+ ที่ใช้ระบบปฏิบัติการ 32 บิตยังสามารถเข้าถึง GPU ด้วยปลั๊กอิน GStreamer OMX (ใช้ตัวเลือก " -vd omxh264dec
") แต่เฟิร์มแวร์ Pi 4 Model B เสียหาย การสนับสนุน OMX ถูกลบออกจาก Raspberry Pi OS (Bullseye) แต่มีอยู่ใน Buster
วิดีโอ H265 (4K) รองรับการถอดรหัสฮาร์ดแวร์โดย Broadcom GPU บนรุ่น Raspberry Pi 5 รวมถึง Raspberry Pi 4 รุ่น B แม้ว่า GStreamer ดูเหมือนจะใช้การถอดรหัสฮาร์ดแวร์นี้ แต่ความเร็วในการเรนเดอร์ที่น่าพอใจของวิดีโอ 4K โดย UxPlay บน รุ่น Raspberry Pi เหล่านี้ยังไม่บรรลุผลสำเร็จ ต้องใช้ตัวเลือก "-h265" เพื่อเปิดใช้งานการรองรับ h265 แนะนำให้ใช้การเชื่อมต่ออีเทอร์เน็ตแบบมีสายในโหมดนี้ (และอาจจำเป็นโดยไคลเอ็นต์)
แม้จะมีการถอดรหัสวิดีโอ GPU เฟรมบางเฟรมก็อาจหลุดออกไปโดยรุ่นที่ใช้พลังงานต่ำเพื่อให้เสียงและวิดีโอซิงโครไนซ์โดยใช้การประทับเวลา ใน Legacy Raspberry Pi OS (Bullseye) raspi-config "ตัวเลือกประสิทธิภาพ" อนุญาตให้ระบุจำนวนหน่วยความจำที่จะจัดสรรให้กับ GPU แต่การตั้งค่านี้ดูเหมือนจะหายไปใน Bookworm (แต่ยังคงสามารถตั้งค่าเป็นเช่น 128MB โดยการเพิ่มบรรทัด "gpu_mem=128" ใน /boot/config.txt) Pi Zero 2 W (ซึ่งมีหน่วยความจำ 512MB) ทำงานได้ดีเมื่อทดสอบใน Bullseye 32 บิตหรือ Bookworm Lite โดยจัดสรร 128MB ให้กับ GPU (ค่าเริ่มต้นน่าจะเป็น 64MB)
ตัวเลือก 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 Native รวมอยู่ใน MacOS 12 Monterey แต่ถูก จำกัด ไว้ที่ฮาร์ดแวร์ล่าสุด Uxplay สามารถทำงานบนระบบ MacOS รุ่นเก่าซึ่งจะไม่สามารถเรียกใช้ Monterey หรือสามารถเรียกใช้ Monterey แต่ไม่ใช่ AirPlay
คำแนะนำเหล่านี้สำหรับ MACOS สมมติว่ามีการติดตั้งเครื่องมือนักพัฒนาบรรทัดคำสั่ง XCode (หากติดตั้ง XCode ให้เปิดเทอร์มินัลให้พิมพ์ "Sudo XCode-Select-Install" และยอมรับเงื่อนไข)
นอกจากนี้ยังสันนิษฐานว่ามีการติดตั้ง CMake> = 3.13: สามารถทำได้ด้วยผู้จัดการแพ็คเกจ MacPorts ( sudo port install cmake
), homebrew ( brew install cmake
) หรือดาวน์โหลดจาก https://cmake.org/download/ ติดตั้ง git
ด้วยถ้าคุณจะใช้เพื่อดึง Uxplay
ถัดไปติดตั้ง libplist และ openssl-3.x โปรดทราบว่าห้องสมุดรุ่นคงที่เหล่านี้จะถูกใช้ใน MacOS Builds ดังนั้นพวกเขาจึงสามารถถอนการติดตั้งได้หลังจากสร้าง UxPlay หากคุณต้องการ
หากคุณใช้ Homebrew: brew install libplist openssl@3
หากคุณใช้ MacPorts: sudo port install libplist-devel openssl3
มิฉะนั้นให้สร้าง libplist และ openssl จากแหล่งที่มา: ดูคำแนะนำใกล้ถึงจุดสิ้นสุดของ readme นี้; ต้องใช้เครื่องมือพัฒนา (autoconf, automake, libtool ฯลฯ ) ที่จะติดตั้ง
ถัดไปรับการเปิดตัว MacOS ล่าสุดของ GStreamer-1.0
การใช้ "อย่างเป็นทางการ" Gstreamer (แนะนำสำหรับทั้ง Macports และผู้ใช้ Homebrew) : ติดตั้ง Gstreamer Release สำหรับ MacOS จาก https://gstreamer.freedesktop.org/download/ (รุ่นนี้มี PKG-Config ของตัวเองดังนั้นคุณไม่จำเป็นต้องติดตั้งหนึ่ง) ติดตั้งแพ็คเกจ GStreamer-1.0 และ Gstreamer-1.0-Devel หลังจากดาวน์โหลดให้เปลี่ยนให้ติดตั้งเพื่อติดตั้ง (ติดตั้งไปที่ /library/frameworks/gstreamer.framework) ผู้ใช้ Homebrew หรือ MacPorts ไม่ ควรติดตั้ง (หรือควรถอนการติดตั้ง) Gstreamer ที่จัดทำโดยผู้จัดการแพ็คเกจของพวกเขาหากพวกเขาใช้การเปิดตัว "อย่างเป็นทางการ"
การใช้ Gstreamer ของ Homebrew : PKG-Config เป็นสิ่งจำเป็น: ("Brew ติดตั้ง pkg-config gstreamer") สิ่งนี้ทำให้แพ็คเกจพิเศษจำนวนมากติดตั้งโดย Homebrew เป็นการพึ่งพา การติดตั้ง Homebrew Gstreamer เพิ่งได้รับการปรับปรุงใหม่เป็น "สูตร" เดียวที่ชื่อว่า gstreamer
ซึ่งตอนนี้ใช้งานได้โดยไม่จำเป็นต้องตั้งค่า GST_PLUGIN_PATH ในสภาพแวดล้อม Homebrew ติดตั้ง gstreamer เป็น (HOMEBREW)/lib/gstreamer-1.0
โดยที่ (HOMEBREW)/*
is /opt/homebrew/*
บน Apple Silicon Macs และ /usr/local/*
บน Intel Macs; อย่าใส่ปลั๊กอินที่ไม่ใช่ฮีมบรูว์พิเศษ (ที่คุณสร้างตัวเอง) ที่นั่นและตั้งค่า GST_PLUGIN_PATH ให้ชี้ไปที่ตำแหน่งของพวกเขา (Homebrew ไม่ได้จัดหา Gstreamer ที่สมบูรณ์ แต่ดูเหมือนว่าจะมีทุกอย่างที่จำเป็นสำหรับ uxplay)
การใช้ Gstreamer ที่ติดตั้งจาก MacPorts : ไม่ แนะนำให้ใช้เนื่องจากปัจจุบัน MacPorts Gstreamer นั้นเก่า (v1.16.2), unminted และสร้างขึ้นเพื่อใช้ x11:
(หากคุณต้องการใช้ MacPorts Gstreamer-1.16.2 ให้ติดตั้ง pkgconf ("Sudo Port ติดตั้ง pkgconf") จากนั้น "Sudo Port ติดตั้ง GStreamer1-gst-plugins-base gstreamer1-gst-plugins-good Gstreamer1-Gstreamer1-Gstreamer1-gst -bad Gstreamer1-gst-Libav ". สำหรับการสนับสนุน x11 บน macOS, คอมไพล์ uxplay โดยใช้ตัวเลือก cmake พิเศษ -DUSE_X11=ON
และเรียกใช้จากเทอร์มินัล xquartz ที่มี -vs ximagesink; x11: uxplay -s 800x600
.)
หลังจากติดตั้ง gstreamer ให้สร้างและติดตั้ง uxplay: เปิดเทอร์มินัลและเปลี่ยนเป็นไดเรกทอรีแหล่งกำเนิด uxplay ("uxplay-master" สำหรับการดาวน์โหลด zipfile "uxplay" สำหรับดาวน์โหลด "git clone") และสร้าง/ติดตั้งด้วย "cmake; make; Sudo Make Install "(เหมือนกับ Linux)
การรัน uxplay ในขณะที่ตรวจสอบคำเตือน gstreamer (ทำสิ่งนี้ด้วย "Export GST_DEBUG = 2" ก่อนที่จะ runnng uxplay) เผยให้เห็นว่าด้วยค่าเริ่มต้น (ตั้งแต่ uxplay 1.64) การใช้การประทับเวลาสำหรับการซิงก์วิดีโอเฟรมวิดีโอจำนวนมาก อาจเป็นเพราะข้อผิดพลาดอื่น (เกี่ยวกับ videometa) ที่ปรากฏในคำเตือน Gstreamer คำแนะนำ: ใช้ UXPLAY ใหม่ "No Timestamp" Option " -vsync no
" (คุณสามารถเพิ่มบรรทัด "VSYNC NO" ในไฟล์การกำหนดค่า UXPLAYRC)
บน MacOS ด้วยการติดตั้ง Gstreamer นี้วิดีโอเดียวที่มีอยู่ดูเหมือนจะเป็น GlimagesInk (ตัวเลือกเริ่มต้นที่สร้างโดย Autovideosink) และ OsxVideoSink ชื่อหน้าต่างไม่แสดงชื่อเซิร์ฟเวอร์ AirPlay แต่หน้าต่างสามารถมองเห็นได้สำหรับแอพแชร์หน้าจอ (เช่นการซูม) Audiosink ที่มีอยู่เท่านั้นดูเหมือนจะเป็น Osxaudiosink
ตัวเลือก -NC จะใช้เสมอไม่ว่าจะถูกเลือกหรือไม่ก็ตาม นี่เป็นวิธีแก้ปัญหาสำหรับปัญหาเกี่ยวกับ Gstreamer VideoSinks บน MacOS: หากไปป์ไลน์ Gstreamer ถูกทำลายในขณะที่หน้าต่างกระจกยังเปิดอยู่ Segfault จะเกิดขึ้น
ในกรณีของ GlimagesInk การตั้งค่าความละเอียด "-s WXH" จะไม่ส่งผลกระทบต่อขนาดหน้าต่างกระจกเปิด (เล็ก) แต่สามารถขยายหน้าต่างได้โดยใช้เมาส์หรือแทร็คแพด ในทางตรงกันข้ามหน้าต่างที่สร้างขึ้นด้วย "-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 ที่เหมือน UNIX จะถูกนำมาใช้: ดาวน์โหลดและติดตั้ง MSYS2 จากเว็บไซต์อย่างเป็นทางการ https: // www .SSYS2.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 Dependencies (OpenSSL ติดตั้งด้วย MSYS2):
pacman -S mingw-w64-x86_64-libplist mingw-w64-x86_64-gstreamer mingw-w64-x86_64-gst-plugins-base
หากคุณกำลังลองใช้ระบบ Build Windows ที่แตกต่างกัน Gstreamer รุ่น MSVC สำหรับ Windows นั้นมีให้บริการจากเว็บไซต์ Gstreamer อย่างเป็นทางการ แต่มีการทดสอบเฉพาะ MingW 64 บิตบน MSYS2 เท่านั้น
ซีดีไปยังไดเรกทอรีแหล่งกำเนิด UxPlay จากนั้น " mkdir build
" และ " cd build
" กระบวนการสร้างสมมติว่า Bonjour SDK ถูกติดตั้งที่ C:Program FilesBonjour SDK
หากเป็นที่อื่นให้ตั้งค่าตัวแปรสภาพแวดล้อม bonjour_sdk_home เพื่อชี้ไปที่ตำแหน่ง จากนั้นสร้าง uxplay ด้วย
cmake ..
ninja
สมมติว่าไม่มีข้อผิดพลาดใด ๆ ในสิ่งเหล่านี้คุณจะได้สร้าง uxplay.exe uxplay uxplay ในไดเรกทอรีปัจจุบัน ("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 Viewer ด้วย " pacman -S man
"
ในการเรียกใช้ uxplay.exe คุณต้องติดตั้งแพ็คเกจปลั๊กอิน GStreamer บางตัวด้วย pacman -S mingw-w64-x86_64-gst-
แพ็คเกจปลั๊กอิน MSYS2 GStreamer อื่น ๆ ที่เป็นไปได้ที่คุณอาจใช้อยู่ในแพ็คเกจ MSYS2
คุณจะต้องให้สิทธิ์แก่ UxPlay.exe ที่ใช้งานได้ UXPlay เพื่อเข้าถึงข้อมูลผ่านไฟร์วอลล์ Windows คุณอาจเสนอทางเลือกโดยอัตโนมัติเมื่อคุณเรียกใช้ UxPlay ครั้งแรกหรือคุณอาจต้องทำโดยใช้ การตั้งค่า Windows-> Update และ Security-> Windows Security-> Firewall & Network Protection-> อนุญาตแอพผ่านไฟร์วอลล์ หากการป้องกันไวรัสของคุณตั้งค่าสถานะ uxplay.exe เป็น "น่าสงสัย" (แต่ไม่มีลายเซ็นมัลแวร์ที่แท้จริง) คุณอาจต้องให้ข้อยกเว้น
ตอนนี้ทดสอบโดยเรียกใช้ " uxplay
" (ในหน้าต่างเทอร์มินัล MSYS2) หากคุณต้องการระบุ Audiosink มีตัวเลือกหลักสองตัวเลือกบน Windows: ปลั๊กอิน Directsound เก่าแก่ " -as directsoundsink
" และปลั๊กอิน Windows Audio Session API ( -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
ตัวเลือกบางอย่างสำหรับ
คือ d3d11videosink
, d3dvideosink
, glimagesink
, 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); server_name@ hostname จะเป็นชื่อที่ปรากฏว่าให้บริการ AirPlay ไปยัง iPad, iPhone ฯลฯ ซึ่ง ชื่อโฮสต์ คือชื่อของเซิร์ฟเวอร์ที่ใช้งาน UxPlay ตอนนี้จะเป็นชื่อที่แสดงด้านบนหน้าต่าง Mirror Display (x11)
-nh ไม่ผนวก "@ hostname " ในตอนท้ายของชื่อเซิร์ฟเวอร์ Airplay
-H265 เปิดใช้งาน "ScreenMulticodec" สนับสนุน (AirPlay "คุณสมบัติบิต 42) สำหรับการรับวิดีโอ H265 (4K/HEVC) นอกเหนือจากวิดีโอ H264 (1080p) ในโหมดหน้าจอ Mirror เมื่อใช้ตัวเลือกนี้จะมีการสร้าง "วิดีโอวิดีโอ" สองรายการ (หนึ่งอันสำหรับ H264 หนึ่งรายการสำหรับ H265) จะถูกสร้างขึ้น หากปลั๊กอิน GStreamer ใด ๆ ในไปป์ไลน์มีความเฉพาะเจาะจงสำหรับ H264 หรือ H265 เวอร์ชันที่ถูกต้องจะถูกใช้ในแต่ละไปป์ไลน์ การเชื่อมต่ออีเธอร์เน็ตไคลเอนต์-เซิร์ฟเวอร์แบบมีสายนั้นเป็นที่ต้องการมากกว่า WiFi สำหรับวิดีโอ 4K และลูกค้าอาจต้องการ เฉพาะอุปกรณ์ Apple ล่าสุด (M1/M2 MACs หรือ iPads และ iPhone บางตัว) สามารถส่งวิดีโอ H265 ได้หากมีการร้องขอ RONDEUT "-S WXH" ด้วย H> 1080 ตัวเลือก "-H265" เปลี่ยนความละเอียดเริ่มต้น ("-S") จาก 1920x1080 เป็น 3840x2160 และออกจากเฟรมสูงสุดเริ่มต้น ("-FPS" ที่ 30fps
-pin [nnnn] : (ตั้งแต่ v1.67) ใช้การรับรองความถูกต้องของ Apple-style (ครั้งเดียว) "PIN" เมื่อไคลเอนต์ใหม่เชื่อมต่อเป็นครั้งแรก: รหัสพินสี่หลักจะแสดงบนเทอร์มินัลและไคลเอนต์ หน้าจอแสดงพรอมต์เข้าสู่ระบบสำหรับสิ่งนี้ที่จะป้อน เมื่อใช้ "-pin" ด้วยตัวเองรหัสพินแบบสุ่มใหม่จะถูกเลือกสำหรับการตรวจสอบแต่ละครั้ง หากใช้ "-pin nnnn" (เช่น "-pin 3939") จะใช้รหัสคงที่ไม่เปลี่ยนแปลง การรับรองความถูกต้องเพิ่มเซิร์ฟเวอร์ลงในรายการ "เซิร์ฟเวอร์ที่เชื่อถือได้" ของลูกค้าและไคลเอนต์จะไม่จำเป็นต้องมีการรับรองอีกครั้งโดยที่คีย์สาธารณะและเซิร์ฟเวอร์สาธารณะยังคงไม่เปลี่ยนแปลง (โดยค่าเริ่มต้นตั้งแต่ v1.68 คีย์สาธารณะเซิร์ฟเวอร์ถูกสร้างขึ้นจากที่อยู่ MAC ซึ่งสามารถเปลี่ยนแปลงได้ด้วยตัวเลือก -M ดูตัวเลือก -KEY สำหรับวิธีการอื่นของการสร้างคีย์) (เพิ่มบรรทัด "PIN" ในไฟล์เริ่มต้น UXPLAY หากคุณต้องการให้เซิร์ฟเวอร์ UXPLAY ใช้โปรโตคอลการรับรองความถูกต้อง PIN)
-reg [ ชื่อไฟล์ ] : (ตั้งแต่ v1.68) หากใช้ "-pin" ตัวเลือกนี้จะคงไว้ซึ่งการลงทะเบียนของ "ลูกค้าที่เชื่อถือได้" ที่ได้รับการตรวจสอบแล้วใน $ home/.uxplay.register (หรือเป็นทางเลือกใน ชื่อไฟล์ ) หากไม่มีตัวเลือกนี้การส่งคืนลูกค้าที่ข้ามการตรวจสอบความถูกต้องจะเชื่อถือได้และไม่ได้ตรวจสอบ ตัวเลือกนี้อาจมีประโยชน์หากใช้ UxPlay ในสภาพแวดล้อมสาธารณะมากขึ้นเพื่อบันทึกรายละเอียดของลูกค้า การลงทะเบียนคือข้อความหนึ่งบรรทัดต่อไคลเอนต์พร้อมคีย์สาธารณะของลูกค้า (รูปแบบ Base-64) รหัสอุปกรณ์และชื่ออุปกรณ์ การแสดงความคิดเห็น (ด้วย "#") หรือการลบบรรทัด deregisters ไคลเอนต์ที่เกี่ยวข้อง (ดูตัวเลือก -Restrict, -block, -ขออนุญาตเพิ่มเติมในการควบคุมการเข้าถึงไคลเอนต์) (เพิ่มบรรทัด "reg" ในไฟล์เริ่มต้นหากคุณต้องการใช้คุณสมบัตินี้)
-vsync [x] (ในโหมดมิเรอร์ :) ตัวเลือกนี้ ( ตอนนี้ค่าเริ่มต้น ) ใช้การประทับเวลาเพื่อซิงโครไนซ์เสียงกับวิดีโอบนเซิร์ฟเวอร์โดยมีการหน่วงเวลาทางเสียงที่เป็นตัวเลือกในมิลลิวินาที (decimal) ( x = "20.5" หมายถึง 0.0205 วินาทีล่าช้า: อนุญาตให้มีความล่าช้าในเชิงบวกหรือเชิงลบน้อยกว่าวินาที) จำเป็นต้องใช้ในระบบพลังงานต่ำเช่น Raspberry Pi โดยไม่ต้องถอดรหัสวิดีโอฮาร์ดแวร์
-vsync NO (ในโหมดมิเรอร์ :) นี่จะปิดการซิงโครไนซ์เสียงวิดีโอที่ใช้เวลาตามเวลาโดยเรียกคืนพฤติกรรมเริ่มต้นก่อน UXPLAY-1.64 ระบบเดสก์ท็อปมาตรฐานดูเหมือนจะทำงานได้ดีโดยไม่ต้องใช้การประทับเวลา: โหมดนี้เหมาะสำหรับ "การสตรีมสด" เช่นการใช้ UxPlay เป็นจอภาพที่สองสำหรับคอมพิวเตอร์ MAC หรือตรวจสอบเว็บแคม ด้วยมันไม่มีเฟรมวิดีโอถูกทิ้ง
-async [x] (ในโหมดเสียงเท่านั้น (ALAC) :) ตัวเลือกนี้ใช้การประทับเวลา เพื่อ ซิงโครไนซ์เสียงบนเซิร์ฟเวอร์ด้วยวิดีโอบนไคลเอน ความล่าช้าครั้งที่สอง: ความล่าช้าในเชิงบวกหรือลบน้อยกว่าวินาทีได้รับอนุญาต) เนื่องจากไคลเอนต์เพิ่มความล่าช้าวิดีโอลงในบัญชีสำหรับเวลาแฝงเซิร์ฟเวอร์ในโหมด -Sync เพิ่มความล่าช้าทางเสียงที่เทียบเท่าซึ่งหมายความว่าการเปลี่ยนแปลงเสียงเช่นหยุดชั่วคราวหรือ A การเปลี่ยนแปลงแทร็กจะไม่มีผลทันที โดยหลักการแล้วสิ่งนี้อาจลดลงโดยใช้การตั้งค่าเวลาแฝงเสียง -al
เพื่อเปลี่ยนเวลาแฝง (ค่าเริ่มต้น 0.25 วินาที) ที่เซิร์ฟเวอร์รายงานไปยังไคลเอนต์ แต่ในปัจจุบันการเปลี่ยนแปลงสิ่งนี้ดูเหมือนจะไม่มีผลกระทบใด ๆ
-async no . นี่เป็นพฤติกรรมเริ่มต้นในโหมดเสียงเท่านั้น แต่ตัวเลือกนี้อาจมีประโยชน์เป็นตัวเลือกบรรทัดคำสั่งเพื่อปิดตัวเลือก -async
ที่ตั้งไว้ในไฟล์การกำหนดค่า "UXPLAYRC"
-DB ต่ำ [: สูง ] ช่วยลดการลดทอนการลดระดับเสียง (GAIN) จาก -30dB: 0dB ถึง ต่ำ : 0dB หรือ ต่ำ : สูง ขีด จำกัด ล่าง ต่ำ จะต้องเป็นลบ (การลดทอน); ขีด จำกัด สูงสุดสามารถเป็นสัญญาณได้ (GStreamer จำกัด ปริมาณการเพิ่ม ความสูง เพื่อให้ไม่เกิน +20dB) การ rescaling คือ "แบน" ดังนั้นสำหรับ -DB -50: 10 การเปลี่ยนแปลงการลดทอนการออกอากาศโดย -7dB ถูกแปลเป็น -7 x (60/30) = -14dB การลดทอนและปริมาณสูงสุด (AirPlay 0dB) เป็นการเพิ่ม 10dB และ AirPlay -30dB จะกลายเป็น -50dB โปรดทราบว่าค่าการออกอากาศขั้นต่ำ (-30dB แน่นอน) ถูกแปลเป็น "ปิดเสียง"
-Taper ให้โปรไฟล์การควบคุมระดับเสียง "เรียว" (จับคู่ที่เรียกว่า "Dasl-tapering" ใน Shairport-Sync): ทุกครั้งที่ความยาวของตัวเลื่อนระดับเสียง (หรือจำนวนขั้นตอนเหนือใบ้โดยที่ 16 ขั้นตอน = เต็ม ปริมาณ) ลดลง 50%ปริมาณการรับรู้จะลดลงครึ่งหนึ่ง (การลดทอน 10dB) (นี่คือการแก้ไขที่ปริมาณต่ำเพื่อใช้ปริมาณ "ไม่ได้อ่าน" ถ้ามันดังขึ้น)
-S WXH เช่น -S 1920x1080 (= "1080p"), ความกว้างเริ่มต้นและความสูงเริ่มต้นในพิกเซลสำหรับวิดีโอ H264 (ค่าเริ่มต้นกลายเป็น 3840x2160 (= "4K") เมื่อใช้ตัวเลือก -H265) นี่เป็นเพียงคำขอที่ทำกับไคลเอนต์ AirPlay และอาจจะไม่ใช่ความละเอียดสุดท้ายที่คุณได้รับ W และ H เป็นตัวเลขทั้งหมดที่มีตัวเลขสี่หลักหรือน้อยกว่า โปรดทราบว่าขนาดพิกเซล ความสูง เป็นตัวควบคุมที่ใช้โดยไคลเอนต์เพื่อกำหนดรูปแบบการสตรีม ความกว้างถูกปรับแบบไดนามิกให้เป็นรูปร่างของภาพ (รูปแบบแนวตั้งหรือรูปแบบภูมิทัศน์ขึ้นอยู่กับว่า iPad จัดขึ้นอย่างไร)
-S WXH@R ดังที่กล่าวมาข้างต้น แต่ยังแจ้งไคลเอนต์ AirPlay เกี่ยวกับอัตราการรีเฟรชหน้าจอของจอแสดงผล ค่าเริ่มต้นคือ r = 60 (60 Hz); r ต้องเป็นจำนวนทั้งหมดน้อยกว่า 256
-o เปิดตัวเลือก "overscanned" สำหรับหน้าต่างการแสดงผล สิ่งนี้จะช่วยลดความละเอียดของภาพโดยใช้พิกเซลบางตัวที่ร้องขอโดยตัวเลือก -S 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 DECODER) ตัวเลือกนี้ควรป้องกัน Autovideosink ที่เลือกปลั๊กอินวิดีโอวิดีโอที่เร่งด้วยฮาร์ดแวร์เช่น Vaapisink
-VP Parser จะเลือกองค์ประกอบ Parser ของ Gstreamer Pipeline ของ Gstreamer, ค่าเริ่มต้นคือ H264Parse การใช้เครื่องหมายคำพูด "... " อนุญาตให้เพิ่มตัวเลือก
-VD Decoder เลือกองค์ประกอบตัวถอดรหัส H264 ของ Gstreamer ของ Gstreamer แทนที่จะเป็นค่าเริ่มต้น "DecodeBin" ซึ่งเลือกให้คุณ การถอดรหัสซอฟต์แวร์ทำได้โดย AVDEC_H264; ตัวถอดรหัสฮาร์ดแวร์ต่าง ๆ ได้แก่ : VAAPIH264DEC, NVDEC, NVH264DEC, V4L2H264DEC (สิ่งเหล่านี้ต้องการให้ฮาร์ดแวร์ที่เหมาะสมมีอยู่) การใช้เครื่องหมายคำพูด "... " อนุญาตให้มีพารามิเตอร์บางตัวรวมอยู่ในชื่อตัวถอดรหัส
-VC Converter เลือกองค์ประกอบ Videoconverter ของ Gstreamer Pipeline แทนที่จะเป็นค่าเริ่มต้น "VideoConvert" เมื่อใช้ Video4Linux2 ฮาร์ดแวร์การตกแต่งโดย GPU, -vc v4l2convert
จะใช้ GPU สำหรับการแปลงวิดีโอด้วย การใช้เครื่องหมายคำพูด "... " อนุญาตให้มีพารามิเตอร์บางตัวรวมอยู่ในชื่อตัวแปลง
-VS VideoSink เลือก GTREAMER VIDEOSINK แทนที่จะเป็นค่าเริ่มต้น "AutoVideOsink" ซึ่งเลือกให้คุณ ตัวเลือก VideoSink บางตัว ได้แก่ : Ximagesink, xvimagesink, vaapisink (สำหรับกราฟิก Intel), gtksink, glimagesink, waylandsink, osxvideosink (สำหรับ macOS), kmssink (สำหรับระบบที่ไม่มี x11 เช่น raspberry pi os lite) FPS) การใช้เครื่องหมายคำพูด "... " อนุญาตให้มีพารามิเตอร์บางอย่างที่รวมอยู่ในชื่อ VideoSink ตัวอย่างเช่นโหมด เต็มหน้าจอ ได้รับการสนับสนุนโดยปลั๊กอิน Vaapisink และได้รับโดยใช้ -vs "vaapisink fullscreen=true"
; สิ่งนี้ยังใช้งานได้กับ waylandsink
ไวยากรณ์ของตัวเลือกดังกล่าวมีความเฉพาะเจาะจงกับปลั๊กอินที่กำหนด (ดูเอกสาร Gstreamer) และวิดีโอบางอย่างของ VideoSink อาจไม่ทำงานในระบบของคุณ
-vs 0 ยับยั้งการแสดงผลของวิดีโอสตรีม ในโหมดมิเรอร์หน้าจอของไคลเอนต์ยังคงมิเรอร์ในอัตราที่ลดลง 1 เฟรมต่อวินาที แต่ไม่ได้แสดงผลหรือแสดง ตัวเลือกนี้ควรใช้เสมอหากเซิร์ฟเวอร์เป็น "หัวหัว" (โดยไม่มีหน้าจอที่แนบมาเพื่อแสดงวิดีโอ) และใช้เพื่อแสดงเสียงเท่านั้นซึ่งจะเป็นเสียงที่ถูกบีบอัดของ AAC ในโหมดมิเรอร์ด้วยวิดีโอที่ไม่ได้รับ Apple Lossless Audio ในโหมด AirPlay เท่านั้น
-V4L2 การตั้งค่าวิดีโอสำหรับฮาร์ดแวร์ H264 Decoding ใน GPU โดย Video4Linux2 เทียบเท่ากับ -vd v4l2h264dec -vc v4l2convert
-BT709 วิธีแก้ปัญหาสำหรับความล้มเหลวของปลั๊กอิน Video4Linux2 รุ่นเก่าเพื่อรับรู้การใช้แอปเปิ้ลของตัวแปร "สีเต็มช่วง" ของ Apple (แต่อนุญาต) สิ่งนี้ไม่จำเป็นอีกต่อไปโดย Gstreamer-1.20.4 และแบ็คพอร์ทจากมัน
-rpi เทียบเท่ากับ "-v4l2" (ไม่ถูกต้องสำหรับ Raspberry Pi Model 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)
-As Audiosink เลือก Gstreamer Audiosink แทนที่จะปล่อยให้ Autoaudiosink เลือกให้คุณ ตัวเลือก Audiosink บางตัว ได้แก่ : Pulsesink, Alsasink, Pipewiresink, Osssink, Oss4sink, Jackaudiosink, Osxaudiosink (สำหรับ MacOS), Wasapisink, DirectSoundSink (สำหรับ Windows) การใช้เครื่องหมายคำพูด "... " อาจอนุญาตให้มีพารามิเตอร์เสริมบางอย่าง (เช่น -as "alsasink device=..."
เพื่อระบุอุปกรณ์เอาต์พุตที่ไม่ได้เปลี่ยนค่า) ไวยากรณ์ของตัวเลือกดังกล่าวมีความเฉพาะเจาะจงกับปลั๊กอินที่กำหนด (ดูเอกสาร Gstreamer) และตัวเลือกบางอย่างของ Audiosink อาจไม่ทำงานในระบบของคุณ
-As 0 (หรือเพียงแค่ -A ) ยับยั้งการเล่นของเสียงสตรีม แต่แสดงวิดีโอสตรีม
-AL X ระบุแฝงเสียง X ในวินาที (ทศนิยม) วินาทีในเสียงเท่านั้น (ALAC) ที่รายงานไปยังลูกค้า อนุญาตให้มีค่าในช่วง [0.0, 10.0] วินาทีและจะถูกแปลงเป็นไมโครวินาทีทั้งหมด ค่าเริ่มต้นคือ 0.25 วินาที (250000 USEC) (อย่างไรก็ตามลูกค้าดูเหมือนจะเพิกเฉยต่อความล่าช้าที่รายงานนี้ดังนั้นตัวเลือกนี้ดูเหมือนจะไม่ทำงาน)
-CA FileName มีไฟล์ (ที่ ชื่อไฟล์ สามารถรวมเส้นทางเต็ม) ที่ใช้สำหรับเอาต์พุตของ "cover art" (จาก Apple Music ฯลฯ ) ในโหมด ALAC แบบเสียงเท่านั้น ไฟล์นี้ถูกเขียนทับด้วยหน้าปกล่าสุดเมื่อมาถึง Cover Art (รูปแบบ JPEG) จะถูกยกเลิกหากไม่ได้ใช้ตัวเลือกนี้ ใช้กับตัวแสดงภาพที่โหลดภาพใหม่หากมีการเปลี่ยนแปลงหรือเป็นประจำ ( เช่น หนึ่งครั้งต่อวินาที) เพื่อให้ได้สิ่งนี้ให้เรียกใช้ " uxplay -ca [path/to/]filename &
" ในพื้นหลังจากนั้นเรียกใช้ตัวดูภาพในเบื้องหน้า ตัวอย่างการใช้ feh
เป็นผู้ชม: เรียกใช้ " feh -R 1 [path/to/]filename
" (ในหน้าต่างเทอร์มินัลเดียวกันซึ่ง UXPLAY ถูกใส่ลงในพื้นหลัง) หากต้องการเลิกใช้ ctrl-C fg ctrl-C
เพื่อยุติการดูรูปภาพนำ uxplay
เข้าสู่เบื้องหน้าและยุติมันเช่นกัน
-Reset N กำหนดขีด จำกัด ของความล้มเหลวในการหมดเวลา 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 ฮาร์ดแวร์ "จริง" ของอุปกรณ์ โปรดทราบว่าโดยทั่วไปแล้วไคลเอนต์ iOS จะเปิดเผยที่อยู่ "ส่วนตัว WI_FI ส่วนตัวที่แตกต่างกัน" ("ที่อยู่" ปลอม "MAC) ไปยังเครือข่ายที่แตกต่างกัน (เพื่อเหตุผลด้านความเป็นส่วนตัวเพื่อป้องกันการติดตาม) ซึ่งอาจเปลี่ยนแปลงและไม่ได้เชื่อมโยงกับอุปกรณ์
-จำกัด การลบข้อ จำกัด (ค่าเริ่มต้น) สิ่งนี้มีประโยชน์เป็นอาร์กิวเมนต์บรรทัดคำสั่งเพื่อเอาชนะข้อ จำกัด ที่ตั้งไว้ในไฟล์เริ่มต้น
-IDLow ID เพิ่ม deviceId = id ไปยังรายการของไคลเอนต์ที่อนุญาตเมื่อมีการบังคับใช้ข้อ จำกัด ของลูกค้า โดยปกติแล้วนี่จะเป็นรายการในไฟล์เริ่มต้น UxPlayRC
-block ID บล็อกไคลเอนต์ด้วย deviceId = id เสมอแม้ว่าข้อ จำกัด ของไคลเอ็นต์จะไม่ถูกบังคับใช้โดยทั่วไป โดยปกติแล้วนี่จะเป็นรายการในไฟล์เริ่มต้น UxPlayRC
-FPSData เปิดการตรวจสอบรายงานปกติเกี่ยวกับประสิทธิภาพการสตรีมวิดีโอที่ลูกค้าส่ง สิ่งเหล่านี้จะปรากฏในหน้าต่างเทอร์มินัลหากใช้ตัวเลือกนี้ ข้อมูลได้รับการอัปเดตโดยไคลเอนต์ในช่วงเวลา 1 วินาที
-fps n ตั้งค่าอัตราเฟรมสูงสุด (เป็นเฟรมต่อวินาที) สำหรับไคลเอนต์ AirPlay เพื่อสตรีมวิดีโอ n ต้องเป็นจำนวนทั้งหมดน้อยกว่า 256 (ลูกค้าอาจเลือกที่จะให้บริการวิดีโอในอัตราเฟรมใด ๆ ที่ต่ำกว่านี้ค่าเริ่มต้นคือ 30 fps) การตั้งค่า 60 fps อาจให้วิดีโอที่ดีขึ้น แต่ไม่แนะนำให้ใช้กับ Raspberry Pi การตั้งค่าที่ต่ำกว่า 30 fps อาจเป็นประโยชน์ในการลดเวลาแฝงหากคุณใช้งาน Uxplay มากกว่าหนึ่งอินสแตนซ์ในเวลาเดียวกัน การตั้งค่านี้เป็นเพียงคำแนะนำสำหรับอุปกรณ์ไคลเอนต์ดังนั้นการตั้งค่าที่มีค่าสูงจะไม่บังคับให้มีเฟรมสูง (คุณสามารถทดสอบโดยใช้ "-vs fpsdisplaysink" เพื่อดูว่ามีการรับเฟรมใดหรือใช้ตัวเลือก -fpsdata ซึ่งแสดงข้อมูลประสิทธิภาพของวิดีโอสตรีมที่ส่งโดยไคลเอนต์อย่างต่อเนื่องในระหว่างการสตรีมวิดีโอ)
-f {h | v | i} ใช้การแปลงภาพ "videoflip": h = flip ในแนวนอน (พลิกซ้ายซ้ายหรือภาพกระจก); v = พลิกแนวตั้ง; i = การหมุนหรือการผกผัน 180 องศา (ซึ่งเป็นการรวมกันของ H กับ V)
-r {r | l} 90 องศาขวา (ตามเข็มนาฬิกา) หรือซ้าย (ทวนเข็มนาฬิกา); การแปลงภาพเหล่านี้จะดำเนินการหลังจากการแปลง -F ใด ๆ
-m [Mac] เปลี่ยนที่อยู่ MAC (ID อุปกรณ์) ที่ใช้โดย UXPlay (ค่าเริ่มต้นคือการใช้ที่อยู่ฮาร์ดแวร์ MAC จริงที่รายงานโดยการ์ดเครือข่ายคอมพิวเตอร์ของโฮสต์) (Server_name ที่แตกต่างกันที่อยู่ MAC และพอร์ตเครือข่ายเป็นสิ่งจำเป็นสำหรับการรัน UXPlay แต่ละครั้งหากคุณพยายามเรียกใช้ UXPLAY มากกว่าหนึ่งอินสแตนซ์บนคอมพิวเตอร์เครื่องเดียวกัน) ถ้า [MAC] (ในรูปแบบ XX: XX: XX: XX: XX: XX: XX: XX: XX: XX: XX: XX: ไม่ได้รับ xx, 6 hex octets) ที่อยู่ MAC แบบสุ่มจะถูกสร้างขึ้น หาก UxPlay ไม่สามารถค้นหาที่อยู่ MAC ที่แท้จริงของการ์ดเครือข่าย (โดยเฉพาะอย่างยิ่งที่อยู่ MAC ที่ใช้โดยอินเตอร์เฟสเครือข่ายที่ใช้งานอยู่ครั้งแรกที่ตรวจพบ) ที่อยู่ MAC แบบสุ่มจะถูกใช้แม้ว่าจะไม่ได้ระบุตัวเลือก -M (โปรดทราบว่าที่อยู่ MAC แบบสุ่มจะแตกต่างกันในแต่ละครั้งที่ uxplay เริ่มต้น)
-KEY [ ชื่อไฟล์ ] : ตัวเลือก (ปลอดภัยมากขึ้น) สำหรับการสร้างและจัดเก็บคีย์สาธารณะถาวร (จำเป็นสำหรับตัวเลือก -PIN) ถูกแทนที่ด้วยค่าเริ่มต้นด้วยวิธี (ปลอดภัยน้อยกว่า) ซึ่งสร้างคีย์จาก "รหัสอุปกรณ์ของเซิร์ฟเวอร์" "(ที่อยู่ MAC ซึ่งสามารถเปลี่ยนแปลงได้ด้วยตัวเลือก -M อย่างสะดวกสบายเป็นตัวเลือกไฟล์เริ่มต้น) เมื่อมีการใช้ตัวเลือก -KEY จะมีการสร้างและจัดเก็บไว้ใน $HOME/.uxplay.pem
อย่างปลอดภัยหากไฟล์นั้นไม่มีอยู่หรืออ่านจากมันหากมีอยู่ (เป็นทางเลือกคีย์สามารถเก็บไว้ใน ชื่อไฟล์ ) วิธีนี้ปลอดภัยกว่าวิธีเริ่มต้นใหม่ (เนื่องจาก ID อุปกรณ์ออกอากาศในการประกาศ DNS_SD) แต่ยังคงปล่อยให้คีย์ส่วนตัวสัมผัสกับทุกคนที่สามารถเข้าถึงไฟล์ PEM . ตัวเลือกนี้ควรตั้งค่าในไฟล์เริ่มต้น UxPlay เป็นบรรทัด "คีย์" หรือ " ชื่อไฟล์ คีย์" (ไม่มีการเริ่มต้น "-") โดยที่ ชื่อไฟล์ เป็นเส้นทางเต็มซึ่งควรจะอยู่ในใบเสนอราคา ( "...."
) ถ้า มันมีช่องว่างใด ๆ เนื่องจากวิธีการเริ่มต้นนั้นง่ายกว่าและความปลอดภัยของการเข้าถึงไคลเอนต์ไปยัง UxPlay จึงไม่น่าจะเป็นปัญหาที่สำคัญตัวเลือก -KEY จึงไม่แนะนำอีกต่อไป
-DACP [ ชื่อไฟล์ ] : ส่งออกคีย์ DACP-ID และ Active-Remote Client Client Client Client DACP-ID ไปยังไฟล์: ค่าเริ่มต้นคือ $ HOME/.UXPLAY.DACP (สามารถเปลี่ยนเป็น ชื่อไฟล์ ได้) สามารถใช้งานได้โดยแอปพลิเคชันรีโมทควบคุม ไฟล์เป็นชั่วคราว: มีอยู่เฉพาะในขณะที่ไคลเอ็นต์เชื่อมต่อ
-vdmp ทิ้งวิดีโอ H264 ไปยังไฟล์ videodump.h264 -vdmp n ทิ้งไม่เกิน n nal units ไปยัง videodump.x.h264; x = 1,2, ... เพิ่มทุกครั้งที่หน่วย SPS/PPS NAL มาถึง หากต้องการเปลี่ยนชื่อ videodump ให้ใช้ -vdmp [n] ชื่อไฟล์
-ADMP Dumps Audio ไปยังไฟล์ AudioDump.x.aac (AAC-ELD FORMAT AUDIO), AUDIODUMP.X.ALAC (ALAC FORMAT AUDIO) หรือ AUDIODUMP.X.AUD (เสียงอื่น ๆ ) โดยที่ x = 1,2,3 ... เพิ่มทุกครั้งที่รูปแบบเสียงเปลี่ยนแปลง -Admp N จำกัด จำนวนแพ็กเก็ตที่ทิ้งไปยังไฟล์เป็น n หรือน้อยกว่า หากต้องการเปลี่ยนชื่อ AudioDump ให้ใช้ -ADMP [n] ชื่อไฟล์ โปรดทราบว่า (ไม่เหมือนกับวิดีโอที่ทิ้ง) เสียงที่ถูกทิ้งนั้นมีประโยชน์สำหรับการดีบักเท่านั้นเนื่องจากไม่ได้เป็นคอนเทนเนอร์เพื่อให้สามารถเล่นกับผู้เล่นเสียงมาตรฐานได้
-d เปิดใช้งานเอาต์พุตดีบัก หมายเหตุ: สิ่งนี้ไม่ได้แสดงข้อผิดพลาดของ GStreamer หรือข้อความถึงการดีบัก หากต้องการดูข้อผิดพลาดของ Gstreamer และข้อความเตือนให้ตั้งค่าตัวแปรสภาพแวดล้อม GST_DEBUG ด้วย "Export 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
, ด้วย
หนึ่งในการเปิดใช้งาน, ปิด sudo find /etc -name avahi-daemon.conf
เริ่ม, หยุด, สถานะ sudo find /etc -name avahi-daemon.conf
"): ตรวจสอบให้แน่ใจว่า" ปิดการเผยแพร่-เผยแพร่ " ไม่ใช่ ตัวเลือกที่เลือก) บางระบบอาจใช้ MDNSD daemon เป็นทางเลือกในการให้บริการ 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