iPhone投屏到Ubuntu

作者:zhangyunlong 发布时间: 2025-08-09 阅读量:5 评论数:0

核心思路

1. AirPlay 接收端运行在 Ubuntu

  • 用 UxPlay / OpenAirPlay / raop-play 等软件

  • Ubuntu 直接监听局域网的 AirPlay 投屏请求

2. iPhone 直接连接 Ubuntu

  • iPhone 和 Ubuntu 必须在 同一 Wi-Fi

  • iPhone “屏幕镜像”选择 Ubuntu 上的 AirPlay 设备

3. 优点

  • 没有额外硬件成本

  • 延迟主要由 Ubuntu 性能和 Wi-Fi 决定

4. 局限

  • iPhone 锁屏后投屏会中断

  • 无法直接操作 iPhone,只能观看


RPiPlay

  • 原本为树莓派写的,但也能在普通 Linux 运行

  • 使用更轻量的解码(OpenGL + SDL),延迟比 UxPlay 低

  • 功能上和 UxPlay 类似,也能接收 AirPlay 屏幕镜像

原本为树莓派写的,但也能在普通 Linux 运行

使用更轻量的解码(OpenGL + SDL),延迟比 UxPlay 低

功能上和 UxPlay 类似,也能接收 AirPlay 屏幕镜像

1. 安装依赖

zhangyunlong@matebook14s:~$ sudo apt install \
  cmake \
  build-essential \
  libavahi-compat-libdnssd-dev \
  libssl-dev \
  libexpat1-dev \
  libasound2-dev \
  libsdl2-dev \
  libgstreamer1.0-dev \
  libgstreamer-plugins-base1.0-dev libplist-dev

2. 克隆RPiPlay项目

zhangyunlong@matebook14s:~$ cd /opt/
zhangyunlong@matebook14s:/opt$ sudo git clone https://github.com/FD-/RPiPlay.git
正克隆到 'RPiPlay'...
remote: Enumerating objects: 3145, done.
remote: Total 3145 (delta 0), reused 0 (delta 0), pack-reused 3145 (from 1)
接收对象中: 100% (3145/3145), 6.82 MiB | 82.00 KiB/s, 完成.
处理 delta 中: 100% (1693/1693), 完成.
zhangyunlong@matebook14s:/opt$

3. 编译RPiPLay

zhangyunlong@matebook14s:/opt$ cd RPiPlay/
zhangyunlong@matebook14s:/opt/RPiPlay$ sudo mkdir build && cd build
zhangyunlong@matebook14s:/opt/RPiPlay/build$
zhangyunlong@matebook14s:/opt/RPiPlay/build$ sudo cmake ..
zhangyunlong@matebook14s:/opt/RPiPlay/build$ sudo make -j$(nproc)

4. 启动RPiPlay

zhangyunlong@matebook14s:/opt/RPiPlay/build$ ./rpiplay -n "matebook14s"
Initialized server socket(s)
*** WARNING *** The program 'rpiplay' uses the Apple Bonjour compatibility layer of Avahi.
*** WARNING *** Please fix your application to use the native API of Avahi!
*** WARNING *** For more information see <http://0pointer.de/blog/projects/avahi-compat.html>

5. iPhone投屏

  • 保持iPhone和Ubuntu系统在同一个局域网下

  • iPhone找到屏幕镜像, 待RPIiPlay启动后, 选择目标设备

6. 如需投屏左右镜像反转(适用于HUD等场景)

cd /opt/RPiPlay/renderers
vim video_renderer_gstreamer.c
找到这一行:
g_string_append(launch, "autovideosink name=video_sink sync=false");
修改为:
g_string_append(launch, "videoflip method=horizontal-flip ! autovideosink name=video_sink sync=false");
​
# 重新编译
cd /opt/RPiPlay/build
cmake ..
make -j$(nproc)

评论