【问题标题】:Video is not plying on GMSMarker视频未在 GMSMarker 上播放
【发布时间】:2017-09-02 09:39:03
【问题描述】:

我正在 GMSMarker pin 上播放视频,下面是我的代码。显示和隐藏/显示引脚视图,一切正常。除了视频不能播放。我正在使用带有 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];
}

请帮我解决这个问题。为什么视频没有播放。

提前致谢。

【问题讨论】:

  • 您可以将您的代码发布为 Code 吗?
  • @ReinierMelian 我已经更新了我的代码,请你检查一下我到底在哪里做错了。
  • 如果提供的答案解决了您的问题,请告诉我,如果没有,我会尽力帮助您,最好的问候
  • 检查我的编辑,我在模拟器上看到了视频,但它在真实设备上不起作用。但即使它有效,用户也无法播放/支付视频,因为它不是播放器,它是图像(播放器的屏幕截图)

标签: ios objective-c google-maps video gmsmapview


【解决方案1】:

通常,信息窗口在显示后不会重新生成(它作为图像添加)。要显示视频帧,它需要在视频播放时重新生成。这意味着窗口需要自动刷新。为此,您需要为 GMSMarker 设置一个属性。行如下,

    _london.tracksInfoWindowChanges = YES;

所以你的完整代码是

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

Google 文档是 https://developers.google.com/maps/documentation/ios-sdk/marker#set_an_info_window_to_refresh_automatically

【讨论】:

    【解决方案2】:

    我认为您的代码不起作用的原因是 iOS 版 Google 地图将自定义信息视图呈现为图像。我不确定,但我相信,因为我也尝试过动画,但它也不起作用。当我使用动画时,我首先看到动画的初始状态,当我再次打开标记信息窗口时,我看到最终状态,没有动画。此外,当我在自定义信息窗口视图中添加文本字段时,我无法单击该文本字段。当我像你一样尝试播放视频时,我看到一个空白窗口,好像播放器将要启动并听到声音,但视频永远不会启动。

    我在 Stackoverflow 上的许多问题上都找到了这个注释(他们说它来自 Google Docs),但我在 Google Docs 上没有看到它:

    注意:信息窗口每次在地图上显示时都会呈现为图像。这意味着在其处于活动状态时对其属性的任何更改都不会立即可见。信息窗口的内容将在下次显示时刷新。

    来源:Google Maps Showing speech bubble in marker info window iOS

    也许您可以尝试使用 trackingInfoWindowChanges = YES:

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

    来源:How to force refresh contents of the markerInfoWindow in Google Maps iOS SDK

    我知道您已将其设置为 viewDidLoad 方法,但也许将其设置为
    - (UIView *)mapView:(GMSMapView *)mapView markerInfoWindow:(GMSMarker *)marker 方法也许会奏效,但我不相信。很多人说将markerInfoWindow设置为YES可以,但是我试过了,还是不行。

    我尝试使用 iOS 地图和视频播放没有问题。我从来没有遇到过使用 Apple Maps 的问题。所以,我确信谷歌地图不是解决这个问题的好方法。也许您可以通过一些技巧来修复它,但是我已经浪费了几个小时来寻找解决方案,但没有结果。例如,当用户在地图上移动手指或放大/缩小或其他解决方案时,也许可以将 UIView 移动到地图上方,但我更喜欢系统解决方案而不是 hacks。在这种情况下,我没有看到系统解决方案,如果我花更多时间研究一下,也许我会找到它。如果我是你,我不会为此使用 Google 地图。

    编辑:我刚刚看到我的解决方案适用于模拟器。在真实设备(iPhone 7+)上它不起作用,即我看到播放器控件正在动画,我看到声音,但我没有看到视频。但即使它像在模拟器上一样在真实设备上运行,用户也无法播放或暂停视频,因为他只能看到定期更新的图像。

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 1970-01-01
      • 2016-05-30
      • 2012-05-30
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多