Автозапуск видео с YouTube на iPhone Safari или UIWebView - PullRequest
19 голосов
/ 10 июня 2010

Можно ли получить видео на YouTube для автоматического воспроизведения в Safari и / или UIWebView?Я видел, как это было сделано в приложении для iPhone, в табличном представлении отображаются ячейки, на которых нет значка предварительного просмотра Youtube (хотя, конечно, это UIWebView), когда вы нажимаете на ячейку, она напрямую переходит к видео.

Может ли этобыть сделано путем подделки крана на видео YouTube?Если так, то как?Будет ли работать getElementById (). Click?

Ответы [ 5 ]

30 голосов
/ 23 сентября 2010

хитрость заключается в том, чтобы найти кнопку в веб-представлении.Используйте следующий фрагмент.

- (void)loadWebUIViewWithYoutubeLink {
    webView.delegate = self;
    NSString *htmlString = [NSString stringWithFormat:[NSString
                             stringWithContentsOfFile:[[NSBundle mainBundle]
        pathForResource:@"YouTubeTemplate" ofType:@"txt"]],
                             @"b85hn8rJvgw",  @"b85hn8rJvgw", nil];
    [webView loadHTMLString:htmlString baseURL:[NSURL URLWithString:@"http://youtube.com"]];
}

- (UIButton *)findButtonInView:(UIView *)view {
    UIButton *button = nil;

    if ([view isMemberOfClass:[UIButton class]]) {
        return (UIButton *)view;
    }

    if (view.subviews && [view.subviews count] > 0) {
        for (UIView *subview in view.subviews) {
            button = [self findButtonInView:subview];
            if (button) return button;
        }
    }

    return button;
}

- (void)webViewDidFinishLoad:(UIWebView *)_webView {
    UIButton *b = [self findButtonInView:_webView];
    [b sendActionsForControlEvents:UIControlEventTouchUpInside];
}
7 голосов
/ 24 февраля 2012

Если вы создаете свой собственный html-файл, который использует iframe, а затем загружаете веб-просмотр в него, вы можете просто ввести команду

webView.mediaPlaybackRequiresUserAction=FALSE; 

, и видео будет воспроизводиться автоматически, пока выВаше видео на YouTube в HTML уже начало видео.HTML-файл можно найти в источнике на следующей странице.view-source: http://tylerbiscoe.com/vb/iphone_player.html. Если вы скопируете и вставите это в браузер, вы увидите, как будет выглядеть страница iframe.Затем используйте webView, чтобы загрузить страницу youTube, а затем используйте приведенную выше команду, чтобы получить проигрыватель quicktime, который ios вызывает для автоматического воспроизведения после завершения загрузки webview.На странице выше уже есть три видео, и все три будут последовательно воспроизводиться.

2 голосов
/ 24 января 2012

Да, это работает (все комментарии здесь), но вы должны использовать youtube old embed src.

Как это:

http://www.youtube.com/v/%@?version=3&hl=en_US

Где% @идентификатор видео YouTube.

0 голосов
/ 10 апреля 2013

Упомянутый выше метод «нажатия кнопки» работал для меня в iOS6, но только в первый раз.После повторной загрузки видео не запустится.При прочих равных, я подумал, что это проблема кеширования или cookie.Оказалось, что очистка куки для youtube заставила его работать на меня.

for(NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {
      NSLog([cookie domain]);
      if([[cookie domain] isEqualToString:@".youtube.com"]) {

          [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
      }
}

Надеюсь, это может помочь кому-то другому, пытающемуся выяснить это для iOS6!

0 голосов
/ 21 сентября 2012

Я использовал метод Saurabh, но вместо загрузки строки HTML я смог просто загрузить обычный запрос, и видео по-прежнему воспроизводилось автоматически.

Обязательно установите делегат равным нулю при закрытии веб-просмотра, иначе он будет продолжать пытаться играть.

- (void)loadVideo
{
        NSURLRequest *videoReq = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.youtube.com/watch?v=J-30wYSsFUY&feature=plcp"]];
        [_videoWebView setDelegate:self];
        [_videoWebView loadRequest:videoReq];
}

// ----- ЭТИ 2ФУНКЦИИ, ПОЛУЧЕННЫЕ ОТ ОТВЕТА Саураба Вадхвы ------

- (UIButton *)findButtonInView:(UIView *)view {
    UIButton *button = nil;

    if ([view isMemberOfClass:[UIButton class]]) {
        return (UIButton *)view;
    }

    if (view.subviews && [view.subviews count] > 0) {
        for (UIView *subview in view.subviews) {
            button = [self findButtonInView:subview];
            if (button) return button;
        }
    }

    return button;
}

- (void)webViewDidFinishLoad:(UIWebView *)_webView {
    UIButton *b = [self findButtonInView:_webView];
    [b sendActionsForControlEvents:UIControlEventTouchUpInside];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...