GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

balloob

pychromecast – Google Chromecastと通信するPython 3用ライブラリ

投稿日:

Google Chromecastと通信するPython 3用ライブラリ

パイクロムス

Google Chromecastと通信するPython 3.4以降のライブラリ 現在サポートしているのは:

  • ネットワーク上のChromecastを自動的に検出する
  • デフォルトのメディアレシーバを起動して、オンラインメディアを再生する
  • 現在の再生メディアの再生を制御する
  • Google Chromecast API v2を実装する
  • チャンネル経由でアプリと通信する
  • サポートされていない名前空間のサポートを追加するために簡単に拡張可能
  • オーディオキャストデバイスによるマルチルームの設定

GoogleホームのようなChromecastまたはキャスト対応デバイスを制御および自動化するためのPyChromecastを使用して、既成のソリューションを Home Assistant チェックしてください

依存関係

PyChromecastは、Pythonパッケージのリクエストであるprotobufとzeroconfに依存します。 pip install -r requirements.txtを使用してこれらの依存関係がインストールされていることを確認してください

使い方

>> import time
>> import pychromecast

>> chromecasts = pychromecast.get_chromecasts()
>> [cc.device.friendly_name for cc in chromecasts]
['Dev', 'Living Room', 'Den', 'Bedroom']

>> cast = next(cc for cc in chromecasts if cc.device.friendly_name == "Living Room")
>> # Wait for cast device to be ready
>> cast.wait()
>> print(cast.device)
DeviceStatus(friendly_name='Living Room', model_name='Chromecast', manufacturer='Google Inc.', uuid=UUID('df6944da-f016-4cb8-97d0-3da2ccaa380b'), cast_type='cast')

>> print(cast.status)
CastStatus(is_active_input=True, is_stand_by=False, volume_level=1.0, volume_muted=False, app_id='CC1AD845', display_name='Default Media Receiver', namespaces=['urn:x-cast:com.google.cast.player.message', 'urn:x-cast:com.google.cast.media'], session_id='CCA39713-9A4F-34A6-A8BF-5D97BE7ECA5C', transport_id='web-9', status_text='')

>> mc = cast.media_controller
>> mc.play_media('http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4', 'video/mp4')
>> mc.block_until_active()
>> print(mc.status)
MediaStatus(current_time=42.458322, content_id='http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4', content_type='video/mp4', duration=596.474195, stream_type='BUFFERED', idle_reason=None, media_session_id=1, playback_rate=1, player_state='PLAYING', supported_media_commands=15, volume_level=1, volume_muted=False)

>> mc.pause()
>> time.sleep(5)
>> mc.play()

余分な名前空間のサポートの追加

Chromecastで動作する各アプリは名前空間をサポートしています。 JSONベースのミニプロトコルを指定します。 これは、Chromecastと携帯電話/ブラウザ、そして現在はPython間の通信に使用されます。

追加の名前空間のサポートは、コントローラを使用して追加されています。 現在のクロマキャストインスタンスに独自の名前空間を追加するには、まずコントローラを定義する必要があります。 最小コントローラーの例:

from pychromecast.controllers import BaseController

class MyController(BaseController):
    def __init__(self):
        super(MyController, self).__init__(
            "urn:x-cast:my.super.awesome.namespace")

    def receive_message(self, message, data):
        print("Wow, I received this message: {}".format(data))

        return True  # indicate you handled this message

    def request_beer(self):
        self.send_message({'request': 'beer'})

コントローラを定義したら、Chromecastオブジェクトにインスタンスを追加する必要があります:cast.register_handler(MyController())。 ネームスペースでメッセージを受信すると、メッセージはコントローラにルーティングされます。

その他のオプションについては、 BaseControllerを参照してください 完全に実装されたコントローラの例については、 MediaControllerを参照してください

既存の名前空間の探索

PyChromecastが動作しているので、お気に入りのアプリにサポートを追加することになりました。 心配する必要はありません。以下の手順では、可能性を探ることに取り掛かります。

以下の手順では、 Google ChromeブラウザGoogle Castプラグインを使用する必要があります

  • Chromeでは、chrome:// net-internals /#captureに行きます。
  • チェックボックス「有効/無効を含む」を有効にします。
  • 新しいタブを開き、Chromecastをサポートしているウェブ上のお気に入りのアプリケーションを参照してキャストを開始します。
  • イベントをキャプチャしているタブに戻り、停止をクリックします。
  • ドロップダウンからイベントをクリックします。 これにより、録音中に発生したイベントの表が表示されます。
  • フィルタボックスに、テキストTr @ n $ p0rtを入力します。 この結果、1つのSOCKET接続がChromecastとの接続になります。
  • 結果を調べ、交換されたJSONを収集します。
  • 今この動作を模倣できるコントローラを書く:-)

CECデータを無視する

Chromecastは、通常、接続先のデバイスのアクティブな入力かどうかを報告します。 この値は、次のプロパティのキャストオブジェクト内に格納されます。

cast.status.is_active_input

Chromecastユーザーの中には、メディアセンターデバイスとのCECの非互換性について報告しているものがあります。 これらの非互換性により、このアクティブな入力値が不適切に報告されることがあります。

この有効な入力値は、通常、Chromecastがアイドル状態であるかどうかを判断するために使用されます。 PyChromecastは、Chromecastが誤った値を返すインスタンスでChromecastがアイドルであるかどうかを判断する際に、アクティブな入力値を無視することができます。 PyChromecastでこのCEC検出データを無視するには、 Linuxスタイルのワイルドカード形式の文字列を、PyChromecastのIGNORE_CECリストに下の例のように追加します。

pychromecast.IGNORE_CEC.append('*')  # Ignore CEC on all devices
pychromecast.IGNORE_CEC.append('Living Room')  # Ignore CEC on Chromecasts named Living Room

メンテナ

  • ヤン・ボルソディ( @ am0s
  • Ryan Kraus( @rmkraus
  • Paulus Schoutsen( @ balloob 、元の著者)

ありがとう

私はソケットクライアントの基礎作業を敷設してくれたフレッドクリフトに感謝したいと思います。 彼なしではそれはできなかったでしょう!







-balloob
-, , , ,

執筆者: