¿Google cromecast iOS SDK admite controles de pantalla de locking?

He intentado implementar controles de pantalla de locking para la aplicación Google Video streaming de Chromecast con el último marco de GoogleCast para iOS (2.1.0).

Corregí el ejemplo de la aplicación Chromecast: https://github.com/googlecast/CastVideos-ios. Agregué la fila UIBackgroundModes a Info.plist. introduzca la descripción de la imagen aquí Se agregó el marco de MediaPlayer. Y agregó el siguiente código a 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 shanetworkingApplication] 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; } 

Pero no veo ningún control sobre la pantalla de locking durante la transmisión.

De estas fonts, veo que no fue posible mostrar ningún control en la pantalla de locking de la versión anterior de Chromecast iOS SDK (2.0), ya que cierra los sockets al modo de background.

La reproducción de videos en segundo plano de ChromeCast es compatible con iOS

Google Chromecast SDK TearDown en segundo plano

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

¿Sigue siendo el mismo para Cast SDK 2.1.0? ¿O estoy haciendo algo mal y en realidad es posible mostrar controles en la pantalla de locking durante el cromado? Gracias.

El iOS Cast SDK actual desconecta el socket cuando bloquea su pantalla, por lo que actualmente no puede implementar eso.

Bueno, espero que ayude a alguien que tenga un problema similar al que tenía. 🙂

Después de muchas investigaciones terminé usando el indicador ignoreAppStateNotifications (que se citó en la respuesta aceptada) al conectarse a un dispositivo de Google Cast, como este

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

Para que los controles de la pantalla de locking funcionen con google cast (después de activar "Audio, AirPlay y Picture in Picture" de los modos de background en las capacidades del proyecto):

  • Estoy usando dentro de AppDelegate - (void)remoteControlReceivedWithEvent:(UIEvent *)event que se - (void)remoteControlReceivedWithEvent:(UIEvent *)event cada vez que ocurre una acción (reproducir, pausar, siguiente …) en los controles de la pantalla de locking.
  • Dentro de este método tengo un interruptor para que pueda saber qué tipo de UIEventTypeRemoteControl se recibió:
    • si se trataba de UIEventSubtypeRemoteControlPlay , UIEventSubtypeRemoteControlPlay si Google Cast está conectado y le digo al receptor que reproduzca self.mediaControlChannel.play y lo mismo para events de pausa.
    • Para los events siguientes y anteriores, dependerá de cómo esté configurada su integración con google cast, de cómo está emitiendo sus medios, en mi caso, cada vez que recibí este tipo de acción, emití una canción diferente (anterior o siguiente de la list actual de canciones).

He desarrollado una solución para presentar los controles del jugador en la pantalla de locking. Estoy usando algunos hacks para funcionar, como method_exchangeImplementations y un sonido de silenciamiento para reproducir y simular el reproductor.

Hasta ahora funciona bien, pero probablemente aún mejoras.

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