Воспроизведение видео на YouTube в полноэкранном режиме авто - PullRequest
6 голосов
/ 03 декабря 2010

Я пытаюсь воспроизвести видео на YouTube с помощью встроенного плеера YouTube в моем приложении для iPad. Я хочу, чтобы как только пользователь нажимал на миниатюру видео, видео автоматически загружалось в полноэкранный режим при переключении в альбомный режим в ipad. В настоящее время пользователь должен нажать кнопку полноэкранного режима, чтобы воспроизвести видео в полноэкранном режиме. Мне нужен тот же эффект, который наблюдается при воспроизведении видео с помощью приложения YouTube по умолчанию, которое поставляется с ipad.

Это код, который я использую для воспроизведения видео с трубки на ipad.

embedHTML = @"<object width=\"640\" height=\"390\">
<param name=\"movie\"value=\"http://www.youtube.com/v/IYX_Ql-3U10&fs=1\">
<param name=\"allowFullScreen\" value=\"true\"></param>
<param name=\"allowScriptAccess\" value=\"always\"></param>
<embed id=\"yt\" src=\"http://www.youtube.com/v/youtube_video_id&fs=1\" 
type=\"application/x-shockwave-flash\" position=\"fixed\" 
allowfullscreen=\"true\" allowScriptAccess=\"always\"
 width=\"640\" height=\"390\"></embed></object>";

А если это невозможно, кто-нибудь знает, есть ли причина или документация, подтверждающая это решение.

Ответы [ 4 ]

4 голосов
/ 06 сентября 2014

Мне удалось получить доступ к этой функции из подпредставления под названием FigPluginView в веб-представлении плеера YouTube с помощью помощника iOS YouTube iOS-youtube-player-helper . Ссылка на дамп класса FigPluginView

Создайте пользовательский заголовок класса UIView, который предоставляет следующий метод:

#import <Foundation/Foundation.h> 
@interface WMFigPluginView : NSObject

-(void)scriptEnterFullScreen;

@end

Импорт пользовательского FigPluginView и проигрывателя YouTube в интерфейс ViewController ()

    #import <youtube-ios-player-helper/YTPlayerView.h>
    #import "WMFigPluginView.h"

    @property(nonatomic, strong) YTPlayerView *playerView;

Используйте следующие методы для запуска проигрывателя YouTube, отслеживания изменений состояния, поиска и вызова полноэкранного скрипта в FigPluginView.

- (void)presentYoutubeVideo {
    if ([self.view.subviews containsObject:_playerView]){
        [_playerView removeFromSuperview];
    }
    CGRect playerFrame = CGRectMake(0, 0, 0, 0);
    _playerView = [[YTPlayerView alloc]initWithFrame:playerFrame];
    _playerView.delegate = self;
    [_playerView.webView setAllowsInlineMediaPlayback: NO];
    [self.view addSubview:_playerView];
    [self.playerView loadWithVideoId:@"YouTubeVideoID" playerVars:@{@"showinfo":@0,@"modestbranding":@1,@"autoplay":@1,@"playsinline":@0}];
}

-(void)playerViewDidBecomeReady:(YTPlayerView *)playerView {
    [_playerView playVideo];
}

-(void)playerView:(YTPlayerView *)playerView didChangeToState:(YTPlayerState)state {
    //stop activity indicator
    if (state == kYTPlayerStateBuffering) {
        //start activity indicator
    }
    if (state == kYTPlayerStatePlaying) {
        WMFigPluginView *figPluginView = (WMFigPluginView*)[self findFigPluginView:_playerView.webView];
        [figPluginView scriptEnterFullScreen];
    }
}

- (UIView *)findFigPluginView:(UIView *)view {
    for (__unsafe_unretained UIView *subview in view.subviews) {
        if ([NSStringFromClass(subview.class) hasSuffix:@"FigPluginView"]) {
            return subview;
        } else if (subview.subviews.count > 0) {
            return [self findFigPluginView:subview];
        }
    }
    return nil;
}

Надеюсь, это поможет!

4 голосов
/ 03 декабря 2010

Вы не можете, это не разрешено:)

0 голосов
/ 25 января 2018

Что касается авторов других ответов, то вполне возможно сделать это с помощью UIWebViews в iOS И без использования частных API. Вот довольно простой способ сделать это.

- (void)playYoutubeVideo:(NSString *)videoId {
    UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];
    webView.center = self.view.center; //Technically not needed, I've found it looks better with this added (when the video is done playing it looks better while being minimized)
    webView.mediaPlaybackRequiresUserAction = NO;
    [self.view addSubview:webView];

    NSString *youTubeVideoHTML = [NSString stringWithFormat:@"<html><head><style>body{margin:0px 0px 0px 0px;}</style></head> <body> <div id=\"player\"></div> <script> var tag = document.createElement('script'); tag.src = 'http://www.youtube.com/player_api'; var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); var player; function onYouTubePlayerAPIReady() { player = new YT.Player('player', { width:'768', height:'1024', videoId:'%@', events: { 'onReady': onPlayerReady } }); } function onPlayerReady(event) { event.target.playVideo(); } </script> </body> </html>", videoId];

   [webView loadHTMLString:youTubeVideoHTML baseURL: [NSBundle mainBundle].bundleURL];
}

Суть этой реализации заключается в использовании UIWebView с фреймом CGRectZero вместе с пользовательским HTML / Javascript, который обрабатывает автоматическое воспроизведение видео. С помощью UIWebView с фреймом CGRectZero пользователь не видит раздражающей промежуточной страницы до автоматического воспроизведения видео, а HTML / Javascript выполняет тяжелую работу, связанную с получением страницы для автоматического воспроизведения видео.

Перед представлением видео есть небольшая задержка. К сожалению, я не нашел способа устранить эту пару секундную задержку.

0 голосов
/ 02 марта 2012

Похоже, что нет простого решения.Если мой клиент захочет этого (я узнаю через несколько дней :-)), я, вероятно, попытаюсь открыть новый контроллер с веб-представлением, охватывающим весь экран, а затем автоматически воспроизвести его, как показано в этом сообщении: Как запустить видео с YouTubeиграть автоматически внутри UIWebView

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...