我应该为 Chromecast 发现使用啥标志?

Posted

技术标签:

【中文标题】我应该为 Chromecast 发现使用啥标志?【英文标题】:What flag should I use for Chromecast discovery?我应该为 Chromecast 发现使用什么标志? 【发布时间】:2014-03-11 08:15:07 【问题描述】:

我有一个控制 UPnP MediaRenderers 的 android 应用,现在我想修改它以使用 Chromecast。

由于我必须混合使用 UPnP 和 Chromecast,而且我的应用没有使用 ActionBarCompat,我无法使用 Cast Companion Library,所以我尝试自己集成 Cast SDK,构建自定义按钮。

对于设备发现,我正在使用 MediaRouter.addCallback,但我真的不知道是否应该指定一个标志。根据Javadoc,第三个参数是:

Flags to control the behavior of the callback. May be zero or a combination of CALLBACK_FLAG_PERFORM_ACTIVE_SCAN and CALLBACK_FLAG_UNFILTERED_EVENTS.

但是标志的文档说:

public static final int CALLBACK_FLAG_PERFORM_ACTIVE_SCAN

Flag for addCallback(MediaRouteSelector, MediaRouter.Callback): Actively scan for routes while this callback is registered.

When this flag is specified, the media router will actively scan for new routes. Certain routes, such as wifi display routes, may not be discoverable except when actively scanning. This flag is typically used when the route picker dialog has been opened by the user to ensure that the route information is up to date.

Active scanning may consume a significant amount of power and may have intrusive effects on wireless connectivity. **Therefore it is important that active scanning only be requested when it is actually needed to satisfy a user request to discover and select a new route**.

但根据 Cast UX 指南,我不应该在 ActionBar 中显示 Cast 按钮,除非我知道网络中有设备。所以我不能等待用户请求使用主动扫描,因为如果应用没有发现设备,用户就没有按钮可以触摸和请求路线!

这是我的疑惑:

-我是否应该在显示电池耗尽的风险之前使用 CALLBACK_FLAG_PERFORM_ACTIVE_SCAN,但要确保在必须显示按钮时才显示按钮?这是标准应用程序的作用吗?

-即使有可用的 Chromecast,我是否应该不使用标志并冒着按钮不出现的风险?

-我应该改用 CALLBACK_FLAG_REQUEST_DISCOVERY 吗?差别大吗?

谢谢!

【问题讨论】:

【参考方案1】:

您可以在开始活动时使用CALLBACK_FLAG_PERFORM_ACTIVE_SCAN 标志并注册回调。然后框架将继续每 30 秒左右重新扫描一次(我不记得确切的数字)。该过程经过高度优化,因此您不必太担心电池消耗。当您离开您的应用程序时,您可以移除回调。

编辑:由于cast的扩展和镜像的引入等,现在建议使用更保守的标志CALLBACK_FLAG_REQUEST_DISCOVERY

【讨论】:

【参考方案2】:

MediaRouter 的文档说 CALLBACK_FLAG_PERFORM_ACTIVE_SCAN“可能会消耗大量电力”,最近 Ali Naddaf 在 Cast Companion Library 中改用 CALLBACK_FLAG_REQUEST_DISCOVERY,所以我建议您改用它。

【讨论】:

以上是关于我应该为 Chromecast 发现使用啥标志?的主要内容,如果未能解决你的问题,请参考以下文章

如果我们为 -mfpu 定义了错误的标志会发生啥?

如何使用 ffmpeg 为 Chromecast 创建 DASH VOD?

通过 Cast.CastApi.sendMessage 向 Chromecast 默认媒体接收器发送啥有效负载

如何使 <IMG> 标志不可拖动

Chromecast 网络实现细节,并用 roku 复制它

-ObjC 链接器标志有啥作用?