注: 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 用に 3 つの UDP ポートと 3 つの 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 Pipewiresink」または「vs waylandsink」をデフォルトとしてファイルに追加することができます。 (Linux/BSD システムが使用している場合、ターミナル コマンド「ps waux | greppulse」または「pactl info」からの出力には「pipewire」が含まれます)。
Raspberry Pi の場合: Ubuntu 22.10 以前を使用している場合、Broadcom GPU によるハードウェア ビデオ デコードを使用するには、GStreamer にパッチを適用する必要があります (これも推奨ですが、Raspberry Pi OS (Bullseye) の場合はオプションです。使用しない場合は、オプション「 uxplay -bt709
」を使用してください)パッチ)。
最新の UxPlay をソースから (簡単に) コンパイルするには、「UxPlay の入手」セクションを参照してください。
このプロジェクトは、Linux、macOS、および *BSD 用の GPLv3 オープン ソース unix AirPlay2 ミラー サーバーです。これは当初、OpenMAX ベースの RPiPlay のコードを使用して antimof によって開発されました。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、および 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 です。
その主な用途は、Linux、macOS、またはその他の Unix を実行しているホストのサーバー ディスプレイ上で iOS/iPadOS/macOS クライアント (iPhone、iPod Touch、iPad、Mac コンピュータ) の画面を (オーディオ付きで) ミラーリングするために AppleTV のように動作することです。 (そして今では 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-daemon サービスを通じて Avahi によって提供され、ほとんどの Linux ディストリビューションに含まれています (このサービスは macOS、iOS、または Windows サーバーでも提供できます)。
iOS/MacOS クライアントによる UxPlay サーバーへの接続は、 AirPlay ミラーモード (クライアント画面をミラーリングしながら非可逆圧縮 AAC オーディオをストリーミングする) と、代替のAirPlay オーディオモード (画面ミラーリングなしで Apple Lossless (ALAC) オーディオをストリーミングする) の両方で開始できます。オーディオモードでは、メタデータが uxplay ターミナルに表示されます。UxPlay オプション-ca
が使用されている場合、付随するカバー アートも定期的に更新されるファイル
に出力され、(リロード) で表示できます。アクティブな接続中にミラー モードとオーディオモードを切り替えることができます。ミラーモードでは、ミラーリングを停止して (またはミラー ウィンドウを閉じて)、オーディオモード接続を開始し、ミラーモード接続を開始して元に戻します。オーディオモードを終了または再度開始すると、アート表示が停止または再開します。
Apple video-DRM (クライアント上の「Apple TV アプリ」コンテンツにある) は UxPlay では復号化できず、Apple TV アプリは UxPlay の AirPlay ミラー モードを使用して視聴できないことに注意してください (保護されていないオーディオのみが AAC でストリーミングされます)形式)ですが、「YouTube アプリ」などの DRM フリー アプリからのビデオとオーディオ コンテンツは両方とも、ミラー モードの UxPlay によってストリーミングされます。
UxPlay は現在、非ミラー AirPlay ビデオ ストリーミング (クライアントによるデコードと再エンコードを避けるために、HLS コンテンツを直接受信する AirPlay サーバー上の Web サーバーをクライアントが制御する) をサポートしていないため、AirPlay ビデオのアイコンを使用します。 YouTube アプリなどのアプリは、ビデオを伴わずに音声 (ロスレス ALAC 形式) のみを送信します (UxPlay の将来のリリースでは HLS ビデオをサポートする予定です)。
UxPlay は、オーディオとビデオのレンダリングに GStreamer の「プラグイン」を使用します。これは、プラグインを選択することで、ビデオとオーディオが「すぐに使用できる」ことを意味します。 AirPlay はビデオを h264 形式でストリーミングします。gstreamer デコードはプラグインに依存せず、利用可能な場合は高速化された GPU ハードウェア h264 デコーダを使用します。そうでない場合は、ソフトウェア デコードが使用されます。
Intel および AMD 統合グラフィックス用の VAAPI、NVIDIA と「Nouveau」オープンソース ドライバー
Intel または AMD GPU を使用する場合は、オープンソース VAAPI gstreamer プラグインを使用したハードウェア デコードが推奨されます。 NVIDIA グラフィックス用のオープンソースの「Nouveau」ドライバーも原則としてサポートされています。ここを参照してください。ただし、これには、独自の NVIDIA ドライバーから抽出されたファームウェアで VAAPI を補完する必要があります。
NVIDIA と独自のドライバー
nvh264dec
プラグイン (GStreamer-1.18.0 以降、gstreamer1.0-plugins-bad に含まれています) は、NVIDIA の CUDA ドライバーlibcuda.so
がインストールされた後、NVIDIA GPU でのビデオ デコードの高速化に使用できます。 GStreamer-1.16.3 以前の場合、プラグインはnvdec
と呼ばれ、ユーザーがビルドする必要があります。
Raspberry Pi (Pi 4B 以降) での h264 ハードウェア デコードに対する Video4Linux2 のサポート
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 で利用可能な他の 2 つのディストリビューション (Ubuntu、Manjaro) にのみ含まれています。 (GStreamer < 1.22 については、UxPlay Wiki を参照してください) 。
(新): Raspberry Pi (Pi 4 モデル B および Pi 5) での h265 (HEVC) ハードウェア デコードのサポート
サポートはありますが、これまでのところ満足のいく結果は得られていません。 Pi モデル 5 は、H265 ビデオのハードウェア アクセラレーション (GPU) デコーディングのみを提供しますが、H264 は提供しません。これは、その CPU が満足のいくソフトウェア H264 デコーディングを行うのに十分強力であるためです。
UxPlay の GPLv3 ライセンスには、v. 3.0.0 より前のバージョンの OpenSSL にリンクされた場合に、コンパイルされた形式で配布することを明示的に許可する「GPL 例外」が追加されていません (OpenSSL の古いバージョンには、OpenSSL が許可されない限り、GPL と互換性のないライセンス条項があります) *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" が必要です。) そうでない場合は、ビルドしてインストールする必要がある場合があります。これらはソースからのものです (この README の最後にある手順を参照してください)。
非標準の 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
") で設定します。
ターミナル ウィンドウで、ダウンロードしたソース コードのソース ディレクトリ (zip ファイル ダウンロードの場合は「UxPlay-*」、「*」 = "master"、またはリリース タグ、「git clone」ダウンロードの場合は「UxPlay」) にディレクトリを変更します。以下の指示に従ってください。
注:デフォルトでは、UxPlay はビルドされるコンピューターに合わせて最適化されてビルドされます。これに当てはまらない場合 (ディストリビューション用にパッケージ化する場合など)、cmake オプション-DNO_MARCH_NATIVE=ON
を使用します。
Linux または *BSD 上で X11 Windows を使用し、キーを押す (F11 または Alt_L+Enter) でフルスクリーン モードのオン/オフを切り替えたい場合は、UxPlay を X11 に依存して構築する必要があります。 UxPlay-1.59 以降、X11 開発ライブラリがインストールされ、検出された場合、これはデフォルトで行われます。これらを「 sudo apt install libx11-dev
」でインストールします。 GStreamer < 1.20 が検出された場合、画面共有アプリ (Zoomなど) に必要な修正も行われます。
-DNO_X11_DEPS=ON
を使用します。sudo apt install libssl-dev libplist-dev
". ( OpenSSL と libplist をソースからビルドする必要がある場合を除く)。sudo apt install libavahi-compat-libdnssd-dev
sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
。 (*ソースから Gstreamer をビルドした場合はスキップしてください)cmake .
(ソースを変更する場合に便利な、よりクリーンなビルドの場合は、これを「 mkdir build; cd build; cmake ..
」に置き換えます。その後、ソースに影響を与えることなく、必要に応じてbuild
ディレクトリの内容を削除できます。 )必要に応じて、ここに cmake " -D
" オプションを追加します (例: -DNO_X11_DEPS=ON
または-DNO_MARCH_NATIVE=ON
)。make
sudo make install
(これを実行したのと同じディレクトリで、後でsudo make uninstall
を使用してアンインストールできます)。これにより、実行可能ファイル「 uxplay
」が/usr/local/bin
にインストールされます (また、マンページが/usr/local/share/man/man1
などの標準的な場所にインストールされ、README ファイルが/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 (フルスクリーン X11 の場合は +libX11-devel) (これらの一部は、クローンによって「PowerTools」と呼ばれる「CodeReady」アドオン リポジトリにある可能性があります)
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。 dns_sd ライブラリを提供するには、avahi-libdns または mDNSResponder もインストールする必要があります。 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 」も含まれます (これは、多くのシステム (Raspberry Pi を含む) で非常に役立つ「-vs glimagesink」ビデオシンクを提供します) )、NVIDIA GPU による h264/h265 デコードを使用する場合は常に使用する必要があります)、「 gtk3 」(「-vs gtksink」ビデオシンクを提供します)、および X11 サポート用の「 x 」(これらはすでにインストールされている可能性があります)。 「 vaapi 」は、Intel または AMD グラフィックスによるハードウェア アクセラレーションによる h264 ビデオ デコードに必要です (ただし、独自のドライバーを使用する 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
。形式は 1 行に 1 つのオプションであり、コマンドライン オプションの最初の"-"
が省略されます。設定ファイル内の"#"
で始まる行はコメントとして扱われ、無視されます。
ターミナル ウィンドウで 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
(*BSD などの非 systemd システムでは、 sudo service avahi-daemon [status, start, stop, restart, ...]
使用して制御します。 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 認証を使用する必要があります。UxPlay は、PIN オプションなしで実行している場合でも、PIN 認証を提供します。
デフォルトでは、UxPlay は、クライアントが接続を切断するまで、現在のクライアントにロックされます。 UxPlay-1.58 以降、オプション-nohold
によってこの動作が変更され、新しいクライアントが接続を要求すると、現在のクライアントが削除されて引き継がれるようになりました。 UxPlay 1.66 では、「deviceID」 (Apple デバイスでは不変であるように見えます) を使用して、どのクライアントが接続を許可されるかを制御するメカニズム ( -restrict
、 -allow
、 -block
) が導入されています。
ミラー モードでは、GStreamer はオーディオを伴うビデオを再生するための2 つの方法から選択できます。UxPlay-1.64 より前では、ビデオ ストリームとオーディオ ストリームは両方とも到着後できるだけ早く再生されました (GStreamer の「 sync=false 」メソッド)。 、GStreamer の内部クロックを使用して同期を維持しようとします。 UxPlay-1.64 以降、クライアントによって送信されるオーディオおよびビデオ ストリームのタイムスタンプを使用する他の方法 (GStreamer の「 sync=true 」モード) が新しいデフォルトになりました。デコード能力の低い UxPlay ホスト (Raspberry Pi Zero W または 3 B+ モデルなど) では、オーディオとの再生に間に合うようにデコードできないビデオ フレームがドロップされ、ビデオがぎくしゃくしますが、それでも同期されます。
遅いビデオ フレームをドロップしない古い方法は、より強力なシステムでうまく機能し、UxPlay オプション「 -vsync no
」で引き続き使用できます。この方法は「ライブ ストリーミング」に適応されており、たとえば Mac コンピュータの 2 番目のモニターとして UxPlay を使用する場合に適しています。一方、新しいデフォルトのタイムスタンプ ベースの方法は、唇の動きや声を維持するためにビデオを視聴する場合に最適です。同期されました。 (タイムスタンプを使用しないと、十分な速度でデコードできない場合、ビデオは最終的にオーディオよりも遅れてしまいます。タイムスタンプが使用されていない以前は、ハードウェア アクセラレーションによるビデオ デコードがこの問題を防ぐのに役立ちました。)
-async
timestamp- を使用します。ベースのオプション。 (例としては、UxPlay サーバーで優れたサウンドを聴きながら、クライアントで Apple Music の歌詞をたどりたい場合などが考えられます)。これにより、サーバー上のオーディオに合わせてクライアント上のビデオが遅延するため、クライアントで開始された一時停止またはトラック変更がサーバーによって再生されるオーディオに反映されるまでにわずかな遅延が発生します。 AirPlay ボリューム コントロールは、ボリューム (ゲイン) を最大 -30dB 減衰します。デシベル範囲 -30:0 は、オプション-db
(「-db Low 」または「-db」を使用して、 Low :0 またはLow : Highから再スケールできます) Low : High ")、 Low は負の値でなければなりません。リスケーリングはデシベル単位で線形です。 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 を終了してから、「 ctrl-C fg ctrl-C
」で Uxplay を終了します。
デフォルトでは、GStreamer はアルゴリズムを使用して、使用する最適な「ビデオシンク」(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
。
よくある問題の 1 つは、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 ビット OS を実行している Raspberry Pi 3 Model B+ は、GStreamer OMX プラグイン (オプション「 -vd omxh264dec
」を使用) を使用して GPU にアクセスすることもできますが、これは Pi 4 Model B ファームウェアによって壊れます。 OMX サポートは Raspberry Pi OS (Bullseye) から削除されましたが、Buster には存在します。
H265 (4K)ビデオは、Raspberry Pi 5 モデルおよび Raspberry Pi 4 モデル B の Broadcom GPU によるハードウェア デコードでサポートされています。GStreamer はこのハードウェア デコードを利用しているようですが、UxPlay による 4K ビデオのレンダリング速度は満足のいくものです。これらの Raspberry Pi モデルはまだ実現されていません。 h265 サポートを有効にするには、オプション「-h265」が必要です。このモードでは有線イーサネット接続が推奨されます (クライアントによって要求される場合もあります)。
GPU ビデオ デコードを使用する場合でも、タイムスタンプを使用してオーディオとビデオの同期を維持するために、低電力モデルでは一部のフレームがドロップされる場合があります。レガシー Raspberry Pi OS (Bullseye) では、raspi-config の「パフォーマンス オプション」で GPU に割り当てるメモリ量を指定できますが、この設定は Bookworm にはないようです (ただし、行を追加することで、たとえば 128MB に設定することはできます) /boot/config.txt の「gpu_mem=128」)。 Pi Zero 2 W (512MB メモリを搭載) は、GPU に 128MB を割り当てた 32 ビット Bullseye または Bookworm Lite でテストした場合、うまく動作しました (デフォルトは 64MB のようです)。
R Pi の基本的な uxplay オプションはuxplay [-vs
です。
= glimagesink
という選択が役立つ場合があります。 Wayland ビデオ コンポジターでは、
= waylandsink
を使用します。フレームバッファビデオの場合は、
= kmssink
を使用します。
ssh user@remote_host
export DISPLAY=:0
nohup uxplay [options] > FILE &
サウンドとビデオはリモート ホストで再生されます。 「nohup」は、ssh セッションが閉じられた場合でも uxplay を実行し続けます。ターミナル出力は FILE に保存されます (ファイルを破棄するには /dev/null にすることもできます)
注:ネイティブAirPlayサーバー機能はMacOS 12 Montereyに含まれていますが、最近のハードウェアに制限されています。 Uxplayは、モントレーを実行できない古いMacOSシステムで実行するか、モントレーを実行できますが、AirPlayを実行できません。
MACOのこれらの指示は、Xcodeコマンドライン開発者ツールがインストールされていると想定しています(Xcodeがインストールされている場合、端子を開き、「sudo xcode-select - install」と入力し、条件を受け入れます)。
また、Cmake> = 3.13がインストールされていると想定されています。これは、パッケージマネージャーMacports( sudo port install cmake
)、HomeBrew( brew install cmake
)、またはhttps://cmake.org/download/からのダウンロードで行うことができます。また、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など)をインストールする必要があります。
次に、GSTREAMER-1.0の最新のMacOSリリースを取得します。
「公式」GSTREAMER(MacPortsとHomeBrewユーザーの両方に推奨)の使用:https://gstreamer.freedesktop.org/download/からMacOSのGSTREAMERリリースをインストールします。 (このリリースには独自のPKG-Configが含まれているため、インストールする必要はありません。)GSTREAMER-1.0とGSTREAMER-1.0-DEVELパッケージの両方をインストールします。ダウンロードした後、それらをシフトクリックしてインストールします(/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/*
インストールします。余分な非ホメブリュープラグイン(自分で構築する)を入れないでください。代わりにGST_PLUGIN_PATHを設定してその場所を指します(HomeBrewは完全なGSTREAMERを提供しませんが、UXPlayに必要なものはすべて揃っているようです)。
MacPortsからインストールされたGSTREAMERの使用:MacPorts GSTREAMERは古い(v1.16.2)、維持されておらず、X11を使用するように構築されているため、これは推奨されません。
(MacPorts GSTREAMER-16.2を本当に使用したい場合は、PKGCONF( "SudoポートインストールPKGCONF")をインストールし、「SudoポートインストールGSTREAMER1-GST-PLUGINS-BASE GSTREAMER1-GST-PLUGINS-GOOD GSTREAMER1-GST-PLUGINS -bad gstreamer1-gst-libav "。マコーでのx11サポートの場合、特別なcmakeオプション-DUSE_X11=ON
を使用してuxplayをコンパイルし、-vs ximagesinkを使用したxquartz端子から実行する必要があります。 X11: uxplay -s 800x600
。)
GSTREAMERをインストールした後、UXPLAYをビルドしてインストールした後:端末を開き、UXPlayソースディレクトリ(Zipfileダウンロード用の "UXPlay-Master")、「git clone」ダウンロードの「uxplay」)、「cmake。; make。; make。 sudo make install "(Linuxと同じ)。
GSTREAMERの警告をチェックしながらUXPlayを実行します(runnng Uxplayの前に「gst_debug = 2」で「Export gst_debug = 2」でこれを行います)は、ビデオ同期のためにタイムスタンプをデフォルトで使用すると、多くのビデオフレームが(macosのみ)削除されていることを明らかにしています。おそらく、GSTREAMERの警告に表示される別のエラー(Videometaについて)のためです。推奨事項:新しいuxplay "no timestamp" option " -vsync no
"を使用します(uxplayrc構成ファイルに「vsync no」を追加できます)。
GSTREAMERのこのインストールを使用したMACOSでは、利用可能な唯一のビデオシンクはGlimagesInk(AutoVideosinkによって作成されたデフォルトの選択)とOsxVideosinkのようです。ウィンドウのタイトルにはAirPlay Server名が表示されませんが、ウィンドウは画面共有アプリ(Zoomなど)に表示されます。利用可能な唯一のAudiosinkは、osxaudiosinkのようです。
選択されているかどうかにかかわらず、オプション-NCが常に使用されます。これは、MACOSのGSTREAMER VideoSinksの問題の回避策です。GSTREAMERパイプラインが破壊されている場合、ミラーウィンドウがまだ開いている場合、SEGFAULTが発生します。
GlimagesInkの場合、解像度設定「-S WXH」は(小さな)初期OpenGLミラーウィンドウのサイズに影響しませんが、マウスまたはトラックパッドを使用してウィンドウを展開できます。対照的に、「-vs osxvideosink」で作成されたウィンドウは最初は大きくなりますが、間違ったアスペクト比(伸縮画像)があります。この場合、側面をドラッグすることでウィンドウの幅が変更されると、アスペクト比は変化します。 option -vs "osxvideosink force-aspect-ratio=true"
を使用して、最初に開いたときにウィンドウを正しいアスペクト比にすることができます。
Windows V3.0用のBonjour SDKをダウンロードしてインストールします。 Softpedia.comで登録せずにSDKをダウンロードするか、公式のAppleサイトhttps://developer.apple.com/downloadから入手できます(Appleは開発者として登録してサイトからアクセスします)。これにより、Bonjour SDKがC:Program FilesBonjour SDK
としてインストールされます。
(これは64ビットウィンドウ用です。32ビットウィンドウ用のビルドは可能ですが、テストされていません。)UNIXのようなMSYS2ビルド環境が使用されます。公式サイトからMSYS2をダウンロードしてインストールする.msys2.org/。デフォルトのインストール場所C:mysys64
を受け入れます。
MSYS2パッケージは、Arch Linuxが使用する「Pacman」パッケージマネージャーのバリアントでインストールされます。 Windowsスタートメニューの[MSYS2 MINGW64]端子を[MSYS2]タブから開き、「Pacman -Syu」で新しいMSYS2インストールを更新します。次に、 MINGW-64コンパイラとCmakeをインストールします
pacman -S mingw-w64-x86_64-cmake mingw-w64-x86_64-gcc
すべての必要な依存関係を持つコンパイラは、デフォルトのパスC:/msys64/mingw64
を使用して、MSYS64ディレクトリにインストールされます。ここでは、MSYS2環境のコマンドラインからUXPlayを構築するだけです(これは、ビルドシステムの「 make
」の代わりに「 ninja
」を使用します)。
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ビルドシステムを試している場合、Windows用のGSTREAMERのMSVCバージョンは公式GSTREAMERサイトから利用できますが、MSYS2のMINGW 64ビットビルドのみがテストされています。
UXPlayソースディレクトリへのCD、次に「 mkdir build
」と「 cd build
」。ビルドプロセスでは、Bonjour SDKがC:Program FilesBonjour SDK
にインストールされていることを前提としています。他の場所の場合は、環境変数bonjour_sdk_homeを設定してその場所を指します。次に、uxplayを作成します
cmake ..
ninja
これらのいずれにもエラーがないと仮定すると、現在の(「ビルド」)ディレクトリに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パッケージにリストされています。
また、Windowsファイアウォールを介してデータにアクセスするには、UXPlay実行可能ファイルuxplay.exeに許可を付与する必要があります。最初にuxplayを実行したときにこれを行うための選択肢が自動的に提供されるか、 Windows設定 - >アップデートとセキュリティ - > [Windowsセキュリティ] - >ファイアウォールとネットワーク保護 - >ファイアウォールを介してアプリを許可する必要がある場合があります。ウイルス保護がuxplay.exeが「疑わしい」(ただし、真のマルウェアの署名なし)としてフラグを立てている場合は、例外を与える必要があるかもしれません。
「 uxplay
」(msys2端子ウィンドウで)を実行してテストします。 AudioSinkを指定する必要がある場合、Windowsには2つの主な選択肢があります。古いDirectSoundプラグイン「 -as directsoundsink
」と、より近代的なWindows Audio Session API(WASAPI)プラグイン「 -as wasapisink
」。
uxplay -as 'wasapisink device=""'
ここで、
、「 gst-device-monitor-1.0 Audio
」を使用して見つけることができるGUID
利用可能なオーディオデバイスを指定します{0.0.0.00000000}.{98e35b2b-8eba-412e-b840-fd2c2492cf44}
。 「 device
」が指定されていない場合、デフォルトのオーディオデバイスが使用されます。
-vs
オプションを使用してVideosinkを指定する場合、
の選択肢はd3d11videosink
、 d3dvideosink
、 glimagesink
、 gtksink
です。
-vs "d3d11videosink fullscreen-toggle-mode=property fullscreen=true"
使用して常にフルスクリーンモードにすることができます。 Option -vs "d3d11videosink fullscreen-toggle-mode=alt-enter"
。便利なため、フルスクリーンオプションの有無にかかわらず-vs d3d11videosink
"-FS"が使用されている場合、これらのオプションが追加されます。 (Windowsユーザーは、uxplayスタートアップオプションファイルに「 vs d3d11videosink
」(初期 " -
")を追加したい場合があります。「man uxplay」または「uxplay -h」を参照してください。)実行可能uxplay.exeはC:msys64mingw64binuxplay
を使用して、Windows端子でMSYS2環境なしで実行できます。
オプション:
-
(環境変数$UXPLAYRC
、または~/.uxplayrc
または~/.config/uxplayrc
)で与えられる(1行ごとに1つのオプション)と記述することもできます。 「 #
」で始まる行はコメントとして扱われ、無視されます。コマンドラインオプションは、スタートアップファイルのオプションに優先します。-n server_name (default:uxplay); server_name@ hostnameは、 iPad、iPhoneなどにAirplayサービスを提供する名前の名前になります。ホスト名はUXPlayを実行しているサーバーの名前です。これは、ミラーディスプレイ(x11)ウィンドウの上に表示される名前にもなります。
-NH AirPlayサーバー名の最後に「@ hostname 」を追加しないでください。
-H265スクリーンミラーモードでH264ビデオ(1080p)に加えて、H265(4K/HEVC)ビデオを受け入れるために、「ScreenMulticodec」サポート(AirPlay "機能「ビット42)をアクティブ化します。このオプションを使用すると、2つの「ビデオパイプライン」(1つはH264、もう1つはH265用)が作成されます。パイプラインのGSTREAMERプラグインがH264またはH265に固有の場合、各パイプラインで正しいバージョンが使用されます。 4Kビデオでは、WiFiよりも有線クライアントサーバーイーサネット接続が推奨されており、クライアントが必要とする場合があります。最近のAppleデバイス(M1/M2 MACまたはiPads、および一部のiPhone)のみが、H> 1080のResolut "-s WXH"が要求された場合、H265ビデオを送信できます。 「-H265」オプションは、1920x1080から3840x2160にデフォルトの解像度(「-S」オプション)を変更し、デフォルトの最大フレームレート( "-fps"オプション)を30fpsに残します。
-pin [nnnn] :( v1.67以来)Appleスタイル(1回限りの)「ピン」認証を使用します。新しいクライアントが初めて接続したとき:ターミナルに4桁のピンコードが表示され、クライアントが表示されます画面には、これを入力するためのログインプロンプトが表示されます。 「-pin」を単独で使用すると、認証ごとに新しいランダムピンコードが選択されます。 "-pin nnnn"(eg、 "-pin 3939")が使用されている場合、これにより変更されていない固定コードが設定されます。認証は、クライアントの「信頼できるサーバー」のリストにサーバーを追加すると、クライアントとサーバーのパブリックキーが変更されていない場合、クライアントは再認証する必要はありません。 (デフォルトでは、v1.68以降、サーバーの公開キーはMacアドレスから生成されます。これは-mオプションで変更できます。キー生成の代替方法については、-Keyオプションを参照してください)。 (UXPlay Startupファイルに、UXPlay ServerがPIN認証プロトコルを使用することを希望する場合は、「PIN」を追加します)。
-reg [ filename ] :( v1.68以降)。 「-pin」が使用されている場合、このオプションは、$ home/.uxplay.register(またはoptional、 filename )のPin-authenticatedの「信頼クライアント」の登録を維持します。このオプションがなければ、PIN Authenticationをスキップするクライアントを返すことは信頼されており、チェックされていません。このオプションは、クライアントの詳細を記録するために、より公共環境でUXPlayが使用される場合に役立つ場合があります。レジスタはテキストで、クライアントごとに1行、クライアントの公開キー(ベース64形式)、デバイスID、およびデバイス名があります。コメント(「#」で)または行の削除対応するクライアント(オプション-RESTRICT、-BLOCK、-ALLOWを参照して、クライアントアクセスを制御する方法を参照)。 (この機能を使用する場合は、スタートアップファイルに「reg」を追加します。)
-vsync [x] (ミラーモードで:)このオプション(現在のデフォルト)は、タイムスタンプを使用してサーバー上のビデオと音声を同期させ、(小数)ミリ秒のオプションのオーディオ遅延( x = "20.5"は0.0205秒の遅延を意味します。正または負の遅延が1秒未満であることが許可されています。)ハードウェアビデオデコードなしのRaspberry Piなどの低電力システムでは必要です。
-vsync no (ミラーモード:)これにより、タイムスタンプベースのオーディオビデオ同期がオフになり、UXPlay-1.64より前にデフォルトの動作が復元されます。標準のデスクトップシステムは、タイムスタンプを使用せずにうまく機能しているようです。このモードは、Macコンピューターの2番目のモニターとしてUXPlayを使用したり、ウェブカメラを監視するなど、「ライブストリーミング」に適しています。それにより、ビデオフレームは削除されません。
-async [x] (オーディオのみ(ALAC)モード:)このオプションは、クライアント上のビデオとサーバーのオーディオを同期するためにタイムスタンプを使用し、(小数)ミリ秒のオプションのオーディオ遅延( x = "20.5"は0.0205を意味します。秒遅延:正または負の遅延が1秒未満で許可されます。)クライアントはレイテンシを考慮してビデオ遅延を追加するため、-Asyncモードでサーバーは同等のオーディオ遅延を追加します。トラック変更はすぐに有効になりません。これは原則として、 -al
オーディオレイテンシ設定を使用して、サーバーがクライアントに報告するレイテンシ(デフォルト0.25秒)を変更することにより軽減される可能性がありますが、現在変更しても効果はないようです。
-async no 。これは、オーディオのみのモードのデフォルトの動作ですが、このオプションは、「UXPlayRC」構成ファイルに設定された-async
オプションをオフにするコマンドラインオプションとして役立つ場合があります。
-db low [: high ]エアプレイボリュームコントロール減衰(ゲイン)-30db:0dbからlow :0dbまたはlow : highを実行します。下限安値は負でなければなりません(減衰)。上限高さはどちらの符号にすることもできます。 (GSTREAMERは、 +20dBを超えることができないように、ボリュームの高度を高く制限します)。再スケーリングは「フラット」であるため、-db -50:10の場合、-7dBによる空中プレイの減衰の変化は-7 x(60/30)= -14db減衰に変換され、最大体積(エアプレイ0db)に変換されます。 10dBの増強であり、AirPlay -30dBは-50dBになります。最小エアプレイ値(-30dB正確に)は「ミュート」に翻訳されていることに注意してください。
-Taperは、「テーパー」エアプレイボリュームコントロールプロファイルを提供します(Shairport-Syncの「Dasl-Tapering」と呼ばれるものと一致します):ボリュームスライダーの長さ(またはMuteを超えるステップ数、16ステップ=フル体積)は50%減少し、知覚された体積は半分になります(10dB減衰)。 (これは低いボリュームで変更され、「不安定な」ボリュームが大きい場合は使用されます。)
-s WXH EG -S 1920x1080(= "1080p")、H264ビデオのピクセルのデフォルトの幅と高さ解像度。 (-H265オプションが使用されると、デフォルトは3840x2160(= "4K")になります。)これは、AirPlayクライアントに行われた要求であり、おそらく最終的な解決策ではないでしょう。 WとHは、4桁以下の整数です。高さのピクセルサイズは、クライアントがストリーミング形式を決定するために使用される制御のサイズであることに注意してください。幅は、たとえばiPadの保持方法に応じて、ポートレートまたはランドスケープ形式など)の形状に動的に調整されます。
-s wxh@r@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(commaseparated値)は、各ポートを個別に設定します。 -p N1、N2はポートN1、N2、N2+1を設定します。 -p TCP Nまたは-P UDP Nは、TCPまたはUDPポートのみを設定します。ポートは範囲内にある必要があります[1024-65535]。
-pオプションが使用されていない場合、ポートは動的に(ランダムに)選択されます。これは、ファイアウォールが実行されている場合は機能しません。
-AVDECは、GSTREAMER ELEMENT AVDEC_H264(LIBAV H264デコーダー)を使用したソフトウェアH264デコードの使用です。このオプションは、autovideosinkがvaapisinkなどのハードウェアアクセラル化Videosinkプラグインを選択するのを防ぐ必要があります。
-VPパーサーは、GSTREAMER PIPELINEのH264パーサー要素を選択します。デフォルトはH264Parseです。引用符「...」を使用すると、オプションを追加できます。
-VDデコーダーは、それを選択するデフォルト値「デコードビン」の代わりに、GSTREAMER PIPELINEのH264デコーダー要素を選択します。ソフトウェアデコードはAVDEC_H264によって行われます。さまざまなハードウェアデコーダーには、VAAPIH264DEC、NVDEC、NVH264DEC、V4L2H264DECが含まれます(これらには、適切なハードウェアが利用可能であることが必要です)。引用符「...」を使用すると、いくつかのパラメーターをデコーダー名に含めることができます。
-VCコンバーターは、デフォルト値「VideoConvert」の代わりに、GSTREAMER PIPELINEのVideoConverter要素を選択します。 GPUによるVideo4linux2ハードウェアデコードを使用する場合、 -vc v4l2convert
GPUを使用してビデオ変換にも使用します。引用符「...」を使用すると、コンバーター名にいくつかのパラメーターを含めることができます。
-vs videosinkは、あなたのためにそれを選択するデフォルト値「autovideosink」の代わりに、gstreamer videosinkを選択します。いくつかのVideySinkの選択肢は、ximagesink、xvimagesink、vaapisink(intelグラフィックスの場合)、gtksink、glimagesink、waylandsink、osxvideosink(macosの場合)、kmssink(x11、raspberry pi os liteなどのシステム用)またはfpsdisplaysink(fpsdisplayink(流れの狂気を示す)を示しています。 fps)。 Quotes "..."を使用すると、VideoSink名にいくつかのパラメーターを含めることができます。たとえば、フルスクリーンモードはvaapisinkプラグインによってサポートされ、 -vs "vaapisink fullscreen=true"
を使用して取得されます。これはwaylandsink
でも機能します。このようなオプションの構文は、特定のプラグインに固有のものであり(GSTREAMERドキュメントを参照)、VideoSinkのいくつかの選択肢はシステムでは機能しない可能性があります。
-vs 0ストリーミングされたビデオの表示を抑制します。ミラーモードでは、クライアントの画面は、1秒あたり1フレームの割合の低いレートでミラーリングされていますが、レンダリングまたは表示されません。このオプションは、サーバーが「ヘッドレス」(ビデオを表示するための画面が添付されていない)であり、オーディオのレンダリングにのみ使用される場合は常に使用する必要があります。 AirPlayオーディオのみのモードでのApple Losslessオーディオ。
-V4L2ハードウェアのビデオ設定H264 Video4linux2によるGPUでのビデオデコード。 -vd v4l2h264dec -vc v4l2convert
に相当します。
-bt709古いvideo4linux2プラグインが、デジタルTVのBT709カラー標準の珍しい(しかし許可されている)「フルレンジ色」のバリアントをAppleが使用していることを認識できないことの回避策。これは、GSTREAMER-1.20.4およびBackportsでは不要になりました。
-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以降削除)
-OudioSinkがGSTREAMER AUDIOSINKを選択すると、AutoAudioSinkに選択させる代わりに選択します。一部のAudiosinkの選択肢は、Pulsesink、Alsasink、Pipewiresink、Osssink、Oss4sink、Jackaudiosink、Osxaudiosink(Macos)、Wasapisink、DirectSoundsink(Windows用)です。 Quotes "..."を使用すると、いくつかのオプションのパラメーターが許可される場合があります(例-as "alsasink device=..."
使用して、非デフォルト出力デバイスを指定します)。このようなオプションの構文は、特定のプラグインに固有であり(GSTREAMERドキュメントを参照)、AudioSinkのいくつかの選択肢はシステムでは機能しない可能性があります。
-as 0 (または-a )は、ストリーミングされたオーディオの再生を抑制しますが、ストリーミングされたビデオが表示されます。
-al xは、クライアントに報告されるオーディオのみ(ALAC)で(小数)秒単位の音声レイテンシxを指定します。範囲の値[0.0、10.0]秒が許可されており、マイクロ秒の全秒に変換されます。デフォルトは0.25秒(250000 USEC)です。 (ただし、クライアントはこの報告されたレイテンシを無視しているように見えるため、このオプションは機能していないようです。)
-CA Filenameは、 AudioのみのALACモードで「Cover Art」(Apple Musicなど)の出力に使用されるファイル( Filenameがフルパスを含めることができる)を提供します。このファイルは、到着する最新のカバーアートで上書きされます。このオプションが使用されない場合、カバーアート(JPEG形式)は破棄されます。画像が変更された場合、または定期的に(たとえば1秒あたり1回)をリロードする画像ビューアーで使用します。これを達成するには、「 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動作を維持します。このオプションは、GSTREAMERによってMACOSで作成されたウィンドウが正しく終了しないため(SEGFAULTを引き起こす)、GSTREAMERパイプラインが閉じているときに開いている場合、MACOSでデフォルトで現在使用されています。
-新しいクライアントが接続を試みたときに、現在の接続をドロップしません。このオプションがなければ、現在のクライアントは、UXPlayが切断されるまで排他的な所有権を維持します。
-Restrictは、 -allow
で指定されたものに接続することを許可されているクライアントを制限します。 DeviceIDには、クライアントが接続しようとしたときにUXPlayによって表示されるMACアドレスの形式があり、不変のように見えます。フォーマットXX:XX:XX:XX:XX:XX
:x = 0-9、afがあり、おそらくデバイスの「真の」ハードウェアMacアドレスです。 iOSクライアントは通常、異なるランダムな「プライベートWi_Fiアドレス」(「偽の」MACアドレス)を異なるネットワークに公開することに注意してください(プライバシー上の理由で、追跡を防ぐため)。
- 制限なし制限なし(デフォルト)。これは、スタートアップファイルに設定された制限を超えるコマンドライン引数として役立ちます。
-Allow IDは、クライアントの制限が施行されているときに、DeviceID = IDを許可されたクライアントのリストに追加します。通常、これはUXPlayRC起動ファイルのエントリになります。
-Block IDは、クライアントの制限が一般的に実施されていない場合でも、常にDeviceID = IDでクライアントをブロックします。通常、これはUXPlayRC起動ファイルのエントリになります。
-FPSDataは、クライアントが送信するビデオストリーミングパフォーマンスに関する定期的なレポートの監視をオンにします。このオプションが使用される場合、これらは端子ウィンドウに表示されます。データは、1秒間隔でクライアントによって更新されます。
-FPS nは、AirPlayクライアントがビデオをストリーミングするための最大フレームレート(1秒あたりのフレーム内)を設定します。 nは256未満である必要があります(クライアントはこれよりも低いフレームレートでビデオを提供することを選択できます。デフォルトは30 fpsです。)60 fpsの設定は改善されたビデオを提供する場合がありますが、Raspberry Piでは推奨されません。 30 FPS以下の設定は、UXPlayの複数のインスタンスを同時に実行している場合、レイテンシを減らすのに役立つ場合があります。この設定は、クライアントデバイスに対するアドバイザリーのみであるため、高い価値を設定しても、高いフレームレートは強制されません。 (「-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を実行するたびに、異なるserver_name、macアドレス、およびネットワークポートが必要です。)[Mac](フォームxx:xx:xx:xx:xx: XX、6ヘクスオクテット)が与えられておらず、ランダムMACアドレスが生成されます。 UXPlayがネットワークカードの真のMACアドレスを見つけられない場合(より具体的には、最初のActive Networkインターフェイスで使用されるMACアドレスが検出されました)、オプション-Mが指定されていなくてもランダムMACアドレスが使用されます。 (UXPlayが開始されるたびに、ランダムMACアドレスが異なることに注意してください)。
-Key [ Filename ] :永続的な公開キー(-PINオプションに必要)を生成および保存するためのこの(より安全な)オプションは、サーバーの「デバイスIDからキーを生成する(安全性の低い)メソッドにデフォルトで置き換えられました「(Macアドレス。これは、-mオプションで変更できますが、スタートアップファイルオプションとして便利に変更できます)。 -Keyオプションを使用すると、安全に生成されたキーペアが生成され、 $HOME/.uxplay.pem
に保存されます。 (オプションで、キーはファイル名に保存できます。)このメソッドは、新しいデフォルトメソッドよりも安全です(デバイスIDはDNS_SDアナウンスでブロードキャストされているため)が、PEMファイルにアクセスできる人にさらされている秘密鍵を残します。このオプションは、uxplayスタートアップファイルで行「キー」または「キーファイル名」(初期 " - ")として設定する必要があります。ここで、ファイル名は引用符( "...."
)に囲まれる完全なパスです。空白が含まれています。デフォルトの方法はより簡単であり、UXPlayへのクライアントアクセスのセキュリティが重要な問題になる可能性は低いため、-Keyオプションは推奨されなくなりました。
-DACP [ FILENAME ] :現在のクライアントDACP-IDとアクティブリモートキーをエクスポートする:デフォルトは$ home/.uxplay.dacpです。 (オプションでファイル名に変更できます)。リモートコントロールアプリケーションで使用できます。ファイルは一時的です:クライアントが接続されている間にのみ存在します。
-vdmpは、videodump.h264をファイルするためにH264ビデオをダンプします。 -vdmp n dumps nal nalユニット以下videodump.x.h264; x = 1,2、... SPS/PPS NALユニットが到着するたびに増加します。 videodumpという名前を変更するには、-vdmp [n] filenameを使用します。
-AdmpはオーディオをダンプしてAudioDump.x.aac(AAC-ELDフォーマットオーディオ)、AudiODUMP.X.ALAC(ALAC FORMAT AUDIO)または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を設定します。デバッグメッセージの場合、gst_debug = 5;これを増やして、GSTREAMERの内側の仕組みをさらに確認します。
注: uxplay
は端末コマンドラインから実行され、情報メッセージは端末に書き込まれます。
1人のユーザー(ubuntuで)では、「USR/Local/lib/libcrypto.a」および「zlib」へのリンクに関するメッセージが失敗したことがわかりました。これは、(LIBSSL-DEVの標準的なubuntuインストールに加えて)、ユーザーが /usr /ローカルのlibcryptoを使用した2番目のインストールが存在することに気付いていなかったためです。解決策:OpenSSLの複数のインストールが存在する場合、環境変数Open_SSL_ROOT_DIRを設定して、正しいものを指します。 64ビットのubuntuでは、cmakeを実行する前にexport OPENSSL_ROOT_DIR=/usr/lib/X86_64-linux-gnu/
実行することで行われます。
DNS_SD Service-Discovery(「Bonjour」または「Zeroconf」)サービスは、UXPlayが機能するために必要です。 Linuxでは、通常Avahiによって提供され、これをトラブルシューティングするには、 avahi-browse
使用する必要があります。 (これを取得するには、 avahi-utils
のような名前の別のパッケージをインストールする必要があるかもしれません。)
Linux sudo service avahi-daemon
、Avahiがインストールされていることを確認し、UXPlayを実行しているシステムでAvahi- sudo systemctl
サービスを開始します(分布はこれを行う方法を文書化します。 sudo service avahi-daemon
、
の1つでは、avahi -daemon.confファイルを編集する必要がある場合があります(通常は /etc /avahi /、 " sudo find /etc -name avahi-daemon.conf
")):「disable-publishing」が選択されたオプションではないことを確認してください)。 Some systems may instead use the mdnsd daemon as an alternative to provide DNS-SD service. (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