Поддържа ли 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? Или правя нещо нередно и всъщност е възможно да се показват контроли на заключения екран по време на chromecasting? Благодаря.


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