注意:不支持 AirPlay2 多房间音频流:请使用 shairport-sync。
。
使用“ sudo apt install uxplay
”在基于 Debian 的 Linux 系统上安装 uxplay;在 FreeBSD 上使用“ sudo pkg install uxplay
”。也可通过 AUR 在基于 Arch 的系统上使用。自 v. 1.66 起,uxplay 现在也由 Fedora 38 以 RPM 格式打包(“ sudo dnf install uxplay
”)。
对于尚未打包 UxPlay 的其他基于 RPM 的发行版,现在随最新版本提供了 RPM“specfile” uxplay.spec (请参阅其“资产”),也可以在 UxPlay 源顶级目录中找到。请参阅有关使用此规范文件构建可安装 RPM 包的部分。
安装后:
(在 Linux 和 *BSD 上):如果托管 UxPlay 的服务器上的防火墙处于活动状态,请确保 mDNS/DNS-SD 查询的默认网络端口 (UDP 5353) 已打开(有关更多详细信息,请参阅下面的故障排除);还为 Uxplay 打开三个 UDP 和三个 TCP 端口,并使用“uxplay -p”选项(请参阅“ man uxplay
”或“ uxplay -h
”)。
即使您安装了发行版的预编译 uxplay 二进制包,您也可能需要阅读以下运行 UxPlay 的说明,以了解您还应该安装哪些发行版的GStreamer 插件包。
对于纯音频模式(Apple Music 等),可以通过选项“uxplay -async”获得最佳质量,但 iOS 会产生 2 秒的延迟。
将您想要用作默认值的任何 UxPlay 选项添加到启动文件~/.uxplayrc
(有关格式和其他可能的位置,请参阅“ man uxplay
”或“ uxplay -h
”)。特别是,如果您的系统使用 PipeWire 音频或 Wayland 视频系统,您可能希望将“as pipelinesink”或“vs waylandsink”添加为文件的默认值。 (如果您的 Linux/BSD 系统使用终端命令“ps waux | greppulse”或“pactl info”的输出将包含“pipewire”)。
在 Raspberry Pi 上:如果您使用 Ubuntu 22.10 或更早版本,则必须修补 GStreamer 以使用 Broadcom GPU 的硬件视频解码(也推荐,但对于 Raspberry Pi OS (Bullseye) 是可选的:如果不使用,请使用选项“ uxplay -bt709
”补丁)。
要(轻松)从源代码编译最新的 UxPlay,请参阅获取 UxPlay 部分。
该项目是一个适用于 Linux、macOS 和 *BSD 的 GPLv3 开源 unix AirPlay2 镜像服务器。它最初是由 antimof 使用基于 OpenMAX 的 RPiPlay 的代码开发的,而 RPiPlay 又源自 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 上进行测试。 (英特尔) 和索诺玛 (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 一样,在运行 Linux、macOS 或其他 UNIX 的主机的服务器显示屏上对 iOS/iPadOS/macOS 客户端(iPhone、iPod Touch、iPad、Mac 计算机)进行屏幕镜像(带音频) (现在还有 Microsoft Windows)。 UxPlay 使用“旧版协议”支持 Apple 的 AirPlay2 协议,但缺少一些功能。 (有关 Apple AirPlay 2 协议的公开信息的详细信息,请参阅此处、此处和此处;另请参阅 pyatv,它可能是添加现代协议的资源。)虽然不能保证未来的 iOS 版本将继续支持“旧版协议” 》,iOS 17继续支持。
UxPlay 服务器及其客户端必须位于同一局域网上,并且该局域网上还运行着Bonjour/Zeroconf mDNS/DNS-SD 服务器(仅 DNS-SD“服务发现”服务是严格必要的,不需要本地网络也可以是基于“.local”mDNS 的类型)。在 Linux 和 BSD Unix 服务器上,这通常由 Avahi 通过 avahi-daemon 服务提供,并且包含在大多数 Linux 发行版中(此服务也可以由 macOS、iOS 或 Windows 服务器提供)。
iOS/MacOS 客户端与 UxPlay 服务器的连接可以在AirPlay Mirror模式(在镜像客户端屏幕的同时传输有损压缩的 AAC 音频)或在替代的AirPlay Audio模式下启动,该模式在不进行屏幕镜像的情况下传输 Apple Lossless (ALAC) 音频在音频模式下,如果使用 UxPlay 选项-ca
,则元数据会显示在 uxplay 终端中,随附的封面也会输出到定期更新的文件
中,并且可以使用(重新加载)进行查看;您可以在活动连接期间在镜像和音频模式之间切换:在镜像模式下,停止镜像(或关闭镜像窗口)并启动音频模式连接,通过启动镜像模式连接切换回来;当您离开/重新进入音频模式时,艺术展示会停止/重新启动。
请注意,Apple video-DRM(在客户端上的“Apple TV 应用程序”内容中找到)无法通过 UxPlay 解密,并且无法使用 UxPlay 的 AirPlay Mirror 模式观看 Apple TV 应用程序(仅会传输未受保护的音频,采用 AAC 格式)格式),但来自无 DRM 应用程序(例如“YouTube 应用程序”)的视频和音频内容都将由 UxPlay 以镜像模式进行流式传输。
由于 UxPlay 目前不支持非 Mirror AirPlay 视频流(其中客户端控制 AirPlay 服务器上的 Web 服务器直接接收 HLS 内容,以避免被客户端解码和重新编码),因此使用 AirPlay 视频的图标YouTube 应用程序等应用程序将仅发送音频(无损 ALAC 格式),而不发送随附的视频(计划在 UxPlay 的未来版本中支持 HLS 视频)
UxPlay 使用 GStreamer“插件”来渲染音频和视频。这意味着使用多种插件“开箱即用”支持视频和音频。 AirPlay 以 h264 格式传输视频:gstreamer 解码与插件无关,并使用加速 GPU 硬件 h264 解码器(如果可用);如果不是,则使用软件解码。
适用于 Intel 和 AMD 集成显卡的 VAAPI,NVIDIA 带有“Nouveau”开源驱动程序
对于 Intel 或 AMD GPU,最好使用开源 VAAPI gstreamer 插件进行硬件解码。原则上也支持 NVIDIA 显卡的开源“Nouveau”驱动程序:请参阅此处,但这需要 VAAPI 补充从专有 NVIDIA 驱动程序中提取的固件。
具有专有驱动程序的 NVIDIA
安装 NVIDIA 的 CUDA 驱动程序libcuda.so
后,可以使用nvh264dec
插件(自 GStreamer-1.18.0 起包含在 gstreamer1.0-plugins-bad 中)在 NVIDIA GPU 上加速视频解码。对于 GStreamer-1.16.3 或更早版本,该插件称为nvdec
,并且必须由用户构建。
Video4Linux2 支持 Raspberry Pi(Pi 4B 及更早版本)上的 h264 硬件解码
Raspberry Pi (RPi) 计算机(在 Pi 4 Model B 上测试)现在可以使用软件视频解码运行 UxPlay,但首选通过 Pi 的 Broadcom 2835 GPU 中的固件进行硬件加速的 h264/h265 解码。 UxPlay 使用 GStreamer-1.22 Video4Linux2 (v4l2) 插件访问它;使用由 Raspberry Pi 维护的非主线 Linux 内核模块 bcm2835-codec,到目前为止仅包含在 Raspberry Pi OS 中,以及 Raspberry Pi Imager 提供的其他两个发行版(Ubuntu、Manjaro)。 (对于 GStreamer < 1.22,请参阅 UxPlay Wiki) 。
(新):支持 Raspberry Pi(Pi 4 model B 和 Pi 5)上的 h265 (HEVC) 硬件解码
支持是存在的,但迄今为止尚未取得令人满意的结果。 Pi model 5 仅提供 h265 视频的硬件加速 (GPU) 解码,但不提供 H264,因为其 CPU 足够强大,可以满足令人满意的软件 H264 解码
UxPlay 的 GPLv3 许可证没有添加“GPL 例外”,明确允许在链接到v.3.0.0 之前的OpenSSL 版本时以编译形式分发(旧版本的 OpenSSL 具有与 GPL 不兼容的许可证条款,除非 OpenSSL 可以被视为“系统库”,它位于 *BSD 中)。许多 Linux 发行版将 OpenSSL 视为“系统库”,但有些发行版(例如 Debian)则不然:在这种情况下,通过链接 OpenSSL-3.0.0 或更高版本可以解决问题。
下载并解压 UxPlay-master.zip,或者(如果安装了 git):“git clone https://github.com/FDH2/UxPlay”。您还可以下载版本中列出的最新或早期版本。
(针对非基于 Debian 的 Linux 或 *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”。)如果没有,您可能需要构建和安装这些来自源代码(请参阅本自述文件末尾的说明)。
如果您安装的是非标准 OpenSSL,则可能需要设置环境变量 OPENSSL_ROOT_DIR(例如,“ export OPENSSL_ROOT_DIR=/usr/local/lib64
”,如果安装位置在该位置)。同样,对于非标准(或多个)GStreamer 安装,请将环境变量 GSTREAMER_ROOT_DIR 设置为包含 UxPlay 应使用的 gstreamer 安装的“.../gstreamer-1.0/”目录的目录(如果是例如“~ /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
。
如果您在 Linux 或 *BSD 上使用 X11 Windows,并希望通过按键(F11 或 Alt_L+Enter)切换进入/退出全屏模式,则需要依赖 X11 来构建 UxPlay。从 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
,(并将手册页安装到标准位置,例如/usr/local/share/man/man1
并将自述文件安装到/usr/local/share/doc/uxplay
位置/usr/local/share/doc/uxplay
)。 (如果“man uxplay”失败,请检查是否设置了 $MANPATH:如果设置了,则需要将联机帮助页的路径(通常是 /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) 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 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) openssl libplist avahi gst-plugins-base。
FreeBSD: (sudo pkg install)libplist gstreamer1。还必须安装 avahi-libdns 或 mDNSResponder 以提供 dns_sd 库。 OpenSSL 已作为系统库安装。
首次使用 RPM 构建者应首先安装 rpm-build 和 rpmdevtools 软件包,然后使用“ rpmdev-setuptree
”创建 rpmbuild 树。然后下载 uxplay.spec 并将其复制到~/rpmbuild/SPECS
中。在该目录中,运行“ rpmdev-spectool -g -R uxplay.spec
”将相应的源文件uxplay-*.tar.gz
下载到~/rpmbuild/SOURCES
(“rpmdev-spectool”也可能简称为“spectool”) );然后运行“ rpmbuild -ba uxplay.spec
”(您将需要安装此报告所需的任何依赖项)。这应该在~/rpmbuild/RPMS
的子目录中创建 uxplay RPM 包。 ( uxplay.spec在 Fedora 38、Rocky Linux 9.2、openSUSE Leap 15.5、Mageia 9、OpenMandriva、PCLinuxOS 上进行了测试;可以轻松修改它以包含其他基于 RPM 的发行版的依赖项列表。)
接下来使用sudo apt install gstreamer1.0-
安装所需的 GStreamer 插件。所需的
值为:
基于 Debian 的发行版将一些插件包分成更小的部分:可能还需要一些插件包,包括用于 OpenGL 支持的“ gl ”(这提供了“-vs glimagesink”videosink,它在许多系统(包括 Raspberry Pi)中非常有用),并且在使用 NVIDIA GPU 进行 h264/h265 解码时应始终使用)、“ gtk3 ”(提供“-vs gtksink”videosink)和“ x ”用于 X11 支持,尽管这些可能已经安装; Intel 或 AMD 显卡的硬件加速 h264 视频解码需要“ vaapi ”(但不适用于使用专有驱动程序的 NVIDIA)。如果声音无法正常工作,则可能需要安装“ alsa ”、“ Pulseaudio ”或“ Pipewire ”插件,具体取决于音频的设置方式。
在某些情况下,由于专利问题,官方发行版中未提供以镜像模式解码 AAC 音频所需的 libav 插件功能avdec_aac :从这些发行版的社区存储库中获取它。
Red Hat 或像 CentOS 这样的克隆(现在继续作为 Rocky Linux 或 Alma Linux):安装 gstreamer1-libav gstreamer1-plugins-bad-free(+ 用于 Intel/AMD 显卡的 gstreamer1-vaapi)。在最近的 Fedora 中,gstreamer1-libav 更名为 gstreamer1-plugin-libav。要获取 avdec_aac,请从 rpmfusion.org 安装软件包:(从 rpmfusion 获取 ffmpeg-libs;在 RHEL 或克隆版上,但不是最近的 Fedora,也从那里获取 gstreamer1-libav)。
Mageia、PCLinuxOS、OpenMandriva:安装 gstreamer1.0-libav gstreamer1.0-plugins-bad(+ 用于 Intel/AMD 显卡的 gstreamer1.0-vaapi)。在 Mageia 上,要获取 avdec_aac,请从“受污染的”存储库安装 ffmpeg (它还提供了更完整的 gstreamer1.0-plugins-bad)。
openSUSE:安装 gstreamer-plugins-libav gstreamer-plugins-bad(+ 用于 Intel/AMD 显卡的 gstreamer-plugins-vaapi)。要获取 avdec_aac,请从 Packman“Essentials”安装适用于 openSUSE 的 libav* 软件包;建议:添加Packman存储库后,使用YaST软件管理中的选项将多媒体的所有系统包切换到Packman)。
Arch Linux安装 gst-plugins-good gst-plugins-bad gst-libav (+ 用于 Intel/AMD 显卡的 gstreamer-vaapi)。
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(或关闭窗口)终止它。如果 iOS 客户端的下拉“屏幕镜像”面板看不到 UxPlay 服务器,请检查您的 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 服务器默认情况下不要求客户端使用服务器显示的 pin 码进行初始“配对”(此后客户端“信任”服务器,并且不需要重复此操作)。从 v1.67 开始,Uxplay 提供了这样的“pin 身份验证”作为选项:如果您想使用它,请参阅“用法”中的“ -pin
”和“ -reg
”了解详细信息。一些具有 MDM(移动设备管理,通常出现在雇主拥有的设备上)的客户端需要使用 PIN 身份验证:即使在没有 PIN 选项的情况下运行,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 开始,另一种方法(GStreamer 的“ sync=true ”模式)是新的默认方法,该方法使用客户端发送的音频和视频流中的时间戳。在低解码功率 UxPlay 主机(例如 Raspberry Pi Zero W 或 3 B+ 型号)上,这将丢弃无法及时解码以播放音频的视频帧,从而使视频不稳定,但仍保持同步。
不丢弃后期视频帧的旧方法在更强大的系统上运行良好,并且仍然可以通过 UxPlay 选项“ -vsync no
”使用;此方法适用于“实时流媒体”,例如,当使用 UxPlay 作为 Mac 计算机的第二个显示器时可能会更好,而新的默认基于时间戳的方法最适合观看视频,以保持嘴唇运动和声音同步。 (如果不使用时间戳,如果解码速度不够快,视频最终将落后于音频:硬件加速视频解码有助于防止以前在不使用时间戳时出现这种情况。)
-async
timestamp-为基础的选项。 (例如,如果您想在客户端上跟随 Apple Music 歌词,同时在 UxPlay 服务器上收听优质声音)。这会延迟客户端上的视频以匹配服务器上的音频,因此在客户端上启动的暂停或音轨更改对服务器播放的音频生效之前会导致轻微的延迟。 AirPlay 音量控制可将音量(增益)衰减高达 -30dB:分贝范围 -30:0 可以使用选项-db
(“-db Low ”或“-db”从Low :0 或Low : High重新调整) Low : High "), Low必须为负数。重新缩放以分贝为单位呈线性。请注意,GStreamer 的音频格式将“剪辑”任何高于 +20db 的音频增益,因此请将“高”保持在该级别以下。选项-taper
提供了一些用户可能喜欢的“锥形”AirPlay 音量控制配置文件。
-vsync 和 -async 选项还允许以毫秒为单位进行可选的正(或负)音频延迟调整,以进行微调: -vsync 20.5
相对于视频延迟音频 0.0205 秒;负值会推动它。)
您可能会发现通过设置 -fps 60 可以改进视频,该设置允许某些视频以每秒 60 帧的速度播放。 (您可以使用 -vs fpsdisplaysink 和/或 -FPSdata 查看实际流式传输的帧速率。)使用此选项时,您应该使用默认的基于时间戳的同步选项-vsync
。
从 UxPlay-1.54 开始,您可以在纯音频 (ALAC) 模式下显示来自 Apple Music 等来源的随附“封面艺术”:在后台运行“ uxplay -ca
”,然后运行具有自动重新加载功能的图像查看器功能:例如“feh”:在前台运行“ feh -R 1
”;终止 feh,然后使用“ ctrl-C fg ctrl-C
”终止 Uxplay。
默认情况下,GStreamer 使用算法来搜索要使用的最佳“videosink”(GStreamer 术语,表示用于显示图像的图形驱动程序)。您可以使用 uxplay 选项-vs
来覆盖它。哪些视频接收器可用取决于您的操作系统和图形硬件:使用“ gst-inspect-1.0 | grep sink | grep -e video -e Video -e image
”来查看可用的内容。 Linux/*BSD 上的一些可能性是:
glimagesink (OpenGL)、 waylandsink
xvimagesink , ximagesink (X11)
kmssink 、 fbdevsink (不带 X11 的控制台图形)
vaapisink (用于 Intel/AMD 硬件加速图形);对于 NVIDIA 硬件图形(带有 CUDA),请使用glimagesink与“ -vd nvh264dec
”(或“nvh264sldec”,一种新变体,在 GStreamer-1.24 中将成为“nvh264dec”)结合使用。
如果服务器是“无头”(没有连接监视器,仅渲染音频),请使用-vs 0
。
GStreamer 还会搜索最好的“音频接收器”;使用-as
覆盖其选择。 Linux 上的选择包括pulsesink、alsasink、pipewiresink、oss4sink;查看gst-inspect-1.0 | grep sink | grep -e audio -e Audio
.
一个常见问题涉及 GStreamer 尝试使用配置不正确或缺少加速硬件 h264 视频解码(例如 VAAPI)。尝试“ uxplay -avdec
”强制软件视频解码;如果这有效,您可以尝试修复加速硬件视频解码(如果需要),或者只需卸载 GStreamer vaapi 插件。
有关更多运行时选项,请参阅用法。
对于帧缓冲视频(对于 Raspberry Pi OS“Lite”和其他非 X11 发行版),请使用 KMS 视频接收器“-vs kmssink”(DirectFB 帧缓冲视频接收器“dfbvideosink”在 Pi 上损坏,并出现段错误)。在这种情况下,您应该明确使用“-vs kmssink”选项,因为没有它,autovideosink 找不到正确的视频接收器。
Raspberry Pi 5 不提供硬件 H264 解码(也不需要)。
Pi Zero 2 W、3 Model B+和4 Model B应该使用Broadcom GPU的硬件H264解码,但它需要Raspberry Pi内核树中维护的非主流内核模块bcm2835_codec;已知提供它的发行版包括 Raspberry Pi OS、Ubuntu 和 Manjaro-RPi4。如果此模块不可用,请使用软件解码(选项 -avdec)。
如果使用硬件 H264 解码,Uxplay 使用 GStreamer-1.22 及更高版本的 Video4Linux2 (v4l2) 插件来访问 GPU。这应该会自动发生。可以使用选项 -v4l2,但通常最好让 GStreamer 自己找到最佳视频管道。
在较旧的发行版 (GStreamer < 1.22) 上,v4l2 插件需要补丁:请参阅 UxPlay Wiki。旧版 Raspberry Pi OS (Bullseye) 有一个部分修补的 GStreamer-1.18.4,它需要 uxplay 选项 -bt709(并且不要使用 -v4l2);在这种情况下,最好应用 UxPlay Wiki 中的完整补丁。
对于“双遗产”Raspberry Pi OS (Buster),没有适用于 GStreamer-1.14 的补丁。相反,在构建 UxPlay 之前,首先使用这些说明从源代码构建一个完整的更新的 GStreamer-1.18.6。
运行 32 位操作系统的 Raspberry Pi 3 Model B+ 也可以使用 GStreamer OMX 插件访问 GPU(使用选项“ -vd omxh264dec
”),但这会被 Pi 4 Model B 固件破坏。 OMX 支持已从 Raspberry Pi OS (Bullseye) 中删除,但存在于 Buster 中。
Raspberry Pi 5 型号以及 Raspberry Pi 4 B 型号上的 Broadcom GPU 支持H265 (4K)视频的硬件解码。虽然 GStreamer 似乎利用了这种硬件解码,但 UxPlay 在 4K 视频上的渲染速度令人满意。这些Raspberry Pi模型尚未实现。激活 h265 支持需要选项“-h265”。在此模式下首选有线以太网连接(客户端可能需要)。
即使使用 GPU 视频解码,低功耗型号也可能会丢弃一些帧,以使用时间戳保持音频和视频同步。在旧版 Raspberry Pi OS (Bullseye) 中,raspi-config“性能选项”允许指定分配给 GPU 的内存量,但 Bookworm 中似乎不存在此设置(但仍然可以通过添加一行将其设置为例如 128MB) /boot/config.txt 中的“gpu_mem=128”)。在 32 位 Bullseye 或 Bookworm Lite 中测试时,Pi Zero 2 W(具有 512MB 内存)运行良好,GPU 分配有 128MB(默认值似乎是 64MB)。
R Pi 的基本 uxplay 选项是uxplay [-vs
。选择
= glimagesink
有时很有用。对于 Wayland 视频合成器,请使用
= waylandsink
。对于帧缓冲视频,请使用
= kmssink
。
ssh user@remote_host
export DISPLAY=:0
nohup uxplay [options] > FILE &
声音和视频将在远程主机上播放;如果 ssh 会话关闭,“nohup”将使 uxplay 保持运行。终端输出保存到 FILE(可以是 /dev/null 来丢弃它)
注意:macOS 12 Monterey 中包含本机 AirPlay 服务器功能,但仅限于最新的硬件。 UxPlay 可以在无法运行 Monterey 的旧版 macOS 系统上运行,或者可以运行 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,还请安装git
。
接下来安装 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 用户) :从 https://gstreamer.freedesktop.org/download/ 安装适用于 macOS 的 GStreamer 版本。 (此版本包含其自己的 pkg-config,因此您无需安装。)安装 gstreamer-1.0 和 gstreamer-1.0-devel 软件包。下载后,按住 Shift 键并单击它们进行安装(它们安装到 /Library/FrameWorks/GStreamer.framework)。如果 Homebrew 或 MacPorts 用户使用“官方”版本,则不应安装(或不应卸载)其包管理器提供的 GStreamer。
使用 Homebrew 的 GStreamer :需要 pkg-config:(“brew install pkg-config gstreamer”)。这会导致 Homebrew 安装大量额外的软件包作为依赖项。 Homebrew gstreamer 安装最近已被重新设计为名为gstreamer
单个“公式”,现在无需在环境中设置 GST_PLUGIN_PATH 即可运行。 Homebrew 将 gstreamer 安装到(HOMEBREW)/lib/gstreamer-1.0
,其中(HOMEBREW)/*
在 Apple Silicon Mac 上是/opt/homebrew/*
,在 Intel Mac 上是/usr/local/*
;不要在那里放置任何额外的非 Homebrew 插件(您自己构建的),而是将 GST_PLUGIN_PATH 设置为指向它们的位置(Homebrew 不提供完整的 GStreamer,但似乎拥有 UxPlay 所需的一切)。
使用从 MacPorts 安装的 GStreamer :不建议这样做,因为目前 MacPorts GStreamer 很旧(v1.16.2),未维护,并且构建为使用 X11:
(如果您确实希望使用 MacPorts GStreamer-1.16.2,请安装 pkgconf(“sudo port install pkgconf”),然后“sudo port install gstreamer1-gst-plugins-base gstreamer1-gst-plugins-good gstreamer1-gst-plugins -bad gstreamer1-gst-libav"。要在 macOS 上支持 X11,请使用特殊的 cmake 选项-DUSE_X11=ON
编译 UxPlay,并使用 -vs ximagesink 从 XQuartz 终端运行它;较旧的非视网膜 Mac 在使用时需要较低的分辨率X11: uxplay -s 800x600
。)
安装 GStreamer 后,构建并安装 uxplay:打开终端并切换到 UxPlay 源目录(“UxPlay-master”用于 zip 文件下载,“UxPlay”用于“git clone”下载)并使用“cmake . ; make ; 构建/安装” sudo make install "(与 Linux 相同)。
在检查 GStreamer 警告时运行 UxPlay(在运行 UxPlay 之前使用“export GST_DEBUG=2”执行此操作)显示,默认(自 UxPlay 1.64 起)使用时间戳进行视频同步,许多视频帧被丢弃(仅在 macOS 上),可能是由于 GStreamer 警告中显示的另一个错误(关于 videometa)。建议:使用新的UxPlay“无时间戳”选项“ -vsync no
” (您可以在uxplayrc配置文件中添加一行“vsync no”)。
在安装了 GStreamer 的 macOS 上,唯一可用的 videosink 似乎是 glimagesink(autovideosink 的默认选择)和 osxvideosink。窗口标题不显示Airplay 服务器名称,但该窗口对屏幕共享应用程序(例如Zoom)可见。唯一可用的音频接收器似乎是 osxaudiosink。
无论是否选择,始终使用选项 -nc。这是针对 macOS 上 GStreamer 视频接收器问题的解决方法:如果在镜像窗口仍打开时 GStreamer 管道被破坏,则会发生段错误。
对于 glimagesink,分辨率设置“-s wxh”不会影响(小)初始 OpenGL 镜像窗口大小,但可以使用鼠标或触控板扩展该窗口。相反,使用“-vs osxvideosink”创建的窗口最初很大,但宽高比错误(拉伸图像);在这种情况下,当通过拖动窗口的一侧来更改窗口宽度时,纵横比会发生变化;选项-vs "osxvideosink force-aspect-ratio=true"
可用于使窗口在首次打开时具有正确的宽高比。
下载并安装Bonjour SDK for Windows v3.0 。您可以在 softpedia.com 上下载 SDK,无需任何注册,或者从 Apple 官方网站 https://developer.apple.com/download 获取(Apple 让您注册为开发人员,以便从他们的网站访问它)。这应该将 Bonjour SDK 安装为C:Program FilesBonjour SDK
。
(这是针对 64 位 Windows 的;32 位 Windows 的构建应该是可能的,但尚未测试。)将使用类似 UNIX 的 MSYS2 构建环境:从官方网站 https://www 下载并安装 MSYS2 .msys2.org/。接受默认安装位置C:mysys64
。
MSYS2 软件包与 Arch Linux 使用的“pacman”软件包管理器的变体一起安装。从 Windows 开始菜单中的 MSYS2 选项卡打开“MSYS2 MINGW64”终端,并使用“pacman -Syu”更新新的 MSYS2 安装。然后安装MinGW-64编译器和cmake
pacman -S mingw-w64-x86_64-cmake mingw-w64-x86_64-gcc
具有所有必需依赖项的编译器将安装在 msys64 目录中,默认路径为C:/msys64/mingw64
。在这里,我们将简单地从 MSYS2 环境中的命令行构建 UxPlay(对于构建系统,使用“ ninja
”代替“ make
”)。
从 github 下载最新的 UxPlay (要使用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 构建系统,可以从官方 GStreamer 站点获取适用于 Windows 的 GStreamer 的 MSVC 版本,但仅对 MSYS2 上的 MinGW 64 位构建进行了测试。
cd 到 UxPlay 源目录,然后“ mkdir build
”和“ cd build
”。构建过程假设 Bonjour SDK 安装在C:Program FilesBonjour SDK
。如果在其他地方,请设置环境变量 BONJOUR_SDK_HOME 指向其位置。然后构建 UxPlay
cmake ..
ninja
假设其中任何一个都没有错误,您将在当前(“build”)目录中构建 uxplay 可执行文件uxplay.exe 。其他版本中提供的“sudo make install”和“sudo make uninstall”功能在 Windows 上不可用;相反,MSYS2 环境具有/mingw64/...
可用,您可以在C:/msys64/mingw64/bin
中安装 uxplay.exe 可执行文件(以及C:/msys64/mingw64/share/...
中的联机帮助页和文档) ) 和
cmake --install . --prefix /mingw64
为了能够查看联机帮助页,您需要使用“ pacman -S man
”安装联机帮助页查看器。
要运行uxplay.exe,您需要使用pacman -S mingw-w64-x86_64-gst-
安装一些 gstreamer 插件包,其中所需的具有由以下给出的
您可能使用的其他可能的 MSYS2 gstreamer 插件包列在 MSYS2 包中。
您还需要向 uxplay 可执行文件 uxplay.exe 授予通过 Windows 防火墙访问数据的权限。当您第一次运行 uxplay 时,系统可能会自动向您提供执行此操作的选择,或者您可能需要使用Windows 设置 -> 更新和安全 -> Windows 安全 -> 防火墙和网络保护 -> 允许应用程序通过防火墙 来执行此操作。如果您的病毒防护将 uxplay.exe 标记为“可疑”(但没有真正的恶意软件签名),您可能需要给它一个例外。
现在通过运行“ uxplay
”(在 MSYS2 终端窗口中)进行测试。如果您需要指定音频接收器,Windows 上有两个主要选择:较旧的 DirectSound 插件“ -as directsoundsink
”,以及更现代的 Windows 音频会话 API (wasapi) 插件“ -as wasapisink
”,它支持其他选项,例如
uxplay -as 'wasapisink device=""'
其中
通过其 GUID 指定可用的音频设备,可以使用“ gst-device-monitor-1.0 Audio
”找到该设备:
形式类似于{0.0.0.00000000}.{98e35b2b-8eba-412e-b840-fd2c2492cf44}
.如果未指定“ device
”,则使用默认音频设备。
如果您希望使用-vs
选项指定视频接收器,则
的一些选择是d3d11videosink
、 d3dvideosink
、 glimagesink
、 gtksink
。
-vs "d3d11videosink fullscreen-toggle-mode=property fullscreen=true"
始终处于全屏模式,或者能够使用 Alt-Enter 键切换到或退出全屏模式与选项-vs "d3d11videosink fullscreen-toggle-mode=alt-enter"
组合。为了方便起见,如果仅使用-vs d3d11videosink
(带或不带全屏选项“-fs”),则会添加这些选项。 (Windows 用户可能希望将“ vs d3d11videosink
”(无首字母“ -
”)添加到 UxPlay 启动选项文件中;请参阅“man uxplay”或“uxplay -h”。)可执行文件 uxplay.exe 也可以在没有 MSYS2 环境的情况下在 Windows 终端中使用C:msys64mingw64binuxplay
运行。
选项:
-
”字符)(由环境变量$UXPLAYRC
或~/.uxplayrc
或~/.config/uxplayrc
给出);以“ #
”开头的行被视为注释并被忽略。命令行选项取代启动文件中的选项。-n 服务器名称(默认:UxPlay); server_name@ hostname将是为您的 iPad、iPhone 等提供 AirPlay 服务的名称,其中hostname是运行 uxplay 的服务器的名称。现在,这也将是镜像显示 (X11) 窗口上方显示的名称。
-nh不要在 AirPlay 服务器名称末尾附加“@主机名”。
-h265激活“ScreenMultiCodec”支持(AirPlay“功能”位 42),以便在屏幕镜像模式下除了 h264 视频 (1080p) 之外还接受 h265 (4K/HEVC) 视频。使用此选项时,将创建两个“视频管道”(一个用于 h264,一个用于 h265)。如果管道中的任何 GStreamer 插件特定于 h264 或 h265,则每个管道中将使用正确的版本。对于 4K 视频,有线客户端-服务器以太网连接优于 Wifi,并且客户端可能需要这种连接。如果请求分辨率“-s wxh”且 h > 1080,则只有最新的 Apple 设备(M1/M2 Mac 或 iPad 以及某些 iPhone)可以发送 h265 视频。 “-h265”选项将默认分辨率(“-s”选项)从 1920x1080 更改为 3840x2160,并将默认最大帧速率(“-fps”选项)保留为 30fps。
-pin [nnnn] :(自 v1.67 起)当新客户端第一次连接时使用 Apple 风格(一次性)“pin”身份验证:终端上显示四位数的 pin 代码,并且客户端屏幕显示登录提示,需要输入此信息。当“-pin”单独使用时,每次认证都会选择一个新的随机pin码;如果使用“-pin nnnn”(例如“-pin 3939”),这将设置一个不变的固定代码。身份验证将服务器添加到客户端的“受信任服务器”列表中,并且只要客户端和服务器公钥保持不变,客户端就不需要重新进行身份验证。 (默认情况下,从 v1.68 开始,服务器公钥是从 MAC 地址生成的,可以使用 -m 选项更改该地址;请参阅 -key 选项以获取密钥生成的替代方法)。 (如果您希望 UxPlay 服务器使用 pin 身份验证协议,请在 UxPlay 启动文件中添加一行“pin”)。
-reg [文件名] :(自 v1.68 起)。如果使用“-pin”,则此选项在 $HOME/.uxplay.register (或可选地,在filename中)维护经过 pin 验证的“受信任客户端”的寄存器。如果没有此选项,跳过 PIN 身份验证的返回客户端将受到信任且不会被检查。如果 UxPlay 用于更公开的环境中,此选项可能会很有用,以记录客户端详细信息;寄存器是文本,每个客户端一行,包含客户端的公钥(base-64 格式)、设备 ID 和设备名称;注释掉(使用“#”)或删除行会取消注册相应的客户端(请参阅选项 -restrict、-block、-allow 以了解更多控制客户端访问的方法)。 (如果您想使用此功能,请在启动文件中添加一行“reg”。)
-vsync [x] (在镜像模式下:)此选项(现在是默认值)使用时间戳将服务器上的音频与视频同步,可选音频延迟(十进制)毫秒( x =“20.5”表示 0.0205 秒延迟:允许小于一秒的正延迟或负延迟。)在没有硬件视频解码的 Raspberry Pi 等低功耗系统上需要它。
-vsync no (在镜像模式下:)这会关闭基于时间戳的音频-视频同步,恢复 UxPlay-1.64 之前的默认行为。标准桌面系统似乎在不使用时间戳的情况下运行良好:此模式适合“实时流媒体”,例如使用 UxPlay 作为 mac 计算机的第二个显示器,或监控网络摄像头;有了它,视频帧不会丢失。
-async [x] (在纯音频 (ALAC) 模式下:)此选项使用时间戳将服务器上的音频与客户端上的视频同步,并具有可选的音频延迟(十进制)毫秒( x =“20.5”表示 0.0205秒延迟:允许小于一秒的正或负延迟。)因为客户端添加了视频延迟来考虑延迟,所以异步模式下的服务器添加了等效的音频延迟,这意味着音频发生变化,例如暂停或轨道更改不会立即生效。原则上,可以通过使用-al
音频延迟设置来更改服务器向客户端报告的延迟(默认 0.25 秒)来缓解此问题,但目前更改此设置似乎没有任何效果。
-异步没有。这仍然是纯音频模式下的默认行为,但此选项可用作关闭“uxplayrc”配置文件中设置的-async
选项的命令行选项。
-db low [: high ]将 AirPlay 音量控制衰减(增益)从 -30dB:0dB 重新调整为low :0dB 或low : high 。下限low必须为负值(衰减);上限高点可以是任一符号。 (GStreamer 将音量增强限制为高,使其不能超过 +20dB)。重新缩放是“平坦”的,因此对于 -db -50:10,Airplay 衰减 -7dB 的变化会转换为 -7 x (60/30) = -14dB 衰减,并且最大音量 (AirPlay 0dB)是 10dB 增强,Airplay -30dB 将变为 -50dB。请注意,最小 AirPlay 值(准确地说是 -30dB)被转换为“静音”。
-taper提供“锥形”Airplay 音量控制配置文件(与 shairport-sync 中称为“dasl-tapering”的配置文件相匹配):每次音量滑块的长度(或静音上方的步数,其中 16 步=完整)音量)减少 50%,感知音量减半(衰减 10dB)。 (这是在低音量时修改的,如果声音较大,则使用“非锥形”音量。)
-s wxh例如 -s 1920x1080 (= "1080p"),h264 视频的默认宽度和高度分辨率(以像素为单位)。 (使用 -h265 选项时,默认分辨率变为 3840x2160(=“4K”)。)这只是向 AirPlay 客户端发出的请求,可能不是您获得的最终分辨率。 w和h是四位或更少的整数。请注意,高度像素大小是客户端用于确定流格式的控制像素;宽度根据图像的形状动态调整(纵向或横向格式,例如取决于 iPad 的握持方式)。
-s wxh@r如上所述,但还通知 AirPlay 客户端有关显示器的屏幕刷新率。默认值为 r=60 (60 Hz); r 必须是小于 256 的整数。
-o打开显示窗口的“过扫描”选项。这通过使用选项 -s wxh 请求的一些像素(或其默认值 1920x1080),通过添加未使用像素的空边界框(在过扫描的全屏显示中会丢失,并且不会丢失)来降低图像分辨率。由 gstreamer 显示)。建议:除非有特殊原因,否则不要使用此选项。
-fs使用全屏模式,但仅适用于 X11、Wayland、VAAPI 和 D3D11 (Windows)。
-p允许您选择 UxPlay 使用的网络端口(如果服务器位于防火墙后面,则需要打开这些端口)。 -p 本身设置“旧”端口 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强制使用 Gstreamer 元素 avdec_h264(libav h264 解码器)进行软件 h264 解码。此选项应防止 autovideosink 选择硬件加速的 videosink 插件,例如 vaapisink。
-vp解析器选择 GStreamer 管道的 h264 解析器元素,默认为 h264parse。使用引号“...”可以添加选项。
-vd解码器选择 GStreamer 管道的 h264 解码器元素,而不是为您选择的默认值“decodebin”。软件解码由avdec_h264完成;各种硬件解码器包括:vaapih264dec、nvdec、nvh264dec、v4l2h264dec(这些需要有适当的硬件可用)。使用引号“...”允许将某些参数包含在解码器名称中。
-vc转换器选择GStreamer管道的videoconverter元素,而不是默认值“videoconvert”。当使用 GPU 进行 Video4Linux2 硬件解码时, -vc v4l2convert
也将使用 GPU 进行视频转换。使用引号“...”允许转换器名称中包含一些参数。
-vs videosink选择 GStreamer 视频接收器,而不是为您选择的默认值“autovideosink”。一些 videosink 选项包括:ximagesink、xvimagesink、vaapisink(适用于英特尔显卡)、gtksink、glimagesink、waylandsink、osxvideosink(适用于 macOS)、kmssink(适用于没有 X11 的系统,如 Raspberry Pi OS lite)或 fpsdisplaysink(显示流帧速率)帧率)。使用引号“...”允许视频接收器名称中包含一些参数。例如,vaapisink插件支持全屏模式,通过-vs "vaapisink fullscreen=true"
获得;这也适用于waylandsink
。此类选项的语法特定于给定插件(请参阅 GStreamer 文档),并且某些 videosink 选择可能不适用于您的系统。
-vs 0抑制流视频的显示。在镜像模式下,客户端的屏幕仍以每秒 1 帧的降低速率进行镜像,但不进行渲染或显示。如果服务器是“无头”(没有连接屏幕来显示视频),并且仅用于渲染音频,则应始终使用此选项,这将是镜像模式下的 AAC 有损压缩音频,具有未渲染的视频和优质 ALAC仅 Airplay 音频模式下的 Apple 无损音频。
-v4l2 Video4Linux2 在 GPU 中进行硬件 h264 视频解码的视频设置。相当于-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 起已删除)
-asaudiosink选择 GStreameraudiosink,而不是让 autoaudiosink 为您选择它。一些音频接收器选择包括:pulsesink、alsasink、pipewiresink、osssink、oss4sink、jackaudiosink、osxaudiosink(适用于 macOS)、wasapisink、directsoundsink(适用于 Windows)。使用引号“...”可能允许一些可选参数(例如-as "alsasink device=..."
来指定非默认输出设备)。此类选项的语法特定于给定插件(请参阅 GStreamer 文档),并且某些音频接收器选择可能不适用于您的系统。
-as 0 (或只是-a )禁止播放流式音频,但显示流式视频。
-al x指定纯音频 (ALAC) 中的音频延迟x (十进制)秒,报告给客户端。允许使用 [0.0, 10.0] 秒范围内的值,并将转换为整数微秒。默认值为 0.25 秒 (250000 usec)。 (但是,客户端似乎忽略了报告的延迟,因此此选项似乎不起作用。)
-ca filename提供一个文件(其中文件名可以包含完整路径),用于在纯音频 ALAC 模式下输出“封面艺术”(来自 Apple Music等)。该文件在到达时会被最新的封面艺术覆盖。如果不使用此选项,封面艺术(jpeg 格式)将被丢弃。与图像查看器一起使用,如果图像发生变化,该图像查看器会重新加载图像,或定期(例如每秒一次)。要实现此目的,请在后台运行“ uxplay -ca [path/to/]filename &
”,然后在前台运行图像查看器。例如,使用feh
作为查看器:运行“ feh -R 1 [path/to/]filename
”(在 uxplay 置于后台的同一终端窗口中)。要退出,请使用ctrl-C fg ctrl-C
终止图像查看器,将uxplay
置于前台,然后也终止它。
-reset n设置客户端响应来自服务器的 ntp 请求的连续n次超时失败的限制(每 3 秒发送一次,以检查客户端是否仍然存在,并与其同步)。在n 次失败后,客户端将被假定为离线,并且连接将被重置以允许新的连接。 n的默认值为5;值n = 0 表示超时“无限制”。
-nofreeze在由于 ntp 超时而重置后关闭视频窗口(默认情况下使窗口保持打开状态以允许更顺利地重新连接到同一客户端)。此选项在全屏模式下可能很有用。
-nc保持以前的 UxPlay < 1.45 行为,即当客户端发送“停止镜像”信号时不会关闭视频窗口。目前,macOS 中默认使用此选项,因为如果 GStreamer 管道关闭时窗口仍处于打开状态,则 GStreamer 在 macOS 中创建的窗口将无法正确终止(会导致段错误)。
-nohold当新客户端尝试连接时断开当前连接。如果没有此选项,当前客户端将保持 UxPlay 的独占所有权,直到断开连接为止。
-restrict限制允许连接到-allow
指定的客户端。 deviceID 具有 MAC 地址的形式,当客户端尝试连接时,UxPlay 将显示该地址,并且该设备 ID 似乎是不可变的。它的格式为XX:XX:XX:XX:XX:XX
,X = 0-9,AF,并且可能是设备的“真实”硬件 MAC 地址。请注意,iOS 客户端通常会将不同的随机“私有 Wi_Fi 地址”(“假”MAC 地址)暴露给不同的网络(出于隐私原因,以防止跟踪),这些地址可能会发生变化,并且与 deviceID 不对应。
-restrict no删除限制(默认)。这作为命令行参数非常有用,可以覆盖启动文件中设置的限制。
-allow id当强制实施客户端限制时,将 deviceID = id添加到允许的客户端列表中。通常这将是 uxplayrc 启动文件中的一个条目。
-block id始终阻止 deviceID = id的客户端,即使通常不强制执行客户端限制。通常这将是 uxplayrc 启动文件中的一个条目。
-FPSdata打开对客户端发送的有关视频流性能的定期报告的监控。如果使用此选项,这些将显示在终端窗口中。数据由客户端以 1 秒的间隔更新。
-fps n设置 AirPlay 客户端流式传输视频的最大帧速率(以每秒帧数为单位); n 必须是小于 256 的整数。(客户端可以选择以低于此的任何帧速率提供视频;默认为 30 fps。)60 fps 的设置可能会改善视频质量,但不建议在 Raspberry Pi 上使用。如果您同时运行多个 uxplay 实例,低于 30 fps 的设置可能有助于减少延迟。此设置只是对客户端设备的建议,因此设置高值不会强制采用高帧速率。 (您可以使用“-vs fpsdisplaysink”进行测试以查看正在接收的帧速率,或使用选项 -FPSdata 显示客户端在视频流期间连续发送的视频流性能数据。)
-f {H|V|I}实现“视频翻转”图像变换:H = 水平翻转(左右翻转,或镜像); V = 垂直翻转; I = 180 度旋转或反转(它是 H 与 V 的组合)。
-r {R|L}右(顺时针)或左(逆时针)旋转 90 度;这些图像变换是在任何-f变换之后执行的。
-m [mac]更改UxPlay使用的MAC地址(设备ID)(默认是使用主机网卡报告的真实硬件MAC地址)。 (如果您尝试在同一台计算机上运行多个 uxplay 实例,则每个运行的 uxplay 都需要不同的服务器名称、MAC 地址和网络端口。)如果 [mac](格式为 xx:xx:xx:xx:xx: xx,6 个十六进制八位字节)未给出,则会生成随机 MAC 地址。如果 UxPlay 无法找到网卡的真实 MAC 地址(更具体地说,检测到的第一个活动网络接口使用的 MAC 地址),即使未指定选项-m ,也会使用随机 MAC 地址。 (请注意,每次启动 UxPlay 时,随机 MAC 地址都会不同)。
-key [ filename ] :默认情况下,用于生成和存储持久公钥(-pin 选项所需)的(更安全)选项已被替换为(不太安全)方法,该方法从服务器的“设备 ID”生成密钥“(MAC地址,可以使用-m选项更改,方便地作为启动文件选项)。使用 -key 选项时,将生成安全生成的密钥对并将其存储在$HOME/.uxplay.pem
中(如果该文件不存在),或者从该文件读取(如果存在)。 (可选地,密钥可以存储在filename中。)此方法比新的默认方法更安全(因为设备 ID 在 DNS_SD 公告中广播),但仍然将私钥暴露给任何可以访问 pem 文件的人。此选项应在 UxPlay 启动文件中设置为行“key”或“key filename ”(无首字母“-”),其中文件名是完整路径,应用引号括起来( "...."
),如果它包含任何空格。由于默认方法比较简单,并且客户端访问 uxplay 的安全性不太可能成为重要问题,因此不再建议使用 -key 选项。
-dacp [ filename ] :将当前客户端 DACP-ID 和 Active-Remote 密钥导出到文件:默认为 $HOME/.uxplay.dacp。 (可以选择更改为filename )。可供远程控制应用程序使用。文件是暂时的:仅在客户端连接时存在。
-vdmp将 h264 视频转储到文件 videodump.h264。 -vdmp n 将不超过 n 个 NAL 单元转储到 videodump.x.h264; x= 1,2,... 每次 SPS/PPS NAL 单元到达时都会增加。要更改名称videodump ,请使用 -vdmp [n] filename 。
-admp将音频转储到文件audiodump.x.aac(AAC-ELD 格式音频)、audiodump.x.alac(ALAC 格式音频)或audiodump.x.aud(其他格式音频),其中x = 1,2,3 ...每次音频格式改变时都会增加。 -admp n将转储到文件的数据包数量限制为n或更少。要更改名称audiodump ,请使用 -admp [n] filename 。请注意,(与转储的视频不同)转储的音频目前仅用于调试,因为它没有被容器化以使其可以使用标准音频播放器播放。
-d启用调试输出。注意:这不会显示 GStreamer 错误或调试消息。要查看 GStreamer 错误和警告消息,请在运行 uxplay 之前将环境变量 GST_DEBUG 设置为“export GST_DEBUG=2”。要查看 GStreamer 信息消息,请设置 GST_DEBUG=4;对于 DEBUG 消息,GST_DEBUG=5;增加此值可以查看更多 GStreamer 内部工作原理。
注意: uxplay
从终端命令行运行,信息性消息将写入终端。
一位用户(在 Ubuntu 上)发现编译失败,并显示有关链接到“usr/local/lib/libcrypto.a”和“zlib”的消息。这是因为(除了 libssl-dev 的标准 ubuntu 安装之外),用户没有意识到 /usr/local 中存在第二个带有 libcrypto 的安装。解决方案:当存在多个 OpenSSL 安装时,将环境变量 OPEN_SSL_ROOT_DIR 设置为指向正确的一个;在 64 位 Ubuntu 上,这是通过在运行 cmake 之前运行export OPENSSL_ROOT_DIR=/usr/lib/X86_64-linux-gnu/
来完成的。
UxPlay 需要 DNS_SD 服务发现(“Bonjour”或“Zeroconf”)服务才能正常工作。在 Linux 上,它通常由 Avahi 提供,要解决此问题,您应该使用工具avahi-browse
。 (您可能需要安装一个名称如avahi-utils
的单独软件包才能获得此功能。)
在 Linux 上,确保安装了 Avahi,并在运行 uxplay 的系统上启动 avahi-daemon 服务(您的发行版将记录如何执行此操作,例如: sudo systemctl
或sudo service avahi-daemon
,使用
启用、禁用、启动、停止、状态之一 您可能需要编辑 avahi-daemon.conf 文件(通常位于 /etc/avahi/ 中,使用“ sudo find /etc -name avahi-daemon.conf
”找到它。 sudo find /etc -name avahi-daemon.conf
"):确保未选择“禁用发布”选项)。某些系统可能会使用 mdnsd 守护程序作为提供 DNS-SD 服务的替代方案。 (FreeBSD 提供了两种选择,但仅测试了 Avahi;请参见此处。)
如果 UxPlay 停止并显示“未找到 DNS-SD 服务器”消息,这意味着您的网络没有正在运行的 Bonjour/zeroconf DNS-SD 服务器。在 v1.60 之前,如果 DNS-SD 服务注册失败,UxPlay 会静静地停止,但现在如果没有找到 DNS-SD 服务器,则会停止并显示 DNSServiceRegister 函数返回的错误消息:kDNSServiceErr_Unknown :(一位 NixOS 用户发现在 NixOS 中,如果 avahi-daemon 服务在启用发布的情况下运行,但报告“通过将 services.avahi.openFirewall 设置为 true,该错误在 NixOS 上消失”,也可能会发生此错误。)其他 mDNS 错误代码的范围为 FFFE FF00 (-65792)到 FFFE FFFF (-65537),并列在 dnssd.h 文件中。可以在这里找到该版本的旧版本(avahi 使用的版本)。 Apple 的更高版本中定义了一些额外的错误代码。
如果 UxPlay 停止运行且没有错误消息且客户端上没有显示服务器名称,则这是一个网络问题(如果您的 UxPlay 版本早于 1.60,这也是未找到 DNS-SD 服务器时的行为。)
从客户端检查此类网络问题的一个有用工具是 Apple App Store 中提供的(免费)Discovery DNS-SD 浏览器,适用于 iOS(也适用于 iPadOS)和 macOS。
如果您的路由器有此问题,报告的“修复”是(至少在 5GHz 上)使用固定信道和/或固定(非动态)信道宽度。
这通常是因为 Avahi 仅使用“环回”网络接口,并且没有从 UxPlay 启动时未侦听的新客户端接收 mDNS 查询。
要检查这一点,启动 uxplay 后,在服务器上的不同终端窗口中使用实用程序avahi-browse -a -t
来验证 UxPlay AirTunes 和 AirPlay 服务是否已正确注册(“Legacy”中仅使用 AirTunes 服务) UxPlay使用的AirPlay Mirror模式,但初次接触时使用AirPlay服务)。
avahi-browse 返回的结果应该显示 uxplay 的条目,例如
+ 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
如果仅显示环回(“lo”)条目,则 UxPlay 主机上的防火墙可能阻止完整的 DNS-SD 服务,并且您需要为 mDNS 请求打开默认 UDP 端口 5353,作为基于环回的 DNS-SD 服务是不可靠的。
如果 avahi-browse 列出了 UxPlay 服务,但客户端看不到,则问题很可能是本地网络问题。
这表明DNS-SD服务正在工作,客户端听到 UxPlay 可用,但 UxPlay 服务器未收到客户端的响应。这通常是因为服务器上的防火墙阻止了来自客户端的连接请求。 (一位坚持认为防火墙已关闭的用户结果有两个活动防火墙( firewalld和ufw )都在服务器上运行!)如果可能,请关闭防火墙以查看是否存在问题,或者获取三个连续的网络端口,从端口 n 开始,所有三个端口都在 1024-65535 范围内,为 tcp 和 udp 打开,并使用“uxplay -pn”(或打开 UDP 7011,6001,6000 TCP 7100,7000,7001 并使用“uxplay -p”)。
如果您确实确定没有防火墙,您可能需要使用 netstat 等工具来调查您的网络传输,但这几乎总是防火墙问题。
如果您看不到消息raop_rtp_mirror starting mirroring
,则在客户服务器谈判完成之前出了问题。对于此类问题,请使用“ Uxplay -D”(调试日志选项)查看正在发生的事情:它将显示连接过程在发生故障之前的距离。您可以将您的调试输出与Uxplay Wiki中Uxplay的成功开始进行比较。
如果Uxplay报告镜像开始了,但是您没有视频或音频,那么问题可能是来自GSTREAMER插件,该插件在您的系统上无效(默认情况下,GSTREAMER使用“ AutovideOsink”和“ AutoVideoSink”和“ AutoAudioSink”算法来猜测什么是在系统上使用的“最佳”插件)。当使用防火墙的用户仅打开两个UDP网络端口:需要三个(第三个接收音频数据)时,没有音频的原因不同。
Raspberry PI设备( PI 4B+和更早:这不适用于PI 5,该PI 5不提供硬件H264解码,并且不需要它)最好使用硬件GPU H264视频解码,如果GSTREAMER v1.20中的Video4linux2插件进行。 X或更早的修补了(有关补丁,请参见Uxplay Wiki)。这是在GSTREAMER-1.22中固定的,并且通过此分布中的Backport补丁(例如Raspberry Pi OS(Bullseye)):使用Raspberry Pi OS的Gstreamer-1.18.4选项-bt709
。这还需要不在标准Linux内核中的BCM2835-CODEC内核模块(可在Raspberry Pi OS,Ubuntu和Manjaro中使用)。
-avdec
用于软件H264删除。有时,“ AutovideOsink”可能会选择OpenGL渲染器“闪光”,该链接可能无法在您的系统上正常工作。尝试“ -vs ximagesink”或“ -vs xvimagesink”选项,以查看使用其中一种是否解决了问题。
其他报告的问题连接到GSTREAMER VAAPI插件(用于硬件加速的Intel图形,而不是NVIDIA图形)。使用选项“ -avdec”来强制软件H264视频解码:这应该防止自动启动选择选择Vaapisink VideoSink。或者,找出是否安装了GSTREAMER1.0-VAAPI插件,如果是的,请卸载它。 (如果这无法解决问题,则可以重新安装它。)
还有一些有关硬件加速Intel HD图形的GSTREAMER问题的报道。一位用户(在Debian上)用“ Sudo Apt intern intel-Media-va-driver-non-Non-frie-fime”解决了这一点。这是第8(或更高版本)的驱动程序“*-Lake” Intel芯片,似乎与Vaapi加速图形有关。
如果您确实具有Intel HD图形,并且已经安装了VAAPI插件,但是-vs vaapisink
不起作用,请检查您的GSTREAMER安装中的Vaapi是否未“黑名单”:Run gst-inspect-1.0 vaapi
,如果此报告0报告0,则报告了0个报告0 features
,,该功能,0.0个功能,,请访问GST-Inspect-1.0 Vaapi。您需要在运行Uxplay之前export GST_VAAPI_ALL_DRIVERS=1
,或在默认环境中设置此。
您可以尝试通过使用“ -as
”或“ -vs
”选项来解决音频或视频问题,以选择GSTREAMINSINK或VIDEOSINK,而不是让Gstreamer为您选择一个。 (有关
或
的选择,请参见上文,在启动和运行Uxplay中。)
在Linux上创建的“ OpenGL渲染器”窗口“ -vs GlimagesInk”有时在单击“关闭”按钮时无法正确关闭。 (这是一个GSTREAMER问题)。您可能需要使用CTRL-C终止Uxplay才能关闭“僵尸” OpenGL窗口。如果客户在发送“停止镜像”信号时发生类似的问题,请尝试将视频窗口打开的无关闭选项“ -NC”。
rm -rf ~/.cache/gstreamer-1.0/*
清除用户的GSTREAMER缓存可能是解决GST-INSPECT-1.0没有显示您相信已安装插件的问题。下次GSTREAMER启动时,缓存将被再生。这是解决困惑问题的解决方案,结果是从缓存的损坏带来的,应首先尝试。如果Uxplay无法启动,则没有找到一条消息,即找不到所需的GSTREAMER插件(例如“ Libav”),请首先与GSTREAMER工具GST-Inspect-1.0检查,以查看GSTREAMER知道的知识。 (您可能需要安装一些其他GSTREAMER“工具”软件包才能获取GST-Inspect-1.0)。例如,例如一个Libav问题,请检查“ gst-inspect-1.0 libav
”。如果未向GSTREAMER显示出来,但是您的软件包管理器显示已安装的相关软件包(如一个用户发现),请尝试完全删除和重新安装软件包。该用户发现,对“未找到的libav”消息的解决方案不断反复出现,这是为了清除用户的GStreams缓存。
如果它未能以“ no element "avdec_aac"
之类的错误开始),那么这是因为即使安装了gstreamer-libav。这是不完整的,因为缺少某些插件功能:“ gst-inspect-1.0 | grep avdec_aac
”将显示AVDEC_AAC是否可用。与其他GSTREAMER插件不同,Libav插件是提供AvDec_*的FFMPEG编解码器的前端。
由于某些插件使用的编解码器,某些发行版(redhat,suse等)提供了FFMPEG的不完整版本。在这种情况下,将有一些“额外的软件包”提供商,例如RPM Fusion(Redhat),Packman(Suse),您可以在其中获取完整的软件包(您的发行版通常会为此提供说明,Mageia将它们放入可选的“污染” repo中) 。所需的软件包可能是“ FFMPEG*”或“ LIBAV*”软件包:GSTREAMER LIBAV插件软件包不包含任何编解码器本身,它只是为GSTREAMER提供了一种使用FFMPEG/LIBAV编解码器库的方法,这些方法必须分别安装。出于类似的原因,分布可能会运送GSTREAMER“插件 - 巴德”的不完整软件包。在Fedora上使用用户认为他们已经从rpmfusion中安装了,但是该系统尚未遵守: “在重新启动后将其添加到DNF命令中修复了它” 。
从发布UxPlay-1.65.3开始,Uxplay将继续运行,但是如果丢失了AVDEC_AAC,则不在镜像模式下。
要解决Gstreamer的故障排除,请执行“导出GST_DEBUG = 2”,以在将运行UxPlay的终端中设置gstreamer debug级环境变量,以便您看到警告和错误消息;请参阅GSTREAMER调试工具,以了解如何查看GSTREAMER内部发生的更多事情。运行“ GST-Inspect-1.0”,以查看系统上安装了哪些GSTREAMER插件。
可能需要安装一些用于特殊插件的额外的GSTREAMER软件包(或重新安装:使用Wayland显示系统的用户作为X11的替代方案报告,在重新安装Lubuntu 18.4之后,Uxplay在安装GSTREAMER1.0-X之前,Uxplay将无法正常工作Wayland的X11兼容模式)。不同的分布可能会以不同的方式将GSTREAMER 1.X分解为包装;构建说明中上面列出的软件包应将其他必需的GSTREAMER软件包作为依赖项,但不会安装所有可能的插件。
GSTREAMER视频管道( uxplay -d
的初始输出)显示为默认表单
appsrc name=video_source ! queue ! h264parse ! decodebin ! videoconvert ! autovideosink name=video_sink sync=false
管道是完全可配置的:默认元素“ H264Parse”,“ DecoDebin”,“ videoconvert”和“ autovideOsink”可以通过使用Uxplay选项-vp
, -vd
, -vc
和-vs
分别替换要修改它(可以用引号“ ...”给出条目以包含选项)。
如果客户端的TCP视频流停止到达服务器,可能会发生这种情况,这可能是由于网络问题(UDP音频流可能继续到达)。在三秒钟的间隔中,Uxplay通过向NTP时间信号的请求发送请求来检查客户端是否仍在连接。如果未在0.3秒的时间窗口内收到客户的答复,则注册了“ NTP超时”。如果连续NTP超时的某个数字(当前5)发生,则UXPlay假定客户端已“已死”并重置连接,可用于连接到新客户端,或重新连接到上一个。有时,连接可能在达到超时限制之前恢复,如果默认限制不适合您的网络,则可以使用选项“ -reset n ”对其进行修改,其中n是所需的超时限制值( n = 0)意思是“无限制”)。如果连接在NTP超时之后开始恢复,则超时之前的损坏视频数据包可能会触发“连接重置对等”错误,这也会导致Uxplay重置连接。
协议故障可能会触发无效的错误消息流,这意味着音频解密密钥(也用于视频解密中)未从客户端发送的数据中正确提取。
在发现客户服务器“配对”步骤之后,该协议通过禁用“支持传统配对”(位27),可以避免使用客户服务器“配对”步骤(无需5秒的延迟)(位27),在Uxplay-1.65中修改了该协议。在“功能”代码中,uxplay在DNS-SD服务发现上进行了广告宣传。然后,大多数客户端将在配对时不会尝试设置“共享秘密密钥”,AppleTV使用该设置用于同时处理多个客户端(UXPlay一次仅支持一个客户端)。现在,此更改已经进行了充分的测试,但是如果它导致任何协议失败,则可以通过在lib/dnssdint.h中删除先前的“ features_1”设置(并注释新的),然后将Uxplay恢复为先前的行为,然后重建Uxplay。 (当新的Apple风格的一次性“ PIN”身份验证通过使用Uxplay 1.67中引入的“ -pin”选项激活Uxplay时,“配对”将重新启用。)
iOS 9.3或以后的客户不应发生协议故障。但是,如果客户端使用基于Windows的AirPlay客户端模拟器AirMyPC使用的协议的较旧版本,则可以通过设置UxPlay/lib/global.h
的设置OLD_PROTOCOL_CLIENT_USER_AGENT_LIST
将协议切换为旧版本。 UXPlay连接时客户端的“用户代理”字符串。如果某些其他客户端也未能解密所有音频和视频,请尝试在Global.H中的条目“ AirMyPC/2.0; XXX”中添加其“用户代理”字符串,并在Global.H中添加“ XXX”并重建Uxplay。
请注意,对于DNS-SD服务发现,UXPlay声明自己为带有源代码220.68的AppLetv3,2(32位设备);这也可以在global.h中更改。如果Uxplay将自己声明为AppLetV6,2,则可以使用sourceVersion 380.20.1(AppleTV 4K 1st Gen,推出了2017年,运行TVOS 12.2.1),因此似乎无关紧要的Uxplay声称是什么版本。
1.70 2024-10-04添加对4K(H265)视频的支持(分辨率3840 x 2160)。修复GSTREAMER> = 1.24的问题时,当客户入睡时,然后醒来。
1.69 2024-08-09内部改进(例如,在不持有选项中,识别AutovideOsink选择的GSTREAMINK videosink,Finding X11 Display),以期待未来的HLS视频支持。当网络连接重置时,新的-Nofreeze选项不将冷冻视频留在适当的位置。修复Gstreamer-1.24.x更改。
1.68 2023-12-31从服务器MAC地址生成持续的公钥的新简单(默认)方法(现在可以使用-M选项设置该密钥)。 (以前的方法仍然可以使用-Key选项)。新选项 - 维护PIN批准客户的寄存器。校正的体积控制:现在解释AirPlay量范围-30dB:0dB为Decibel增益衰减,新的选项为-db low [:High],用于“ DB范围的“平坦”重新续订。为“锥形”播放音量控制配置文件添加 - 尾部选项。
1.67 2023-11-30增加了对苹果风格的一次性PIN验证的支持,该客户端具有选项“ -pin” :(使用SRP6A身份验证协议和公共密钥持久性)。在要求高分辨率通过有线以太网的高分辨率时,带有(当前)不支持H265视频的错误消息的检测。删除了RPI*选项(与新的Raspberry Pi Model 5无效,可以用其他选项的组合代替)。添加了可选的参数“ Mac”到“ -m”选项,以指定替换MAC地址/设备ID。将llhttp更新为v。9.1.3。添加-DACP选项用于导出当前客户端DACP信息(用于遥控器)。
1.66 2023-09-05修复IPv6支持。将选项添加到将客户端限制到允许的设备ID列表中的客户,或在阻止的设备ID列表中阻止客户端的连接。修复了@Thiccaxe的#207(客户从睡眠中醒来后的Vsync模式屏幕滞后)。
1.65.3 2023-07-23添加RPM规格文件;如果需要,请添加警告,如果需要GSTREAMER LIBAV功能“ AVDEC_AAC”:(这发生在基于RPM的发行版中,出于专利或许可原因将不完整的FFMPEG发货,并依靠安装外部供应的完整FFMPEG的用户)。如果缺少AVDEC_AAC,Mirror-Mode Airplay现在将无需音频工作。
1.65 2023-06-03消除连接协议的PAIR_SETUP一部分,以更快地与客户端连接(感谢@shuax#176以进行此发现);要恢复,请在lib/dnssdint.h中删除一条线。连接关闭时,请与音频设备断开连接,以在Uxplay正在运行但未连接的情况下阻止其他应用程序的使用。修复了AirMyPC客户端(自1.60以来打破),因此其较旧的非NTP时间戳协议可与-VSync一起使用。校正了引号中的配置文件条目的解析。
1.64 2023-04-23基于音频和视频的基于时间戳的同步现在是镜像模式下的默认值。 (使用“ -vsync no”来还原以前的行为。)现在可以将配置文件用于启动选项。还有一些内部清理和修复#192的次要错误即可。
1.63 2023-02-12重新设计的Audio-Video同步,具有新的选项-VSync(用于镜像模式)和-Async(用于音频模式,以与客户端视频同步)。选项-VSync使软件H264在最近的一些Raspberry Pi模型上使用选项-Avdec的流视频解码。内部变化:始终以纳秒单元进行处理。删除了1.62中引入的-AO选项。
1.62 2023-01-18添加了只有音频模式的时间偏移-AO X,以允许用户在服务器上使用视频,歌曲歌词等在服务器上播放的Alac音频同步。在客户端上播放。 X = 5.0在许多情况下似乎是最佳的。质量修复:清理音量更改,时间戳,一些错误。
1.61 2022-12-30删除-T选项(用于AVAHI问题的解决方法,通过在防火墙中打开网络端口UDP 5353来正确解决)。从cmake_cflags中删除-G调试标志。推迟(而不是预先准备)构建环境CFLAGS至CMAKE_CFLAGS。 uxplay.cpp的重构部分
1.60 2022-12-15如果DNSServicereGister失败(而不是停滞),则添加了带有错误消息的出口。测试客户使用不支持的AirPlay 2“遥控”协议(没有正时通道)的尝试,如果发生这种情况,请退出。经过重新设计的元数据处理以正确解析DMAP标头(以前的版本使用当前收到的DMAP消息,但不正确)。
1.59 2022-12-12删除“ ZoomFix”编译选项,并使用X11依赖性进行编译,如果检测到X11开发库(现在,现在还提供了带有F11或Alt+Enter+Enter键键切换的完整屏幕模式);现在,Zoomfix自动用于GSTREAMER <1.20。新的CMAKE选项-DNO_X11_DEPS编译无X11依赖性的Uxplay。重新设计的内部元数据处理。用“ -vs 0”修复segfault。
1.58 2022-10-29添加选项“ -nohold”,该选项将在新客户端连接时丢弃现有连接。将llhttp更新为v8.1.0。
1.57 2022-10-09次要修复程序:(用Aur cflags-dfortify_source汇编时,请在“停止镜像”上的AUR上修复Coredump);缺少需要的插件时优雅的出口;改善了对Windows构建的支持。在Gstreamer Audio Pipeline中包括AudiorSample。
1.56 2022-09-01在Windows上添加了对构建和运行Uxplay-1.56的支持(没有更改UNIX(Linux, *BSD,MacOS)代码库。)。
1.56 2022-07-30现在已固定从-rpi,-rpiwl,-rpifb删除-bt709。
1.55 2022-07-04从-V4L2删除BT709修复程序,然后创建一个新的-bt709选项(以前的“ -v4l2”现在是“ -v4l2 -bt709”)。这允许当前需要的-bt709选项可以在没有-V4L2的情况下自行使用(有时这给出更好的结果)。
1.54 2022-06-25在仅(ALAC)模式下增加对“封面艺术”显示的支持。恢复了导致VAAPI使用AMD Polaris图形卡崩溃的变化。 PLIST代码和UXPlay选项解析的较小内部更改。
1.53 2022-06-13内部更改音频同步代码,修订文档,较小的错误文件(修复断言崩溃时,RENCENT AUDIO数据包为空时)。
1.52 2022-05-05清理了初始音频同步代码,并重新格式化的流式调试输出(可读的时间戳可在几秒钟内具有十进制点)。消除内存泄漏(Valgrind发现)。支持显示Uxplay终端中显示ALAC(仅音频)元数据(配乐艺术家名称,标题等)。
1.51 2022-04-24返工的选项forvideo4linux2支持(新选项-V4L2)和短选项-RPI,-RPIFB,-RPIWL作为-V4L2,-V4L2,-V4L2 -VS -VS KMSSINK和-V4L2 -VS -VS -VS WAYLANDSINK的同义词。恢复了从客户发送“停止镜像”后打破重新连接的1.48的更改。
1.50 2022-04-22添加了-fs全屏选项(仅适用于Wayland或Vaapi插件),更改为framebuffer(“ Lite”)RPI Systems和添加-rpigl(openGL)和-rpiwl(Wayland)RPI的RPI(Wayland)选项桌面系统。还将时间戳从“ DTS”改为“ PTS”,以改善延迟,并进行内部清理。
1.49 2022-03-28用于倾倒视频和/或音频的添加选项,用于调试等。H264pps/pps/sps nalu的nalu显示了-d。修复了针对M1 Mac客户端的视频 - 不工作。
1.48 2022-03-11使GSTREAMER视频管道完全配置,可与硬件H264解码一起使用。支持Raspberry Pi。
1.47 2022-02-05添加了-FPSDATA选项,以显示(在终端)的常规报告中有关视频流性能的常规报告。从客户端收到的视频数据包处理的内部清理。添加-Reset n选项以在N NTP超时后重置连接(在视频流中的“连接重置”错误之后也重置)。
1.46 2022-01-20还原前1.44行为(1.44可能损坏了硬件加速度):在视频管道中再次使用Decodebin;如果需要,请介绍新的选项“ -avdec”,以强制Libav H264解码的软件H264(以防止AutovideOsink选择Vaapisink)。将llhttp更新为v6.0.6。 UXPlay现在将自己报告为AppLetv3,2。一次将连接到一个客户端(第二个客户现在必须等待第一个客户端断开连接)。
1.45 2022-01-10新行为:客户请求“停止镜像”时关闭视频窗口。 (为希望保留不关闭视频窗口的以前行为的用户添加了一个新的“无关闭”选项“ -NC”)。
1.44 2021-12-13省略了AirMyPC客户端的ECDH_SECRET的Aeskey Hash;内部重新排列此哈希的位置。在-D调试模式下完全报告客户端和服务器之间的所有初始通信。用H264特异性元素替换Gstreamer视频管道中的DecoDebin。
1.43 2021-12-07各种内部更改,例如成功解密的测试,信息/调试消息的统一处理等更新的读数。
1.42 2021-11-20修复了MAC检测,可与现代Linux接口命名实践,MACOS和 *BSD一起使用。
1.41 2021-11-11进一步清理多个音频格式支持(内部更改,分离的RAOP和GSTREAMER音频/视频启动)
1.40 2021-11-09在ALAC支持,Manpage位置修复中清理Segfault,在调试模式下显示请求Plist。
1.39 2021-11-06增加了对Apple Lossless(ALAC)音频流的支持。
1.38 2021-10-8 add-as audiosink选项允许用户选择GSTREAMER AUDIOSINK。
1.37 2021-09-29将“ @hostname”附加到AirPlay服务器名称,其中“主机名”是运行UxPlay的服务器的名称(重新设计为1.36)。
1.36 2021-09-29实施了建议(@mrbesen和@petrusz),将机器运行UxPlay的主机名用作默认服务器名称
1.35.1 2021-09-28添加了-vs 0选项用于流音频,但不显示视频。
1.35 2021-09-10现在使用glib mainloop,并在MacOS上建立(在Intel Mac上测试,10.15)。新的选项-T重新启动服务器的超时如果在上一秒钟内没有连接活动(以更新Bonjour注册)。
1.341 2021-09-04修复:渲染记录器没有被stop_server()销毁
1.34 2021-08-27修复了“ ZoomFix”:仅在uxplay创建GStreamer窗口时,X11窗口名称修复程序才能进行,而不是在关闭Gstreamer窗口后重新启动服务器,而Uxplay仍在运行。在第1.34节中纠正
如果需要这样做,请注意,您可以使用较新的版本(已知openssl-3.0.1可以使用)。您将需要标准开发工具集(AutoConf,Automake,Libtool)。从https://www.openssl.org/source/下载源代码。通过打开下载目录中的终端来安装下载的OpenSSL,并解开源分布的包装:(“ tar -xvzf openssl-3.0.1.tar.gz; cd openssl-3.0.1”)。然后使用“ ./config; make; sudo make install_dev”构建/安装。这通常会安装所需的库libcrypto.*
(忽略MacOS上构建的以下内容:)在Debian或Ubuntu等某些系统上,您可能还需要在/etc/ld.so.conf中添加丢失的条目/usr/local/lib64
(或放置包含的文件“/ usr/local/lib64/libcrypto.so“ in /etc/ld.so.conf.d),然后运行“ sudo ldconfig”。
(注意:在Debian 9“ Stretch”或Ubuntu 16.04 LTS版本上,您可以通过在Debian 10或Ubuntu 18.04中安装Libplist-Dev和Libplist3避免此步骤。您可能还需要安装一些Libpython*-DEV软件包。从https://github.com/libimobiledevice/libplist下载最新源,或从释放部分获取源(使用 *.tar.bz2版本,而不是*.zip或 *.zip或 *.tar.gz版本) :下载libplist-2.3.0,然后解开包装(“ tar -xvjf libplist-2.3.0.tar.bz2; cd libplist-2.3.0”),然后构建/安装:{./ configure; make; sudo; sudo; sudo; sudo; sudo; sudo; sudo; sudo;进行安装”)。这可能会安装libplist-2.0。* in/usr/local/lib。新的libplist-2.3.0版本应与Uxplay兼容;如果有任何问题,也可以使用libplist-2.2.0。
(忽略MacOS上构建的以下内容:)在某些系统上,例如Debian或Ubuntu,您可能还需要在/etc/ld.so.conf中添加丢失的条目/usr/local/lib
(或放置一个包含“// usr/local/lib/libplist-2.0.so“ in /etc/ld.so.conf.d),然后运行“ sudo ldconfig”。
该存储库中的所有资源均仅使用Internet免费提供的信息编写。代码和相关资源仅用于教育目的。用户有责任确保遵守所有地方法律。
该项目利用第三方GPL库来处理Fairplay。该图书馆的法律地位尚不清楚。如果您是Apple的代表,并且对图书馆合法性及其在该项目中的使用有任何异议,请与开发人员联系,并将采取适当的步骤。
鉴于可供购买的大量第三方Airplay接收器(主要是封闭消息),因此我们了解,同一功能的开源实施也不会侵犯任何苹果的权利。
[改编自FDRASCHBACHER关于RPIPLAY先例的注释]
随着时间的推移,该存储库中的代码从各种来源积累。这是列出各种作者及其创建的组件的尝试:
Uxplay最初是由Rpiplay的Antimof创建的,它通过使用桌面Linux Systems的Gstreamer渲染器代替了其Raspberry-Pi-Pi-Pi-Pi-Pi-Pi-ap-podaper openmax视频和音频渲染系统; Antimof在renderers/
后来被退回到RPiplay,Antimof项目处于休眠状态,但后来在当前的GitHub站点进行了复兴,以服务于更广泛的用户社区。
从rpiplay继承中包含的Uxplay中包含的代码的先前作者包括:
lib/playfair
文件夹中。许可证: GNU GPLlib/
最初的大多数代码源于该项目。许可证:GNU LGPLV2.1+lib/
都是DSAFA22的工作。许可证:GNU LGPLV2.1+独立于uxplay,但被它使用并与之捆绑在一起:
lib/llhttp/
。许可证:麻省理工学院