El video no está funcionando en GMSMarker

Estoy trabajando en reproducir video en el pin GMSMarker y debajo está mi código. La pantalla y ocultar / mostrar vista de pines, todo funciona bien. Excepto que no se reproduce el video. Estoy usando storyboard con pinview.

@interface MapViewController () <GMSMapViewDelegate> @property (strong, nonatomic) IBOutlet GMSMapView *mapView; @property (strong, nonatomic) IBOutlet UIView *pinView; @property (strong, nonatomic) GMSMarker *london; @property (strong, nonatomic) AVPlayer *player; @property (strong, nonatomic) AVPlayerLayer *playerLayer; @end @implementation MapViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:51.5 longitude:-0.127 zoom:18]; self.mapView.camera = camera; self.mapView.delegate = self; CLLocationCoordinate2D position = CLLocationCoordinate2DMake(51.5, -0.127); _london = [GMSMarker markerWithPosition:position]; _london.title = @"London"; _london.tracksViewChanges = YES; _london.map = self.mapView; [self setUpVideoPlayer]; } - (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker { [self.player play]; return self.pinView; } -(void)setUpVideoPlayer{ NSString *videoFilePath = [[NSBundle mainBundle] pathForResource:@"SampleVideo" ofType:@"mp4"]; AVAsset *avAsset = [AVAsset assetWithURL:[NSURL fileURLWithPath:videoFilePath]]; AVPlayerItem *avPlayerItem =[[AVPlayerItem alloc]initWithAsset:avAsset]; self.player = [[AVPlayer alloc]initWithPlayerItem:avPlayerItem]; self.playerLayer =[AVPlayerLayer playerLayerWithPlayer:self.player]; [self.playerLayer setFrame:self.pinView.frame]; [self.pinView.layer addSublayer:self.playerLayer]; [self.player seekToTime:kCMTimeZero]; } 

introduzca la descripción de la imagen aquí

introduzca la descripción de la imagen aquí

Por favor, ayúdame a solucionar el problema. Por qué el video no se reproduce.

Gracias por adelantado.

Normalmente, la window de información no se regenerará después de mostrarla (se agrega como una image). Para mostrar los frameworks de video, necesita regenerarse cuando se reproduce el video. Significa que la window debe actualizarse automáticamente. Para hacerlo, debe establecer una propiedad para su GMSMarker. Línea de la siguiente manera

  _london.tracksInfoWindowChanges = YES; 

Entonces su código completo es

 CLLocationCoordinate2D position = CLLocationCoordinate2DMake(51.5, -0.127); _london = [GMSMarker markerWithPosition:position]; _london.title = @"London"; _london.tracksViewChanges = YES; _london.tracksInfoWindowChanges = YES; _london.map = self.mapView; 

La documentation de Google es https://developers.google.com/maps/documentation/ios-sdk/marker#set_an_info_window_to_refresh_automatically.

Creo que la razón por la cual su código no funciona es el hecho de que Google Maps para iOS muestra Vistas de información personalizada como imágenes . No estoy seguro, pero creo, ya que también he probado con animaciones y también no funciona. Cuando uso la animation, primero veo el estado inicial de la animation y cuando abro otra vez la window de información del marcador, veo el estado final, sin animation. Además, cuando agrego un campo de text en la vista de la window de información personalizada, no puedo hacer clic en ese campo de text. Cuando bash con el video como tú, veo una window en blanco como si el reproductor comenzara y escuchara el sonido, pero el video nunca comienza.

He encontrado esta nota sobre muchas preguntas sobre Stackoverflow (dicen que es de Google Docs), pero no la veo en Google Docs:

Nota: La window de información se representa como una image cada vez que se muestra en el map. Esto significa que cualquier cambio en sus properties, mientras esté activo, no será visible inmediatamente. El contenido de la window de información se actualizará la próxima vez que se muestre.

Fuente: Google Maps que muestra la burbuja del discurso en la window de información del marcador iOS

Tal vez puedas probar con tracksInfoWindowChanges = YES:

 - (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker { marker.tracksInfoWindowChanges = YES; self.player play]; return self.pinView; } 

Fuente: Cómo forzar la actualización del contenido de markerInfoWindow en Google Maps iOS SDK

Sé que lo ha configurado en el método viewDidLoad , pero quizás configurarlo en un
- (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker método - (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker tal vez funcione, pero no creo. Mucha gente dice que configurar markerInfoWindow en YES funciona, pero lo he intentado y no funciona.

Intenté usar iOS Maps y el video se reproduce sin problemas. Nunca he tenido un problema con el uso de Apple Maps. Por lo tanto, estoy seguro de que Google Maps no es una buena solución para este problema. Tal vez podría solucionarlo mediante un truco, pero he perdido varias horas para encontrar una solución, sin resultados. Tal vez se pueda hacer, por ejemplo, para mover un UIView por encima del map cuando el usuario mueve su dedo sobre el map o acerca o aleja el zoom, o alguna otra solución, pero prefiero las soluciones del sistema por encima de los hacks. En este caso, no veo la solución del sistema, tal vez lo encontraría si dedicara más time a la investigación. Si fuera tú, no utilizaría Google Maps para esto.

Editar : Acabo de ver que mi solución funciona en un simulador. En un dispositivo real (iPhone 7+) no funciona, es decir, veo que los controles del reproductor están animando, veo el sonido, pero no veo el video. Pero incluso si funciona en un dispositivo real como funciona en un simulador, el usuario no puede reproducir o detener el video, porque solo ve imágenes que se actualizan periódicamente.