zyfunの解剖 — Electronで構築されたストリーム・IPTV用のモジュラープレイヤー
デスクトップでIPTVやネットワーク動画の再生を設定しようとしたことがある人なら、二つの極端な選択肢に遭遇したことがあるだろう。一方ではKodiのような大容量のオールインワンソリューションがあり、何百メガバイトもの依存関係を必要とし、複雑なインターフェースで圧倒される。他方では簡素なユーティリティがあり、プレイリストをテキスト設定に手動で埋め込む必要があり、適切な検索や同期機能がまったくない。
最近zyfunを見つけた。 популярного ZY-Playerの直接的な後継で、モダンなスタックを使って完全に書き直されている。GitHubで既に8,800スター以上集めているが、アジア圏の外ではほとんど知られていない。理由はシンプルで、ドキュメントが中国語のみで、機械翻訳は必ずしも正確ではないからだ。しかし、このプロジェクトのエンジニアリングには注目する価値がある。
内部構造
zyfunはElectron、Vue 3、Vite、TypeScriptで構築されたデスクトップアプリケーションだ。著者はインターフェースにTDesignコンポーネントライブラリを採用している。
アプリケーションはシンクライアントとして動作する。組み込みコンテンツを含まず、外部ソースのハンドラとして機能する。構造化されたJSON設定ファイルをクライアントに提供すると、アプリケーションがデータ解析、フィルタリング、カタログ検索、ストリーム再生を処理する。


主要なエンジニアリング上の決定
このプロジェクトのコードベースには、典型的なホームブリュープレイヤーとは異なる興味深いソリューションがいくつか含まれている。
1. モジュラーソースアダプタ
硬直的な解析ロジックの代わりに、著者はアダプタシステム(types T0 through T4)を実装した。これにより、完全に異なるバックエンドを接続できる:
- T0とT1:XMLまたはJSONレスポンスを返すクラシックなRESTインターフェース。
- T3とT4:JavaScript(DRPy)、CatVod、Pythonでのカスタムハンドラ実行をサポートするスクリプトアダプタ。
- Alistプロトコルを介したファイルストレージ接続。
これにより、バイナリ自体を再構築せずに、設定ファイル内のフィールドマッピングスキーマを記述するだけで、新しい映画サイトやホームNASカタログを追加できる。
2. Chrome DevTools Protocolによるストリームスニッファ
多くのオンラインシネマは複雑なスクリプトの背後に直接ストリームリンクを隠している。通常 таких задач решаются через скрытые фреймы, что часто нарушает работу страницы.
zyfunでは、CDP(Chrome DevTools Protocol)を介してストリーム傍受を実装している。アプリケーションは分離されたChromiumコンテキストでターゲットURLを開き、ネットワークレベルのイベント Network.requestWillBeSent を購読し、ファイルリンク .m3u8 または .mp4 をキャッチする。このアプローチはヒューリスティックな正規表現マッチングよりも信頼性が高い。
3. 交換可能なビデオコア
アプリケーション内では、単一のプレイヤーに固定バインディングされていない。設定でdesired engineを選択できる:
- XGPlayer(ByteDanceチーム開発)
- ArtPlayer
- システムコールを介した外部バイナリ(例えば、ハードウェアデコード対応のmpvやVLC)
ネイティブWebプレイヤーが高ビットレートや特定のコーデックを処理できない場合、ワンクリックで外部mpvにストリームを転送できる。


4. 同期と組み込みAI
視聴履歴、ブックマーク、ソース設定はWebDAVまたはiCloud経由で同期される。複数のマシンでアプリを使用している場合に便利だ。
著者はOpenAI APIとの統合も追加した。クライアントは選択した言語モデルにリクエストを送信して、簡単なプロットサマリーや類似作品の推薦を素早く取得できる。
日常的な便利な機能として:設定にはBoss Key機能が含まれている。macOSではデフォルトでShift+Cmd+Zを押すと、ウィンドウがトレイに即座に非表示になり音がミュートされる。
設定の仕組み
すべてのソースデータベースは単一のJSONドキュメントでインポートされる。構造は独立したブロックに分割されている: site VODカタログ用、 iptv プレイリスト用、 channel 個々のストリーム用、 analyze リンクリゾルバ用。
標準的なソース設定の例:
インストールとプラットフォーム
Windows(x64、arm64)、macOS(IntelとApple Silicon)、Linux(AppImage、deb、rpm、AURパッケージ)のプリビルドパッケージが利用可能だ。
macOSにインストールする際、システムが署名されていないアプリケーションの起動をブロックする場合がある。標準的な検疫属性リセットで回避できる:
Linuxでは、一部のディストリビューションでAppImageを実行する際に、 libfuse2 ライブラリが必要だ:
まとめ
zyfunは、所有するメディアストリームをプロプライエタリなサービスに依存せずに管理したい人にとって、堅実なツールであることが判明した。
誰が恩恵を受けるか:
- EPGサポートと便利なチャンネルグループ化を備えたクリーンなプレイヤーを必要とするIPTV愛好家。
- 異なるAPIを単一のクライアントに統合したいホームメディアサーバー所有者。
- バックグラウンドネットワークトラフィック分析のためのChrome DevTools Protocol統合の実用的な例を探しているVueおよびElectron開発者。
ソースはAGPL-3.0ライセンスの下で公開されている。オールインワンのストリーミングクライアントを探しているなら、リポジトリは確かにチェックする価値がある。
関連プロジェクト