如何正确连接到 Google Cast 设备并使用自定义接收器投射 url?
How to properly connect to Google Cast device and cast an url with an custom receiver?
为了创建这个,我使用了 Google Cast 参考 Github https://github.com/googlecast/CastHelloText-ios & https://github.com/googlecast/CastVideos-ios
然后,如果您下载了它,请查看我与 Google Cast 有关的代码块。如果您看到导致此错误发生的原因,请告诉我。因为老实说我不知道这是 Xcode 还是 Google Cast bug.. 或者是最常见的错误.. 人类
启动模拟器,它将在网络中寻找活动的 Chrome Cast 设备。如果找到,将出现投射按钮。当您按下投射按钮时,它会转到 chooseDevice()
功能,并会在您的网络中显示一个带有设备的 UIAlertController,然后您可以 select 您想要投射到的设备。
如果您点击一个设备,它将转到 connectToDevice()
功能并建立连接。
连接后,它应该转到下一个名为 "deviceManagerDidConnect" 的函数。所以我收到一条消息 "Connected".. 5 秒后我收到一条错误消息 "Error Domain=com.google.GCKError Code=2. Network connection timeout"。当我重建项目时,我得到了不同的结果.. 在 "deviceManagerDidConnect" 之后,它现在将变为 "didConnectToCastApplication" 函数,这不是第一次发生。这是一个错误还是我做错了什么?
我期望的是它将进入 "deviceManagerDidConnect",然后进入 "didConnectToCastApplication" 功能。之后所有的工作我想投一个 WKWebView ..我知道(还)不支持。所以我想投一个 URL 我给了一个文本字段。
您使用的是什么版本的产品?在什么操作系统上?
GoogleCastSDK-2.5.1-发布,OS X Yosemite 10.10.1
Xcode 版本 6.1.1 (6A2008a)
提前致谢,祝你有美好的一天,
节日
下面你可以找到我的代码..
// ==================== Google Cast ====================
// ==================== chooseDevice() ====================
func chooseDevice() {
if selectedDevice == nil {
let alertController = UIAlertController(title: "Choose device..", message: "", preferredStyle: .ActionSheet)
for device in deviceScanner.devices {
alertController.addAction(UIAlertAction(title: device.friendlyName, style: .Default, handler: { alertAction in
self.selectedDevice = device as GCKDevice
self.connectToDevice()
}))
}
let addCancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: { alertAction in
alertController.dismissViewControllerAnimated(true, completion: nil)
})
// Add action to the controller
alertController.addAction(addCancelAction)
// Finaly present the action controller
presentViewController(alertController, animated: true, completion: nil)
}
else {
updateButtonStates()
let mediaTitle = self.mediaInformation?.metadata.stringForKey(kGCKMetadataKeyTitle)
// mediaTitle.metadata.stringForKey(kGCKMetadataKeyTitle) //Silver Essence Castaway
// var mediaTitle = mediaInformation.metadata.stringForKey(kGCKMetadataKeyTitle)
NSLog("De waarde van kGCKMetadataKeyTitle is: \(kGCKMetadataKeyTitle)")
let alertController = UIAlertController(title: "Casting to: \(selectedDevice.friendlyName)", message: nil, preferredStyle: .ActionSheet)
let addDisconnectingAction = UIAlertAction(title: "Disconnect device", style: .Destructive, handler: { alertAction in
println("De waarde van mediaInformation is: \(mediaTitle)")
if mediaTitle != nil {
(mediaTitle != nil ? 1 : 0)
alertController.dismissViewControllerAnimated(true, completion: nil)
println("the else UIAlertController")
}
})
let addCancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: { alertAction in
println("De waarde van mediaInformation is: \(mediaTitle)")
if mediaTitle != nil {
(mediaTitle != nil ? 2 : 1)
alertController.dismissViewControllerAnimated(true, completion: nil)
println("else uiactionsheet")
}
})
// Add action to the controller
alertController.addAction(addDisconnectingAction)
alertController.addAction(addCancelAction)
// Finaly present the action controller
self.presentViewController(alertController, animated: true, completion: nil)
}
}
// ==================== updateStatsFromDevice() ====================
func updateStatsFromDevice() {
if mediaControlChannel != nil {
mediaInformation = mediaControlChannel.mediaStatus.mediaInformation
}
}
// ==================== isConnected() ====================
func isConnected() -> Bool {
return deviceManager.isConnected
}
// ==================== connectToDevice() ====================
func connectToDevice() {
if selectedDevice != nil {
// var info = NSBundle.mainBundle().infoDictionary!["CFBundleIdentifier"] as? NSString
// deviceManager = GCKDeviceManager(device: selectedDevice, clientPackageName: info)
deviceManager = GCKDeviceManager(device: selectedDevice, clientPackageName: "CFBundleIdentifier")
// NSLog("de waarde van info is \(info)")
NSLog("de waarde van selectedDevice is \(selectedDevice)")
deviceManager.delegate = self
deviceManager.connect()
}
}
// ==================== deviceDisconnected() ====================
func deviceDisconnected() {
NSLog("Device disconneted: \(selectedDevice.friendlyName)")
deviceManager = nil
selectedDevice = nil
mediaControlChannel = nil
textChannel = nil
}
// ==================== updateButtonStates() ====================
func updateButtonStates() {
if (deviceScanner.devices.count == 0) {
// Hide the cast button
chromecastButton.setImage(btnImage, forState: .Normal)
chromecastButton.hidden = true
}
if (deviceScanner.devices.count > 0) {
chromecastButton.setImage(btnImage, forState: .Normal)
chromecastButton.hidden = false
// Show cast button
if (deviceManager != nil) {
chromecastButton.setImage(btnImageSelected, forState: .Normal)
chromecastButton.hidden = false
}
}
}
// ==================== sendText ====================
@IBAction func sendText(sender: AnyObject) {
NSLog("Cast video")
if deviceManager == nil {
var alert = UIAlertController(title: "Not connected", message: "Please connect to Cast device", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
presentViewController(alert, animated: true, completion: nil)
return
}
// Define media metadata
var metaData = GCKMediaMetadata(metadataType: GCKMediaMetadataType.User)
metaData.objectForKey("CFBundleVersion")
metaData.setString("Bug Bunny!", forKey: kGCKMetadataKeyTitle)
metaData.setString("dit is allemaal maar was subtitles", forKey: kGCKMetadataKeySubtitle)
var url = NSURL(string: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/images/BigBuckBunny.jpg")
metaData.addImage(GCKImage(URL: url, width: 480, height: 360))
// var mediaInformation = GCKMediaInformation(contentID: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4", streamType: .None, contentType: "video/mp4", metadata: metaData as GCKMediaMetadata, streamDuration: 0, customData: nil)
mediaInformation = GCKMediaInformation(contentID: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4", streamType: GCKMediaStreamType.None, contentType: "video/mp4", metadata: metaData, streamDuration: 0, customData: nil)
NSLog("waarde van mediainformation is : \(mediaInformation)")
self.mediaControlChannel?.loadMedia(mediaInformation, autoplay: true, playPosition: 0)
// textChannel.sendTextMessage(textFieldUrl.text)
}
// MARK: GCKDeviceScannerListener
// ==================== deviceDidComeOnline() ====================
func deviceDidComeOnline(device: GCKDevice!) {
NSLog("device found! \(device.friendlyName)")
updateButtonStates()
}
// ==================== deviceDidGoOffline() ====================
func deviceDidGoOffline(device: GCKDevice!) {
NSLog("device did go offline \(device.friendlyName)")
updateButtonStates()
}
// MARK: UIActionSheetDelegate
// ==================== actionSheet() ====================
func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) {
if selectedDevice == nil {
if buttonIndex < deviceScanner.devices.count {
selectedDevice = deviceScanner.devices[buttonIndex] as GCKDevice
NSLog("Selecting device: \(selectedDevice.friendlyName)")
connectToDevice()
}
}
else {
if buttonIndex == 1 {
NSLog("Disconnecting device: \(selectedDevice.friendlyName)")
deviceManager.leaveApplication()
deviceManager.disconnect()
deviceDisconnected()
updateButtonStates()
}
else if buttonIndex == 0 {
// Join the existing session
}
}
}
// MARK: GCKDeviceManagerDelegate
// ==================== deviceManagerDidConnect() ====================
func deviceManagerDidConnect(deviceManager: GCKDeviceManager!) {
NSLog("Connected!")
updateButtonStates()
self.deviceManager.launchApplication(kReceiverAppID)
}
// ==================== didConnectToCastApplication() ====================
func deviceManager(deviceManager: GCKDeviceManager!, didConnectToCastApplication applicationMetadata: GCKApplicationMetadata!, sessionID: String!, launchedApplication: Bool) {
NSLog("application has launched")
// textChannel = HTCGTextChannel(namespace: "urn:x-cast:com.silver.essence.Silver")
// self.deviceManager.addChannel(textChannel)
mediaControlChannel = GCKMediaControlChannel()
mediaControlChannel.delegate = self
self.deviceManager.addChannel(mediaControlChannel)
mediaControlChannel.requestStatus()
}
// ==================== didFailToConnectToApplicationWithError() ====================
func deviceManager(deviceManager: GCKDeviceManager!, didFailToConnectToApplicationWithError error: NSError!) {
showError(error)
deviceDisconnected()
updateButtonStates()
}
// ==================== didFailToConnectWithError() ====================
func deviceManager(deviceManager: GCKDeviceManager!, didFailToConnectWithError error: NSError!) {
showError(error)
deviceDisconnected()
updateButtonStates()
}
// ==================== didDisconnectWithError() ====================
func deviceManager(deviceManager: GCKDeviceManager!, didDisconnectWithError error: NSError!) {
NSLog("Received notification that device disconnected")
if error != nil {
showError(error)
}
deviceDisconnected()
updateButtonStates()
}
// ==================== didReceiveApplicationMetadata() ====================
func deviceManager(deviceManager: GCKDeviceManager!, didReceiveApplicationMetadata metadata: GCKApplicationMetadata!) {
applicationMetadata = metadata
}
// ==================== showError() ====================
func showError(error: NSError) {
var alert = UIAlertController(title: "Something went wrong", message: error.description, preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
presentViewController(alert, animated: true, completion: nil)
}
// ==================== viewDidLoad() ====================
override func viewDidLoad() {
super.viewDidLoad()
self.loadNSUserDefaults()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "saveNSUserDefaults", name: "kSaveSwitchesStatesNotification", object: nil);
navigationItem.title = "Settings"
// ==================== Adding the Chromecast button ====================
// kReceiverAppID = kGCKMediaDefaultReceiverApplicationID
NSLog("de waarde van kReceiverAppID in viewDidLoad() is : \(kReceiverAppID)")
btnImage = UIImage(named: "icon-cast-identified")
btnImageSelected = UIImage(named: "icon-cast-connected")
chromecastButton = UIButton()
chromecastButton.setImage(UIImage(named: "icon-cast-identified"), forState: .Normal)
chromecastButton.frame = CGRectMake(0, 0, 45, 45)
chromecastButton.addTarget(self, action: "chooseDevice", forControlEvents: .TouchUpInside)
chromecastButton.hidden = true
var rightItem:UIBarButtonItem = UIBarButtonItem()
rightItem.customView = chromecastButton
self.navigationItem.leftBarButtonItem = rightItem
// ==================== Scan for Chromecast devices ====================
deviceScanner = GCKDeviceScanner()
filterCriteria = GCKFilterCriteria(forAvailableApplicationWithID: kReceiverAppID)
deviceScanner.filterCriteria = filterCriteria
deviceScanner.addListener(self)
deviceScanner.startScan()
}
终于找到问题了!它在接收器中。当您连接到网络中的投射设备时,接收器正在加载的 HTML 文件。确保您的 HTML 文件具有连接回应用程序的正确功能。
希望这会帮助遇到同样问题并且数周不考虑解决方案的人..
如果您不知道需要哪些函数,请查看 Google 提供给我们的示例。
https://github.com/googlecast/
为了创建这个,我使用了 Google Cast 参考 Github https://github.com/googlecast/CastHelloText-ios & https://github.com/googlecast/CastVideos-ios
然后,如果您下载了它,请查看我与 Google Cast 有关的代码块。如果您看到导致此错误发生的原因,请告诉我。因为老实说我不知道这是 Xcode 还是 Google Cast bug.. 或者是最常见的错误.. 人类
启动模拟器,它将在网络中寻找活动的 Chrome Cast 设备。如果找到,将出现投射按钮。当您按下投射按钮时,它会转到 chooseDevice()
功能,并会在您的网络中显示一个带有设备的 UIAlertController,然后您可以 select 您想要投射到的设备。
如果您点击一个设备,它将转到 connectToDevice()
功能并建立连接。
连接后,它应该转到下一个名为 "deviceManagerDidConnect" 的函数。所以我收到一条消息 "Connected".. 5 秒后我收到一条错误消息 "Error Domain=com.google.GCKError Code=2. Network connection timeout"。当我重建项目时,我得到了不同的结果.. 在 "deviceManagerDidConnect" 之后,它现在将变为 "didConnectToCastApplication" 函数,这不是第一次发生。这是一个错误还是我做错了什么?
我期望的是它将进入 "deviceManagerDidConnect",然后进入 "didConnectToCastApplication" 功能。之后所有的工作我想投一个 WKWebView ..我知道(还)不支持。所以我想投一个 URL 我给了一个文本字段。
您使用的是什么版本的产品?在什么操作系统上?
GoogleCastSDK-2.5.1-发布,OS X Yosemite 10.10.1
Xcode 版本 6.1.1 (6A2008a)
提前致谢,祝你有美好的一天,
节日
下面你可以找到我的代码..
// ==================== Google Cast ====================
// ==================== chooseDevice() ====================
func chooseDevice() {
if selectedDevice == nil {
let alertController = UIAlertController(title: "Choose device..", message: "", preferredStyle: .ActionSheet)
for device in deviceScanner.devices {
alertController.addAction(UIAlertAction(title: device.friendlyName, style: .Default, handler: { alertAction in
self.selectedDevice = device as GCKDevice
self.connectToDevice()
}))
}
let addCancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: { alertAction in
alertController.dismissViewControllerAnimated(true, completion: nil)
})
// Add action to the controller
alertController.addAction(addCancelAction)
// Finaly present the action controller
presentViewController(alertController, animated: true, completion: nil)
}
else {
updateButtonStates()
let mediaTitle = self.mediaInformation?.metadata.stringForKey(kGCKMetadataKeyTitle)
// mediaTitle.metadata.stringForKey(kGCKMetadataKeyTitle) //Silver Essence Castaway
// var mediaTitle = mediaInformation.metadata.stringForKey(kGCKMetadataKeyTitle)
NSLog("De waarde van kGCKMetadataKeyTitle is: \(kGCKMetadataKeyTitle)")
let alertController = UIAlertController(title: "Casting to: \(selectedDevice.friendlyName)", message: nil, preferredStyle: .ActionSheet)
let addDisconnectingAction = UIAlertAction(title: "Disconnect device", style: .Destructive, handler: { alertAction in
println("De waarde van mediaInformation is: \(mediaTitle)")
if mediaTitle != nil {
(mediaTitle != nil ? 1 : 0)
alertController.dismissViewControllerAnimated(true, completion: nil)
println("the else UIAlertController")
}
})
let addCancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: { alertAction in
println("De waarde van mediaInformation is: \(mediaTitle)")
if mediaTitle != nil {
(mediaTitle != nil ? 2 : 1)
alertController.dismissViewControllerAnimated(true, completion: nil)
println("else uiactionsheet")
}
})
// Add action to the controller
alertController.addAction(addDisconnectingAction)
alertController.addAction(addCancelAction)
// Finaly present the action controller
self.presentViewController(alertController, animated: true, completion: nil)
}
}
// ==================== updateStatsFromDevice() ====================
func updateStatsFromDevice() {
if mediaControlChannel != nil {
mediaInformation = mediaControlChannel.mediaStatus.mediaInformation
}
}
// ==================== isConnected() ====================
func isConnected() -> Bool {
return deviceManager.isConnected
}
// ==================== connectToDevice() ====================
func connectToDevice() {
if selectedDevice != nil {
// var info = NSBundle.mainBundle().infoDictionary!["CFBundleIdentifier"] as? NSString
// deviceManager = GCKDeviceManager(device: selectedDevice, clientPackageName: info)
deviceManager = GCKDeviceManager(device: selectedDevice, clientPackageName: "CFBundleIdentifier")
// NSLog("de waarde van info is \(info)")
NSLog("de waarde van selectedDevice is \(selectedDevice)")
deviceManager.delegate = self
deviceManager.connect()
}
}
// ==================== deviceDisconnected() ====================
func deviceDisconnected() {
NSLog("Device disconneted: \(selectedDevice.friendlyName)")
deviceManager = nil
selectedDevice = nil
mediaControlChannel = nil
textChannel = nil
}
// ==================== updateButtonStates() ====================
func updateButtonStates() {
if (deviceScanner.devices.count == 0) {
// Hide the cast button
chromecastButton.setImage(btnImage, forState: .Normal)
chromecastButton.hidden = true
}
if (deviceScanner.devices.count > 0) {
chromecastButton.setImage(btnImage, forState: .Normal)
chromecastButton.hidden = false
// Show cast button
if (deviceManager != nil) {
chromecastButton.setImage(btnImageSelected, forState: .Normal)
chromecastButton.hidden = false
}
}
}
// ==================== sendText ====================
@IBAction func sendText(sender: AnyObject) {
NSLog("Cast video")
if deviceManager == nil {
var alert = UIAlertController(title: "Not connected", message: "Please connect to Cast device", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
presentViewController(alert, animated: true, completion: nil)
return
}
// Define media metadata
var metaData = GCKMediaMetadata(metadataType: GCKMediaMetadataType.User)
metaData.objectForKey("CFBundleVersion")
metaData.setString("Bug Bunny!", forKey: kGCKMetadataKeyTitle)
metaData.setString("dit is allemaal maar was subtitles", forKey: kGCKMetadataKeySubtitle)
var url = NSURL(string: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/images/BigBuckBunny.jpg")
metaData.addImage(GCKImage(URL: url, width: 480, height: 360))
// var mediaInformation = GCKMediaInformation(contentID: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4", streamType: .None, contentType: "video/mp4", metadata: metaData as GCKMediaMetadata, streamDuration: 0, customData: nil)
mediaInformation = GCKMediaInformation(contentID: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4", streamType: GCKMediaStreamType.None, contentType: "video/mp4", metadata: metaData, streamDuration: 0, customData: nil)
NSLog("waarde van mediainformation is : \(mediaInformation)")
self.mediaControlChannel?.loadMedia(mediaInformation, autoplay: true, playPosition: 0)
// textChannel.sendTextMessage(textFieldUrl.text)
}
// MARK: GCKDeviceScannerListener
// ==================== deviceDidComeOnline() ====================
func deviceDidComeOnline(device: GCKDevice!) {
NSLog("device found! \(device.friendlyName)")
updateButtonStates()
}
// ==================== deviceDidGoOffline() ====================
func deviceDidGoOffline(device: GCKDevice!) {
NSLog("device did go offline \(device.friendlyName)")
updateButtonStates()
}
// MARK: UIActionSheetDelegate
// ==================== actionSheet() ====================
func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) {
if selectedDevice == nil {
if buttonIndex < deviceScanner.devices.count {
selectedDevice = deviceScanner.devices[buttonIndex] as GCKDevice
NSLog("Selecting device: \(selectedDevice.friendlyName)")
connectToDevice()
}
}
else {
if buttonIndex == 1 {
NSLog("Disconnecting device: \(selectedDevice.friendlyName)")
deviceManager.leaveApplication()
deviceManager.disconnect()
deviceDisconnected()
updateButtonStates()
}
else if buttonIndex == 0 {
// Join the existing session
}
}
}
// MARK: GCKDeviceManagerDelegate
// ==================== deviceManagerDidConnect() ====================
func deviceManagerDidConnect(deviceManager: GCKDeviceManager!) {
NSLog("Connected!")
updateButtonStates()
self.deviceManager.launchApplication(kReceiverAppID)
}
// ==================== didConnectToCastApplication() ====================
func deviceManager(deviceManager: GCKDeviceManager!, didConnectToCastApplication applicationMetadata: GCKApplicationMetadata!, sessionID: String!, launchedApplication: Bool) {
NSLog("application has launched")
// textChannel = HTCGTextChannel(namespace: "urn:x-cast:com.silver.essence.Silver")
// self.deviceManager.addChannel(textChannel)
mediaControlChannel = GCKMediaControlChannel()
mediaControlChannel.delegate = self
self.deviceManager.addChannel(mediaControlChannel)
mediaControlChannel.requestStatus()
}
// ==================== didFailToConnectToApplicationWithError() ====================
func deviceManager(deviceManager: GCKDeviceManager!, didFailToConnectToApplicationWithError error: NSError!) {
showError(error)
deviceDisconnected()
updateButtonStates()
}
// ==================== didFailToConnectWithError() ====================
func deviceManager(deviceManager: GCKDeviceManager!, didFailToConnectWithError error: NSError!) {
showError(error)
deviceDisconnected()
updateButtonStates()
}
// ==================== didDisconnectWithError() ====================
func deviceManager(deviceManager: GCKDeviceManager!, didDisconnectWithError error: NSError!) {
NSLog("Received notification that device disconnected")
if error != nil {
showError(error)
}
deviceDisconnected()
updateButtonStates()
}
// ==================== didReceiveApplicationMetadata() ====================
func deviceManager(deviceManager: GCKDeviceManager!, didReceiveApplicationMetadata metadata: GCKApplicationMetadata!) {
applicationMetadata = metadata
}
// ==================== showError() ====================
func showError(error: NSError) {
var alert = UIAlertController(title: "Something went wrong", message: error.description, preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
presentViewController(alert, animated: true, completion: nil)
}
// ==================== viewDidLoad() ====================
override func viewDidLoad() {
super.viewDidLoad()
self.loadNSUserDefaults()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "saveNSUserDefaults", name: "kSaveSwitchesStatesNotification", object: nil);
navigationItem.title = "Settings"
// ==================== Adding the Chromecast button ====================
// kReceiverAppID = kGCKMediaDefaultReceiverApplicationID
NSLog("de waarde van kReceiverAppID in viewDidLoad() is : \(kReceiverAppID)")
btnImage = UIImage(named: "icon-cast-identified")
btnImageSelected = UIImage(named: "icon-cast-connected")
chromecastButton = UIButton()
chromecastButton.setImage(UIImage(named: "icon-cast-identified"), forState: .Normal)
chromecastButton.frame = CGRectMake(0, 0, 45, 45)
chromecastButton.addTarget(self, action: "chooseDevice", forControlEvents: .TouchUpInside)
chromecastButton.hidden = true
var rightItem:UIBarButtonItem = UIBarButtonItem()
rightItem.customView = chromecastButton
self.navigationItem.leftBarButtonItem = rightItem
// ==================== Scan for Chromecast devices ====================
deviceScanner = GCKDeviceScanner()
filterCriteria = GCKFilterCriteria(forAvailableApplicationWithID: kReceiverAppID)
deviceScanner.filterCriteria = filterCriteria
deviceScanner.addListener(self)
deviceScanner.startScan()
}
终于找到问题了!它在接收器中。当您连接到网络中的投射设备时,接收器正在加载的 HTML 文件。确保您的 HTML 文件具有连接回应用程序的正确功能。 希望这会帮助遇到同样问题并且数周不考虑解决方案的人..
如果您不知道需要哪些函数,请查看 Google 提供给我们的示例。 https://github.com/googlecast/