YTPlayerView youtube ios播放器助手暂停不起作用



我在Youtube Youtube ios播放器帮助程序库中遇到问题。我可以将视频加载到播放器中并播放,但如果我点击暂停,视频会停止几秒钟,然后重新开始播放。

启动视频的UIViewController代码非常简单:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.player = [[YTPlayerView alloc] initWithFrame:CGRectMake(X, Y, WIDTH, HEIGHT)];
    self.player.delegate = self;
    [self.view addSubview:self.player];
    [self.player loadWithVideoId:@"bQCjOm4p5jM"];
}

我用NSLog检测了didChangeToState委托方法,如下所示:

- (void)playerView:(YTPlayerView *)playerView didChangeToState:(YTPlayerState)state {
    switch (state) {
        case kYTPlayerStatePlaying:
            NSLog(@"Started playback");
            break;
        case kYTPlayerStatePaused:
            NSLog(@"Paused playback");
            break;
        default:
            NSLog(@"didChangeToState %d", state);
            break;
    }
}

在Xcode日志中,当我点击"播放"开始视频播放时,我看到:

didChangeToState 4

值4似乎未在YTPlayerView.m中定义。当视频真正开始播放时,我看到了预期的Started playback日志消息。

当我点击"暂停"时,我在日志中看不到任何内容(没有触发didChangeToState事件——根据YTPlayerView文档,我希望事件是kYTPlayerStatePaused)。然而,几秒钟后,视频再次开始播放,然后我看到两条连续的Started playback日志消息(kYTPlayerStatePlaying事件)。每次我按下"暂停"尝试暂停视频时,它都会暂停几秒钟(没有kYTPlayerStatePaused事件),但随后它又开始播放,我会看到Started playback日志消息。

还有人看到这个吗?有人知道从这里去哪里吗?这是Xcode 6.2,构建目标是iOS 8.0。

我在Github问题跟踪器中为代码找到了一个解决方案。对不起,我想我在之前的研究中错过了。

此处介绍了修复方法:https://github.com/youtube/youtube-ios-player-helper/issues/86

YTPlayerView-iframe-player.html中,删除或注释代码下面的内容。

window.setInterval(forcePlay, 5000);

还有另一个建议的修复程序可以完全取代YTPlayerView-iframe-player.html文件,但以上似乎对我有效。我担心谷歌自己的基本功能代码已经从根本上被破坏了。

NSString static *const kYTPlayerStateUnstartedCode = @"-1";
NSString static *const kYTPlayerStateEndedCode = @"0";
NSString static *const kYTPlayerStatePlayingCode = @"1";
NSString static *const kYTPlayerStatePausedCode = @"2";
NSString static *const kYTPlayerStateBufferingCode = @"3";
NSString static *const kYTPlayerStateCuedCode = @"5";
NSString static *const kYTPlayerStateUnknownCode = @"unknown";

被映射到

typedef NS_ENUM(NSInteger, YTPlayerState) {
    kYTPlayerStateUnstarted,
    kYTPlayerStateEnded,
    kYTPlayerStatePlaying,
    kYTPlayerStatePaused,
    kYTPlayerStateBuffering,
    kYTPlayerStateCued,
    kYTPlayerStateUnknown
};

丢失默认值和值类型。以kYTPlayerStateUnstarted==0开头didChangeToState4意味着它正在缓冲。谷歌逻辑。

最新更新