У меня есть эти требования к видео Play YouTube в моем приложении:Youtube API в IOS 7 и IOS 8
- Автоигру вид контейнера контроллер появится
- Detect, когда видео послевкусие (я включить элементы управления в этом случае)
- Это начинается не в полноэкранном
- Поддержка полноэкранного portrail и пейзаж
- Полная совместимость с IOS 7 и 8
Во-первых, я стараюсь YOUTUBE КСН-игрок-помощника с этим результаты:
- IOS 8: работать он идеально
- IOS 7: Видео пауза каждый раз, когда на весь экран и не играл жидкости.
я, что это может быть лучшим решением, но я не могу заставить его работать нормально в IOS 7.
Второй и фактический вариант, я использую гибридное решение: IOS 8 с YouTube КСН-player- помощник и IOS 7 с UIWebView и встроенный проигрыватель YouTube. Результат:
- IOS 8: работать он идеально
- IOS 7: работа это, но 1/5 видео автозапуск не работает, поэтому видео отделка не обнаружено (я не знаю, почему)
Я ценю любое предложение о лучшем решении,
Мой реальный код (второй вариант):
-(void)youtubePlayerConfiguration{
NSString *version = [[UIDevice currentDevice] systemVersion];
if ([version floatValue] >= 8.0) {
NSDictionary *playerVars = @{
@"playsinline" : @1,
@"autoplay" : @1,
@"showinfo" : @0,
@"autohide" : @1,
@"rel" : @0,
@"modestbranding" : @1
};
youtubePlayer.delegate = self;
[youtubePlayer loadWithVideoId:self.videoId playerVars:playerVars];
} else {
UIWebView *webView = [[UIWebView alloc] initWithFrame:youtubePlayer.frame];
[webView setAllowsInlineMediaPlayback:YES];
[webView setMediaPlaybackRequiresUserAction:NO];
webView.delegate = self;
[self.view addSubview:webView];
NSString* embedHTML = [NSString stringWithFormat:@"\
<html>\
<body style='margin:0px;padding:0px;'>\
<script type='text/javascript' src='http://www.youtube.com/iframe_api'></script>\
<script type='text/javascript'>\
function onYouTubeIframeAPIReady()\
{\
ytplayer=new YT.Player('playerId',{events:{onReady:onPlayerReady,onStateChange: onPlayerStateChange}})\
}\
function onPlayerReady(a)\
{ \
a.target.playVideo(); \
}\
var done = false;\
function onPlayerStateChange(event) {\
if (event.data == YT.PlayerState.PLAYING && !done) {\
setTimeout(stopVideo, 6000);\
done = true;\
}\
if (event.data == YT.PlayerState.ENDED) {\
window.location = 'callback:anything';\
}\
}\
</script>\
<iframe id='playerId' type='text/html' width='%d' height='%d' src='http://www.youtube.com/embed/%@?enablejsapi=1&rel=0&playsinline=1&autoplay=1&showinfo=0' frameborder='0'>\
</body>\
</html>", 288,150, self.videoId];
[webView loadHTMLString:embedHTML baseURL:[[NSBundle mainBundle] resourceURL]];
webView.allowsInlineMediaPlayback = YES;
webView.mediaPlaybackRequiresUserAction = NO;
webView.scrollView.bounces = NO;
youtubePlayer.hidden = YES;
}
}
#pragma mark - Player YouTube Delegates
-(void)playerViewDidBecomeReady:(YTPlayerView *)playerView{
//[[NSNotificationCenter defaultCenter] postNotificationName:@"Playback started" object:self];
[playerView playVideo];
}
- (void)playerView:(YTPlayerView *)playerView didChangeToState:(YTPlayerState)state{
if (state == kYTPlayerStateEnded) {
ratingView.editable = YES;
ratingView.alpha = 1;
ratingView.userInteractionEnabled = YES;
}
}
- (void)playerView:(YTPlayerView *)playerView receivedError:(YTPlayerError)error
{
NSLog(@"YTPlayerView : receivedError :%i",error);
}
#pragma mark - WebView Delegate
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSLog(@"ENTRO - request:%@",request);
if ([[[request URL] scheme] isEqualToString:@"callback"]) {
NSLog(@"get callback");
ratingView.editable = YES;
ratingView.alpha = 1;
ratingView.userInteractionEnabled = YES;
return NO;
}
return YES;
}
youtube-ios-player-helper не работает, даже демонстрация их тоже не работает –