使用 GCKMediaQueueItem 在 Chromecast 上排队多个图像
Queue mutiliples image on Chromecast with GCKMediaQueueItem
我想将多个图像发送到 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];
,但我又遇到了同样的问题:只有队列的第一张图片可见,我的 queueItemCount:
.
中有 0 个项目
如果我启用记录器,我会收到此消息:
-[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 I know that I can use a custom receiver to enqueue multiples items using loadMedia:
and a custom receiver, but it looks like what I am trying to do can be possible with the default receiver and the last SDK update (2.7).
任何帮助将不胜感激。
如果您仍在寻找解决方案,请注意,但对我来说这很有效
NSMutableArray *mediaArray = [NSMutableArray array];
[mediaArray addObject:mediaQueue];
因为 NSArray 不是 "mutable" class,这意味着它不能在创建后进行修改。
default/styled 接收器处理音频或视频项的队列,但不处理图像;这是因为接收器 SDK 的排队功能是围绕这两种媒体类型而不是图像构建的。有一个 audio/video 项目,有一个 "duration" ,他们开始播放并到达终点,那时,SDK 移动到下一个项目(它基本上通过听来了解项目的结尾MediaElement 事件)。对于图像和图像标签,您没有这些东西,因此 SDK 不会尝试做任何事情。因此,简而言之,您需要编写自己的自定义接收器,并且在这样做时,即使在发送端,您也可能无法从排队 API 中获益太多;您需要将 "messages" (在您自己的自定义名称空间上)与图像的 URL(以及您需要的其他信息)一起发送到您的接收器,然后在您的自定义接收器中获取图像数组并将它们推送到一张一张的图片标签,或者类似的东西。
我想将多个图像发送到 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];
,但我又遇到了同样的问题:只有队列的第一张图片可见,我的 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 I know that I can use a custom receiver to enqueue multiples items using loadMedia:
and a custom receiver, but it looks like what I am trying to do can be possible with the default receiver and the last SDK update (2.7).
任何帮助将不胜感激。
如果您仍在寻找解决方案,请注意,但对我来说这很有效
NSMutableArray *mediaArray = [NSMutableArray array];
[mediaArray addObject:mediaQueue];
因为 NSArray 不是 "mutable" class,这意味着它不能在创建后进行修改。
default/styled 接收器处理音频或视频项的队列,但不处理图像;这是因为接收器 SDK 的排队功能是围绕这两种媒体类型而不是图像构建的。有一个 audio/video 项目,有一个 "duration" ,他们开始播放并到达终点,那时,SDK 移动到下一个项目(它基本上通过听来了解项目的结尾MediaElement 事件)。对于图像和图像标签,您没有这些东西,因此 SDK 不会尝试做任何事情。因此,简而言之,您需要编写自己的自定义接收器,并且在这样做时,即使在发送端,您也可能无法从排队 API 中获益太多;您需要将 "messages" (在您自己的自定义名称空间上)与图像的 URL(以及您需要的其他信息)一起发送到您的接收器,然后在您的自定义接收器中获取图像数组并将它们推送到一张一张的图片标签,或者类似的东西。