2017-01-05 3 views
2

Я использую в настоящее время библиотеку iOS-youtube-player-helper. Существует контроллер вида с YTPlayerView, который имеет соотношение сторон 16: 9, что означает, что он занимает только часть экрана. Видео загружается в среднем, и неважно, я не мог заставить его играть в 720P или 1080P. Я уверен, что эти качества доступны, это всего лишь YTPlayerView, заставляющее качество основываться на высоте видеоплеера. Поскольку это библиотека, а не прямая вставка iframe, я не могу использовать параметр «vq» (указание vq в playerVars, похоже, не работает), а настройка качества будет небольшим, а затем изменить его позже также не работает (см. this issue on GitHub)iOS YTPlayerView force video quality

Теперь, учитывая фактор, который я не могу сделать YTPlayerView, чтобы заполнить весь экран из-за проблем с дизайном пользовательского интерфейса. Итак, можно ли заставить YTPlayerView играть, по крайней мере, в 720P? (Методы обхода, изменение кода библиотеки, ...)

Поскольку это приложение, которое будет находиться в App Store (и, конечно же, мы не хотим, чтобы у вас были юридические споры с Google), пожалуйста, не предлагают использовать библиотеки, которые против Youtube ToC, таких как XCDYouTubeKit

Большое спасибо

ответ

0

Я нашел обходной путь, и это хорошо работает для меня.

Прежде всего, проблемы зависят от размера webView, построенного внутри YTPlayerView. Например, если у вас есть 320x200 playerView, попробуйте заставить ваше видео на 720hd не работать, потому что класс iPrame youtube Player переключится на лучшее разрешение в соответствии с размером вашего игрока (в этом случае небольшое качество, потому что у вас есть 320x200).

Вы можете видеть это SO answer, которые объясняют эту проблему.

Когда вы импортировали YTPlayerView класс для вашего проекта у вас есть два файла: YTPlayerView.h и YTPlayerView.m

YTPlayerView.m (Update работать также на IPADS)


Я изменил функцию, в которой веб-представление инициализируется с помощью специального размера (разрешение 4 КБ), и до последней части я добавил возможность масштабирования Содержание е и восстановить исходный кадр, как это:

- (UIWebView *)createNewWebView { 
    CGRect frame = CGRectMake(0.0, 0.0, 4096.0, 2160.0); //4k resolution 
    UIWebView *webView = [[UIWebView alloc] initWithFrame:frame]; 
    //UIWebView *webView = [[UIWebView alloc] initWithFrame:self.bounds]; 

    webView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); 
    webView.scrollView.scrollEnabled = NO; 
    webView.scrollView.bounces = NO; 

    if ([self.delegate respondsToSelector:@selector(playerViewPreferredWebViewBackgroundColor:)]) { 
     webView.backgroundColor = [self.delegate playerViewPreferredWebViewBackgroundColor:self]; 
     if (webView.backgroundColor == [UIColor clearColor]) { 
      webView.opaque = NO; 
     } 
    } 

    webView.scalesPageToFit = YES; 
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    { 
     CGSize contentSize = webView.scrollView.contentSize; 
     CGSize viewSize = self.bounds.size; 
     float scale = viewSize.width/contentSize.width; 
     webView.scrollView.minimumZoomScale = scale; 
     webView.scrollView.maximumZoomScale = scale; 
     webView.scrollView.zoomScale = scale; 
     // center webView after scaling.. 
     [webView setFrame:CGRectMake(0.0, self.frame.origin.y/3, 4096.0, 2160.0)]; 
    } else { 
     webView.frame = self.bounds; 
    } 
    [webView reload]; 
    return webView; 
} 

Надеется, что это помогает, кто пытается использовать оригинальный плеер Youtube в его проекте.

P.S.: Все мои попытки были сделали с быстрым проектом и следующими переменными:

var playerVars:Dictionary = 
     ["playsinline":"1", 
     "autoplay":"1", 
     "modestbranding":"1", 
     "rel":"0", 
     "controls":"0", 
     "fs":"0", 
     "origin":"https://www.example.com", 
     "enablejsapi":"1", 
     "iv_load_policy":"3", 
     "showinfo":"0"] 

Использование функций:

self.playerView.load(withVideoId: "Rk6_hdRtJOE", playerVars: self.playerVars) 

и метод последующей форсировать разрешение:

self.playerView.loadVideo(byId: "Rk6_hdRtJOE", startSeconds: 0.0, suggestedQuality: YTPlaybackQuality.HD720) 

О iPads:

Как сообщил Эдвард в комментариях, на iPads возникла небольшая проблема, потому что эти устройства, похоже, не применяются scalesPageToFit. Цель состоит в том, чтобы проверить, является ли устройство iPad, затем масштабировать (масштабирование) scrollView, чтобы разместить небольшие границы обзора. Я тестировал свой iPad, и он работает. Дай мне знать.

+1

Спасибо. Завтра я попробую. – Edward

+0

Это решение, похоже, работает только на iPhone, есть ли способ заставить его работать на iPads? – Edward

+0

@Edward У вас есть абсолютная причина: спасибо за ваш отчет, я исправил функцию работы на iPad. –