Поддерживает ли google chromecast iOS SDK элементы управления экраном блокировки?

Я попытался реализовать элементы управления экраном блокировки для приложения потоковой передачи видео Google Chromecast с последней версией GoogleCast для iOS (2.1.0).

Я исправил пример приложения 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? Или я что-то не так делаю и вообще возможно отображение элементов управления на экране блокировки во время хромкастинга? Спасибо.


person Dmitry Khryukin    schedule 02.04.2014    source источник


Ответы (3)


Текущий iOS Cast SDK отключает сокет, когда вы блокируете экран, поэтому в настоящее время вы не можете реализовать это.

person Ali Naddaf    schedule 02.04.2014
comment
Спасибо Али. надеюсь, что это будет поддерживаться в будущих версиях. - person Dmitry Khryukin; 03.04.2014
comment
Али, если вы работаете в этой команде (как я вижу в вашем профиле), не могли бы вы попросить их исправить этот раздел - developers.google.com/cast/docs/ (Экран блокировки отправителя ... необязательно для iOS.) если невозможно реализовать эту функцию, это следует отметить там, иначе это выглядит запутанно. Благодарность! - person Dmitry Khryukin; 03.04.2014
comment
@AliNaddaf, @dmitry-khryukin Ребят, а по этому пункту что-то изменилось за два года? Я вижу, что GCKDeviceManager может работать в фоновом режиме (с помощью флага ignoreAppStateNotifications), но я все еще не могу заставить элементы управления экрана блокировки работать с chromecast - person Alex Peda; 08.02.2016
comment
@AlexPeda извините, с тех пор я не прикасаюсь к chrmoecast - person Dmitry Khryukin; 09.02.2016
comment
@all Можно ли зеркально отображать содержимое просмотра, а не воспроизводить аудио / видео и делиться им с внешним дисплеем? - person Jamshed Alam; 09.09.2020

Ну, я надеюсь, что это поможет кому-то, у кого есть такая же проблема, как у меня. :)

После долгих исследований я использовал флаг ignoreAppStateNotifications (который был процитирован в принятом ответе) при подключении к устройству Google Cast, например

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

Чтобы элементы управления экраном блокировки работали с Google Cast (после активации «Аудио, AirPlay и Картинка в картинке» фоновых режимов в возможностях проекта):

  • Я использую внутри AppDelegate - (void)remoteControlReceivedWithEvent:(UIEvent *)event, который вызывается каждый раз, когда действие (воспроизведение, пауза, следующий...) происходит на элементах управления экрана блокировки.
  • Inside this method I have a switch so I can know what kind of UIEventTypeRemoteControl was received:
    • if it was UIEventSubtypeRemoteControlPlay, I check if google cast is connected and I tell the receiver to play self.mediaControlChannel.play and the same for pause events.
    • Для следующих и предыдущих событий это будет зависеть от того, как настроена ваша интеграция с Google Cast, как вы транслируете свои медиафайлы, в моем случае каждый раз, когда я получаю такое действие, я запускаю другую песню (предыдущую или следующую из текущий список песен).
person Ana Paula    schedule 09.03.2016
comment
Можете ли вы сказать мне, как вам удалось отобразить элементы управления экрана блокировки во время воспроизведения чего-то на chrome cast, потому что я застрял на этом конкретном этапе моей реализации? - person Georgi Boyadzhiev; 09.05.2017
comment
Можно ли зеркально отображать содержимое просмотра, а не воспроизводить аудио / видео и делиться им с внешним дисплеем? - person Jamshed Alam; 09.09.2020

Я разработал решение для представления элементов управления плеером на экране блокировки. Я использую некоторые хаки для работы, такие как method_exchangeImplementations и отключение звука, чтобы воспроизводить и издеваться над игроком.

Пока работает нормально, но наверное еще улучшения.

Взгляните на https://github.com/peantunes/google-cast-ios-lock-screen

person Pedro Antunes    schedule 10.07.2017