Chromecastはどのように機能しますか?

はじめに


私は最近、ビデオを送信するためのワイヤレスアダプターの選択に火をつけました。 Miracast / DLNAを搭載した中国のアダプターを見ましたが、もちろん、Chromecastを通過しませんでした。 WiDi、Miracast、AIRTAMEなどのドングル(ソフトウェアのサポートは不要で、システムの別のモニターのように見えます)などのテクノロジーですべてが明確な場合、Chromecastが内部でどのように動作するかは完全にわかりませんでした彼は私です。 しかし、Chromecast LeapCastエミュレーターのオープンソースプロジェクトを見つけたので、それを実際に試してみることにし、プロトコルを研究することも決めました。



インストールと使用


ArchLinuxへのインストールは非常に簡単です-AURからleapcast-gitパッケージをインストールするだけです。 Google ChromeまたはChromiumもインストールする必要があります。 依存関係にはありません。



プログラムを起動すると、次の図が表示されます。

非表示のテキスト
INFO:root:Starting SSDP server INFO:root:Starting LEAP server INFO:root:Loading Config-JSON from Google-Server INFO:requests.packages.urllib3.connectionpool:Starting new HTTPS connection (1): clients3.google.com INFO:root:Parsing Config-JSON INFO:root:Added edaded98-5119-4c8a-afc1-de722da03562 app INFO:root:Added PlayMovies app INFO:root:Added 00000000-0000-0000-0000-000000000000 app INFO:root:Added 1812335e-441c-4e1e-a61a-312ca1ead90e app INFO:root:Added 06ee44ee-e7e3-4249-83b6-f5d0b6f07f34 app INFO:root:Added 2be788b9-b7e0-4743-9069-ea876d97ac20 app INFO:root:Added GoogleSantaTracker app INFO:root:Added 06ee44ee-e7e3-4249-83b6-f5d0b6f07f34_1 app INFO:root:Added Pandora_App app INFO:root:Added aa35235e-a960-4402-a87e-807ae8b2ac79 app INFO:root:Added YouTube app INFO:root:Added HBO_App app INFO:root:Added TicTacToe app INFO:root:Added Revision3_App app INFO:root:Added Songza_App app INFO:root:Added a7f3283b-8034-4506-83e8-4e79ab1ad794_2 app WARNING:root:Didn't add Netflix because it has no URL! INFO:root:Added GoogleMusic app INFO:root:Added 18a8aeaa-8e3d-4c24-b05d-da68394a3476_1 app INFO:root:Added Post_TV_App app INFO:root:Added ChromeCast app INFO:root:Added Hulu_Plus app INFO:root:Added GoogleCastSampleApp app INFO:root:Added GoogleCastPlayer app INFO:root:Added Fling app
      
      





ChromecastをサポートするAndroidスマートフォン(YouTubeなど)でアプリケーションを開き、Leapcastに接続できます。

画像

ログで同時に:

非表示のテキスト
 INFO:tornado.access:200 GET /ssdp/device-desc.xml (192.168.0.105) 2.22ms INFO:tornado.access:200 GET /apps/YouTube (192.168.0.105) 3.18ms INFO:tornado.access:200 GET /apps/YouTube (192.168.0.105) 3.67ms INFO:tornado.access:201 POST /apps/YouTube (192.168.0.105) 5.29ms INFO:root:Channel for app set to <leapcast.services.websocket.ServiceChannel object at 0x195f690>
      
      





うわー、うまくいきました! どのように機能しますか?



プロトコル


検索と初期管理(目的のアプリケーションの起動、パラメーターの取得)には、 DIALプロトコルが使用されます。これは、検索用のSSDPと管理用のHTTP REST + XMLの一種です。 UPnPとDLNAを使用した場合、SSDPはおなじみのものであり、REST部分は非常に単純です。



  1. LeapCastが起動されると、 正式にサポートされているアプリケーションのリストをjson形式で取得するためにGoogleサーバーに接続します 。 このファイルには、各アプリケーションのあらゆる種類のパラメーター(要求の送信先のリンク、起動するパラメーターなど)が記述されています。
  2. LeapCastはSSDPで発表します。
  3. Androidクライアント(私の場合はYouTube)はSSDPを介してLeapCastを見つけ、その情報を取得し( /ssdp/device-desc.xmlを参照)、デバイスがYouTubeで動作することを確認し(リクエスト/アプリ/ YouTube )、サーバーに接続しますYouTubeはペアリングトークンを取得し、POSTリクエストでLeapCastを送信します(同じ/ apps / YouTubeの場合 )。
  4. LeapCastはwww.youtube.com/tvでChrome / Chromiumアプリケーションを起動しますか?$ {POST_DATA}
  5. さらに、 RAMPプロトコルはAndroidとLeapCastの接続に使用されます(Googleは彼のサイトから仕様を削除しました)。 WebSocket内でjsonメッセージを転送することにより、デバイス間の相互作用を記述します。
  6. インタラクションを完了するために、Androidは同じURLにDELETEリクエストをLeapcastに送信します


YouTubeの場合、私が理解しているとおり、WebSocketはYouTubeのサーバー側にありますが、他のアプリケーション(たとえば、Google Music)はWebSocketを作成するためにLeapCastを必要とし、制御は既にワイヤレスネットワーク内にあります。



ChromecastをサポートするアプリケーションがGoogleによって承認されていない(したがって、jsonに記録がない)場合、ユーザーは開発者モードに入り、その情報をダウンロードすることによってのみ使用できます。 悲しいかな。



おわりに


一般的に、LeapCastを使用すると、何らかの理由で安価なデバイスを購入できない場合、Python + Chromeを実行できる任意のデバイスをChromecastのほぼ本格的なアナログに変えることができます。 そして、私はそれを買うことを決して決めなかった、なぜなら インターネットなしでは機能しません。Googleアプリケーションの承認が必要です。



All Articles