【问题标题】:Can i programatically detect if there are any Chromecast devices on the current WiFi network?我可以以编程方式检测当前 WiFi 网络上是否有任何 Chromecast 设备?
【发布时间】:2014-06-06 21:48:09
【问题描述】:

是否可以检测当前 WiFi 网络上是否有任何 Chromecast 设备。我已经看到有一个 Cast SDK,但我找不到任何关于搜索设备的信息。之前从未使用过这个 SDK,我可能忽略了它。

【问题讨论】:

    标签: java android chromecast


    【解决方案1】:

    一个非常简单的解决方案是使用com.youview.tinydnssd.DiscoverResolver。这是我的实现:

    DiscoverResolver resolver = new DiscoverResolver(ctx, "_googlecast._tcp.", new DiscoverResolverHandler());
    

    DiscoverResolverHandler() 中,您可以处理结果。

    【讨论】:

      【解决方案2】:

      您可以在本地网络中使用 SSDP(简单服务发现协议),ST(服务类型)为:

      urn:dial-multiscreen-org:service:dial:1

      您的 SSDP 查询应如下所示:

      M-SEARCH * HTTP/1.1\r\n
      Host: 239.255.255.250:1900\r\n
      MAN: "ssdp:discover"\r\n
      MX: 3\r\n
      ST: urn:dial-multiscreen-org:service:dial:1\r\n\r\n
      

      您将获得支持这些服务类型(如 Chromecast)的所有设备(IP 和端口)的列表。然后你可以从这个 IP:8008 拉一个 xml 文件来检查它是否真的是一个 Chromecast 设备:

      http://IP:8008/ssdp/device-desc.xml

      响应将如下所示:

      <?xml version="1.0" encoding="UTF-8"?>
      <root>
         <specVersion>
            <major>1</major>
            <minor>0</minor>
         </specVersion>
         <URLBase>http://192.168.0.0:8008</URLBase>
         <device>
            <deviceType>urn:dial-multiscreen-org:device:dial:1</deviceType>
            <friendlyName>Chromecast</friendlyName>
            <manufacturer>Google Inc.</manufacturer>
            <modelName>Eureka Dongle</modelName>
            <UDN>uuid:3c7f2a1e-dbd2-f94d-b456-816555a9d1f9</UDN>
            <iconList>
               <icon>
                  <mimetype>image/png</mimetype>
                  <width>98</width>
                  <height>55</height>
                  <depth>32</depth>
                  <url>/setup/icon.png</url>
               </icon>
            </iconList>
            <serviceList>
               <service>
                  <serviceType>urn:dial-multiscreen-org:service:dial:1</serviceType>
                  <serviceId>urn:dial-multiscreen-org:serviceId:dial</serviceId>
                  <controlURL>/ssdp/notfound</controlURL>
                  <eventSubURL>/ssdp/notfound</eventSubURL>
                  <SCPDURL>/ssdp/notfound</SCPDURL>
               </service>
            </serviceList>
         </device>
      </root>
      

      关于它的更多信息在这里: http://wolfpaulus.com/jounal/mac/chromecasting/

      如果您想将内容流式传输到您的 Chromecast,您可以通过以下方式获取有关 ChromeCast 应用程序的信息:

      http://IP:8008/apps/ChromeCast

      【讨论】:

        【解决方案3】:

        您可以在不使用投射按钮的情况下执行发现;您需要使用 v7 支持库中的媒体路由器(也需要 v7 appcompat 支持),然后从您的代码中获取媒体路由器的实例,定义一个选择器(这基本上是一个过滤器,可能会缩小您的设备范围有兴趣),然后添加一个回调以开始发现。随着设备被发现(异步),您的回调将被调用。看看这个示例project,特别是这个class,它完全符合您的要求。

        【讨论】:

        • 我们应该将哪个应用 id 值传递给CastMediaControlIntent.categoryForCast()
        【解决方案4】:

        使用recommended way of Google,您无需扫描Chromecast 设备即可提供来自Android 应用程序的内容。您可以将投射按钮添加到您的 Activity,方法是使用 ActionBarActivity 扩展它,然后在 onCreateOptionsMenu() 中添加带有 ActionBar 的选项项

        app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"
        

        作为行动。

        Here 您可以找到有关如何发送到Chromecast 棒的完整示例。如果您出于任何原因想要手动扫描,可以使用Android MediaRouters API,引用自文档:

        可以使用 Android MediaRouter 执行投射设备发现 Android 支持库中的 API,兼容回 安卓 2.1。

        【讨论】:

          【解决方案5】:

          可以使用 _googlecast._tcp 类型的 avahi 发现 Chromecast 设备

          $ avahi-browse -r _googlecast._tcp
          +   eth0 IPv4 Living Room                                   _googlecast._tcp     local
          =   eth0 IPv4 Living Room                                   _googlecast._tcp     local
             hostname = [Living\032Room.local]
             address = [192.168.1.100]
             port = [8009]
             txt = ["st=0" "fn=Living Room" "ca=5" "ic=/setup/icon.png" "md=Chromecast" "ve=02" "id=c832a30b81ab84a706c82745438fcd64"]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-06-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-05-31
            • 1970-01-01
            • 2013-08-26
            • 1970-01-01
            相关资源
            最近更新 更多