ios - 使用 GCKMediaQueueItem 在 Chromecast 上排队多个图像

标签 ios objective-c iphone chromecast google-cast

我想将多个图像发送到 Chromecast 并将它们用作屏幕保护程序。
我可以使用 [self.mediaControlChannel loadMedia:mediaInformation]; 一个一个地发送它们,但是当我想使用排队功能时,我开始遇到一些问题。

首先,我尝试使用 queueLoadItems: 加载多个 GCKMediaQueueItem:

GCKMediaInformation *mediaInformation = [[GCKMediaInformation alloc] initWithContentID:[url absoluteString]
                                                                            streamType:GCKMediaStreamTypeNone
                                                                           contentType:@"image/jpeg"
                                                                              metadata:nil
                                                                        streamDuration:5
                                                                            customData:nil];

GCKMediaQueueItem *mediaQueue =  [[GCKMediaQueueItem alloc] initWithMediaInformation:mediaInformation
                                                                            autoplay:true
                                                                           startTime:startTime
                                                                         preloadTime:3.0f
                                                                      activeTrackIDs:nil
                                                                          customData:nil];


[mediaArray addObject:mediaQueue];



NSInteger requestId = [self.mediaControlChannel queueLoadItems:mediaArray startIndex:0 repeatMode:GCKMediaRepeatModeAllAndShuffle ];
if (requestId == kGCKInvalidRequestID) {
    NSLog(@"WARN queueLoadItems: the message could not be sent");
} else {
    NSLog(@"queueLoadItems: OK");  
}

但没有成功,即使 - (void)mediaControlChannel:(GCKMediaControlChannel *)mediaControlChannel didCompleteLoadWithSessionID:(NSInteger)sessionID 被调用,并且第一个 GCKMediaQueueItem 的图像在电视上可见。第二个 GCKMediaQueueItem 从未出现。

我尝试使用 [self.mediaControlChannel queueNextItem]; 强制移动到下一个项目,但也没有成功。 如果我使用 [[self.mediaControlChannel mediaStatus] queueItemCount] 检查队列中有多少项目,我得到“0”,这意味着队列是空的。

如果我设置 startIndex:1,例如,第二个项目会显示在电视上。所以看起来所有项目都已加载。

然后我尝试使用 [self.mediaControlChannel queueInsertItem:mediaQueue beforeItemWithID:kGCKMediaQueueInvalidItemID];我又遇到了同样的问题:只有队列的第一个图像是可见的,我有 0 个项目我的 queueItemCount:

如果我启用记录器,我会收到此消息:

-[GCKMediaControlChannel mediaSessionID]  Calling a method that requires a media status with no media status, ignoring; 
make sure that media is loaded, the media channel has received a status, and that this method is not being called while the device manager is attempting to reconnect

所以我尝试在调用 didCompleteLoadWithSessionID 之后插入项目。消息消失了,但我的 queueItemCount:

中仍然没有任何项目

如果我继续查看日志,我会发现这些行:

-[GCKMediaControlChannel didReceiveTextMessage:]  message received: {"requestId":7,"type":"INVALID_REQUEST","reason":"INVALID_MEDIA_SESSION_ID"}
-[GCKMediaControlChannel didReceiveTextMessage:]  Received unexpected error: Invalid Request.

多亏了这个 question 我知道我可以使用自定义接收器使用 loadMedia: 和自定义接收器将多个项目排入队列,但看起来我正在尝试做的事情可以通过默认接收器和最后一个 SDK update (2.7)。

任何帮助将不胜感激。

最佳答案

默认/样式化的接收器处理音频或视频项的队列,但不处理图像;这是因为接收器 SDK 的排队功能是围绕这两种媒体类型而不是图像构建的。对于音频/视频项目,有一个“持续时间”,它们开始播放并到达终点,那时,SDK 移动到下一个项目(它基本上通过监听 MediaElement 事件来了解项目的结尾) .对于图像和图像标签,您没有这些东西,因此 SDK 不会尝试做任何事情。因此,简而言之,您需要编写自己的自定义接收器,并且在这样做时,即使在发送端,您也可能无法从排队 API 中获益太多;您需要将带有图像网址(以及您需要的其他信息)的“消息”(在您自己的自定义命名空间上)发送到您的接收器,然后在您的自定义接收器中获取图像数组并将它们推送到图像标签一个接一个,或类似的东西。

关于ios - 使用 GCKMediaQueueItem 在 Chromecast 上排队多个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30915484/

相关文章:

ios - 当我使用自定义图标时,为什么谷歌地图 ios 的信息窗口不显示?

ios - 在 iOS 6 及更高版本中手动调用状态保存

ios - 开/关触觉反馈开关(Swift)

ios - 正确获取可转换的核心数据元素

iphone - 在iOS 7中,layoutSubviews方法在UIButton子类上不断被调用

iphone - document目录在objective c中存放数据好还是缓存好?

iOS Core Graphics 如何删除绘图

ios - 为什么允许播放 YouTube 视频,而 iOS 禁止播放 flash 内容?

ios - __weak 是必需的吗?在这种情况下它有什么用?会不会漏?

iphone - 在 iPhone 上将流媒体内容写入磁盘的理想 block 大小