gpt4 book ai didi

ios - 如何动态更改 Google Cast 中的 `applicationID`? iOS SDK

转载 作者:行者123 更新时间:2023-12-04 03:44:57 27 4
gpt4 key购买 nike

我在我的 application: didFinishLaunching 中初始化 Google Cast SDK像那样:

let criteria = GCKDiscoveryCriteria(applicationID: kGCKDefaultMediaReceiverApplicationID)
let options = GCKCastOptions(discoveryCriteria: criteria)
GCKCastContext.setSharedInstanceWith(options)
我尝试将视频内容流式传输到默认媒体接收器并且它可以工作。
但我需要能够更改 kGCKDefaultMediaReceiverApplicationID 到自定义接收器应用程序 ID,以将不同的内容发送到我通过 Google Cast SDK 开发人员控制台注册的自定义接收器应用程序。我无法重新启动应用程序来指定不同的应用程序 ID。
有没有办法在 GCKCastContext.setSharedInstanceWith(options) 之后的应用程序中的某个时间点动态执行此操作?已经被调用了?
此方法的调用只工作一次,我无法更新 GCKDiscoveryCriteria: GCKCastContext.setSharedInstanceWith(options)我使用'google-cast-sdk-no-bluetooth',版本:4.5.3
在 Android SDK 中,有一种方法可以动态更改接收者应用程序 ID: https://developers.google.com/android/reference/com/google/android/gms/cast/framework/CastContext#public-void-setreceiverapplicationid-string-applicationid
不幸的是,我在 iOS SDK 中没有看到类似的东西 :(
我唯一发现的是这个(在 GCKSessionManager 中):
/**
* Sets the default session options for the given device category.The session options are passed to
* the GCKDeviceProvider::createSessionForDevice:sessionID:sessionOptions: method when the user
* selects a device from the Cast dialog. For Cast sessions, the session options can specify which
* receiver application to launch.
*
* @param sessionOptions The session options. May be <code>nil</code> to remove any previously set
* options.
* @param category The device category.
*
* @since 4.0
*/
- (void)setDefaultSessionOptions:(nullable GCKSessionOptions *)sessionOptions
forDeviceCategory:(NSString *)category;
但是没有关于要传递哪个 sessionOptions 和类别的文档(类别可能是 kGCKCastDeviceCategory)。无法理解存在哪些参数以及如何构造它们。

最佳答案

经过一段时间的逆向工程,我找到了解决方案。它需要两个必要的步骤:
第一步:初始化GCKDiscoveryCriteria使用私有(private)的 Objective-C 调用:

let criteria = GCKDiscoveryCriteria(applicationID: kReceiverAppID)
let initWithIds = Selector(("initWithApplicationIDs:"))
if criteria.responds(to: initWithIds) {
criteria.perform(initWithIds, with: NSOrderedSet(array: [kGCKDefaultMediaReceiverApplicationID, kReceiverAppID]))
}

let options = GCKCastOptions(discoveryCriteria: criteria)
GCKCastContext.setSharedInstanceWith(options)
这里需要提供 NSOrderedSet的实例带有您要使用的应用程序 ID。在我的情况下,其中之一是默认媒体接收器应用程序 ID,第二个是自定义。
第 2 步:动态设置用于新创建 session 的应用程序 ID。您可以在应用生命周期内多次调用它:
let sessionManager = GCKCastContext.sharedInstance().sessionManager
sessionManager.setDefaultSessionOptions(["gck_applicationID": NSString("YOUR_RECEIVER_APP_ID")],
forDeviceCategory: kGCKCastDeviceCategory)

这里我们使用字符串 gck_applicationID作为一把 key 。找了好几天终于找到了!!!您可以使用 kGCKDefaultMediaReceiverApplicationID作为一个值,或您的自定义接收器应用程序 ID。
感谢@iUrii 和他的逆向工程方向。 https://stackoverflow.com/a/65408060/5147552
附:我使用私有(private)方法来完成我想要的。它适用于 google-cast-sdk-no-bluetooth ,版本 4.5.3。但它可能会发生变化。使用时要小心,因为新版本的 SDK 可能会破坏它。

关于ios - 如何动态更改 Google Cast 中的 `applicationID`? iOS SDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65331067/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com