我在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意味着它正在缓冲。谷歌逻辑。