5

我尝试使用适用于 iOS 的最新 GoogleCast 框架(2.1.0)为 google Chromecast 视频流应用程序实现锁屏控制。

我已经更正了示例 Chromecast 应用程序 - https://github.com/googlecast/CastVideos-ios 已将 UIBackgroundModes 行添加到 Info.plist 中 在此处输入图像描述 添加了 MediaPlayer 框架。并将以下代码添加到 ChromecastDeviceController.m

#import <MediaPlayer/MPNowPlayingInfoCenter.h>
#import <MediaPlayer/MPMediaItem.h>
.......

- (BOOL)loadMedia:(NSURL *)url
     thumbnailURL:(NSURL *)thumbnailURL
            title:(NSString *)title
         subtitle:(NSString *)subtitle
         mimeType:(NSString *)mimeType
        startTime:(NSTimeInterval)startTime
         autoPlay:(BOOL)autoPlay {

    .....

    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

    Class playingInfoCenter = NSClassFromString(@"MPNowPlayingInfoCenter");

    if (playingInfoCenter) {

        NSDictionary *songInfo = [NSDictionary dictionaryWithObjectsAndKeys:
                                  @"Test artist", MPMediaItemPropertyArtist,
                                  @"Test title", MPMediaItemPropertyTitle,
                                  @"Test Album", MPMediaItemPropertyAlbumTitle,
                                  nil];
        [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:songInfo];
    }

  return YES;
}

但我在广播期间在锁定屏幕上看不到任何控件。

从这些来源中,我看到无法在以前版本的 Chromecast iOS SDK (2.0) 的锁定屏幕上显示任何控件,因为它关闭了进入后台模式的套接字。

ChromeCast 后台视频播放支持 iOS

Google Chromecast SDK TearDown 在后台

https://code.google.com/p/google-cast-sdk/issues/detail?id=138

Cast SDK 2.1.0 还是一样吗?或者我做错了什么,实际上可以在 chromecasting 期间在锁定屏幕上显示控件?谢谢。

4

3 回答 3

5

当前的 iOS Cast SDK 在您锁定屏幕时会断开套接字,因此您目前无法实现该功能。

于 2014-04-02T23:14:00.063 回答
4

好吧,我希望它能帮助和我有类似问题的人。:)

ignoreAppStateNotifications经过大量研究后,我在连接到谷歌投射设备时最终使用了标志(在接受的答案中引用),就像这样

self.deviceManager =
    [[GCKDeviceManager alloc] initWithDevice:_selectedDevice
                           clientPackageName:[NSBundle mainBundle].bundleIdentifier
                            ignoreAppStateNotifications:YES];

为了使锁屏控件与 google cast 一起工作(在项目功能上激活背景模式的“音频、AirPlay 和画中画”后):

  • 我在 AppDelegate 内部使用- (void)remoteControlReceivedWithEvent:(UIEvent *)event,每次在锁定屏幕控件上发生动作(播放、暂停、下一步...)时都会调用它。
  • 在这个方法中,我有一个开关,所以我可以知道UIEventTypeRemoteControl收到了什么样的:
    • 如果是UIEventSubtypeRemoteControlPlay,我检查 google cast 是否已连接,并告诉接收器播放self.mediaControlChannel.play,暂停事件也是如此。
    • 对于下一个和以前的事件,这取决于您如何设置与 google cast 的集成,您如何投射媒体,就我而言,每次我收到这种动作时,我都会投射一首不同的歌曲(上一个或下一个当前的歌曲列表)。
于 2016-03-09T13:55:23.770 回答
3

我开发了一种解决方案来在锁定屏幕中显示播放器控件。我正在使用一些技巧来工作,例如 method_exchangeImplementations 和静音来播放和模拟播放器。

到目前为止,它工作正常,但可能仍有改进。

看看https://github.com/peantunes/google-cast-ios-lock-screen

于 2017-07-10T17:14:04.060 回答