Skip to content

Navigation Menu

Sign in
Sign up

Repository files navigation

Itodenwa(糸電話)

Windows / macOS / Raspberry Pi で動く、iPhone AirPlay + Android キャスト レシーバー。 iPhone の音声/画面 と Android の画面 を PC のスピーカー・ディスプレイで受けます。

iPhone ──(Wi-Fi)──▶ Itodenwa ──▶ スピーカー / ディスプレイ
Android ──(Wi-Fi)──▶ Itodenwa ──▶ ディスプレイ

機能

タブ式 GUI iPhone 音声 / iPhone ミラー / Android の3タブ。独立に開始/停止でき、Android + iPhoneミラー の並行動作もOK
iPhone 音声 AirPlay 1 (RAOP) を自作エンジンで実装。iPhone 音量連動 + ソフトリミッター付きブースト
iPhone ミラー UxPlay を内部利用(要別途インストール、docs/SETUP_MIRRORING.md)
Android キャスト scrcpy を内部利用(要別途インストール、docs/SETUP_ANDROID_CAST.md)。Wi-Fi ペアリング / USB→無線化 を GUI から操作可能
設定の自動保存 タブごとの設定・アクティブタブ・Android 接続先を記憶
GUI / CLI どちらもフル機能。CLI はラズパイの SSH 運用に最適

クイックスタート

Windows

python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
python run.py # またはエクスプローラで Itodenwa.bat をダブルクリック

画面ミラーリング / Androidキャストを使うには、それぞれ UxPlaywinget install Genymobile.scrcpy を先に済ませてください。

macOS

brew install python python-tk@3.13 # tkinter は別 formula
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python run.py # または Itodenwa.command をダブルクリック

ミラーリング用の uxplay、Android用の scrcpy はどちらも brew で入ります。詳細は docs/SETUP_MIRRORING.md / docs/SETUP_ANDROID_CAST.md を参照。

Linux / Raspberry Pi

sudo apt install python3-venv python3-tk libportaudio2 ffmpeg
sudo apt install uxplay scrcpy # ミラーリング/Androidキャストを使う場合
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python run.py # GUI / または python run.py cli でヘッドレス

動作確認

python run.py selftest

すべて [OK] なら起動可能。初回はここで AirPlay 用の公開 RSA 鍵 (airport.key)が自動ダウンロードされます。UxPlay / scrcpy は使う場合のみ検出されればOK。

使い方

Itodenwa は上部に 3つのタブがあり、それぞれ独立して開始/停止できます。

  1. 使いたいタブ(iPhone 音声 / iPhone ミラー / Android)を選ぶ
  2. タブ内の 「開始」 を押す
  3. iPhone のコントロールセンター → AirPlay(音符マーク)または 画面ミラーリング から 「Itodenwa」 を選択 (Android は事前に接続セットアップ要 → docs/SETUP_ANDROID_CAST.md)
  4. 鳴る/映る

並行動作: iPhone ミラーAndroid は同時起動可能(両方のウィンドウが並ぶ)。 ただし iPhone 音声iPhone ミラー は同じ RTSP ポートを使うため同時起動不可。

初回起動時、Windows ファイアウォールが Python の通信を確認したら 「プライベートネットワーク」を許可 してください。

CLI モード(ラズパイのヘッドレス運用に)

Tkinter を読み込まないので python3-tk 無しでも動きます。SSH 越しで OK。

python run.py cli --list-devices # 出力デバイス一覧
python run.py cli --device USB --boost 2.0 # 名前部分一致+ブースト
python run.py cli --mode mirror --resolution 540x1170
python run.py cli --mode androidcast # Android画面キャスト(scrcpy必要)
python run.py cli --help # 全オプション
# Android のワイヤレス adb セットアップ(ワンショット)
python run.py wireless pair <pair_ip:port> <code> <connect_ip:port>
python run.py wireless usb2tcpip # USB接続中を無線化
python run.py wireless status
python run.py wireless disconnect

ラズパイ起動時に常駐させたい場合は systemd --user ユニット化が便利です (具体例はリクエストくれれば手順を案内します)。

ダブルクリック起動 / タスクバー登録

OS 起動ファイル アイコン化
Windows Itodenwa.bat tools\create-shortcut.ps1 でショートカット作成 → 右クリック→タスクバーにピン留め
macOS Itodenwa.command Finder からドラッグで Dock へ
Linux Itodenwa.sh tools/itodenwa.desktop~/.local/share/applications/ にコピー

設定の保存場所

OS パス
Windows %APPDATA%\Itodenwa\settings.json
macOS ~/Library/Application Support/Itodenwa/settings.json
Linux ~/.config/Itodenwa/settings.json

出力先は デバイス名で保存されるので、USB の抜き挿し等で番号が変わっても 同じ機器を自動で選び直します。Android の接続先 IP:PORT も同じファイルに保存されます。

トラブルシューティング

主なもの(詳細は各セットアップ docs 参照):

症状 対処
iPhone の一覧に出ない 同じ Wi-Fi か / ファイアウォールで Python を許可 / Apple Bonjour が動作中か
音が出ない・小さい 「音の出力先」を実機スピーカーへ / 「音量ブースト」を上げる
ミラーリング関連 docs/SETUP_MIRRORING.md#うまくいかないときは
Androidキャスト関連 docs/SETUP_ANDROID_CAST.md#トラブルシューティング
pip install av で失敗 Python 3.10 以上の 64bit 版を使う

macOS でファイアウォール許可が要る場合:

sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add $(realpath .venv/bin/python)

アーキテクチャ

音声(iPhone): iPhone ─▶ mDNS発見 ─▶ RTSP鍵交換 ─▶ AES復号 ─▶ ALACデコード ─▶ 再生
映像(iPhone): iPhone ─▶ mDNS発見 ─▶ (以降は UxPlay が担当) ─▶ ディスプレイ
映像+音声(Android): Android ─▶ Wi-Fi(adb) ─▶ (以降は scrcpy が担当) ─▶ ディスプレイ
モジュール 役割
itodenwa/mdns.py iPhone への機器広告(Bonjour)
itodenwa/rtsp.py 接続交渉・本人確認・鍵交換
itodenwa/keys.py RSA 鍵管理
itodenwa/crypto.py 音声 AES 復号
itodenwa/alac.py ALAC → PCM デコード
itodenwa/rtp.py 音声/同期/時刻 の UDP 受信
itodenwa/audio.py スピーカー再生・音量・ブースト
itodenwa/mirror.py UxPlay 連携
itodenwa/mirror_android.py scrcpy 連携(Androidキャスト)
itodenwa/android_adb.py adb ラッパー(Wi-Fiペアリング/USB→無線化)
itodenwa/gui.py Tkinter GUI(タブ式)
itodenwa/settings.py ユーザー設定の永続化
itodenwa/platform_paths.py OS 抽象化(パス・フォント等)

制限と注意

  • AirPlay 1 のみ対応(AirPlay 2 のマルチルーム同期は未対応)
  • タイミング同期は簡易実装(音楽は問題なし、映像の口パク同期はやや甘い)
  • RSA 鍵は 2011 年に公開された OSS 共有鍵を使用。リポジトリ非同梱・初回起動時に juhovh/shairplay から自動取得。学習・個人利用前提
  • Androidキャストは Android 11+ で「Wi-Fi デバッグ」による最初から無線接続が可能 (Pixel 等推奨)。Android 10 以下は「USB を無線化」方式のみ、音声転送も Android 11+ のみ

ライセンス

MIT

About

Cross-platform iPhone AirPlay receiver (audio + screen mirroring) for Windows / macOS / Raspberry Pi

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /