использование webview для воспроизведения видео с YouTube в приложении для iphone

#iphone #ios #video #uiwebview #youtube

#iPhone #iOS #Видео #uiwebview #YouTube

Вопрос:

Я пытаюсь просматривать видео в своем приложении для iphone, используя следующий код:

 -(void) viewDidLoad{
[super viewDidLoad];

UIWebView *webView = [[UIWebView alloc]initWithFrame:self.view.frame];

    NSString *youTubeVideoHTML = @"<html><head>
    <body style="margin:0">
    <embed id="yt" src="%@" type="application/x-shockwave-flash" 
    width="%0.0f" height="%0.0f"></embed>
    </body></html>";

    // Populate HTML with the URL and requested frame size
    NSString *html = [NSString stringWithFormat:youTubeVideoHTML,@"http://www.youtube.com/watch?v=ZiIcqZoQQwg" , 100, 100];

    // Load the html into the webview
    [webView loadHTMLString:html baseURL:nil];
    [self.view addSubview:webView];
}
  

Кто-нибудь может сказать мне, что я делаю не так? Я видел это в паре примеров, но все еще не могу разобраться!

Ответ №1:

Похоже, ваша HTML-строка сформирована неправильно.

Попробуйте это:

 - (void)viewDidLoad {

    [super viewDidLoad];

    float width = 200.0f;
    float height = 200.0f;

    NSString *youTubeURL = @"http://www.youtube.com/watch?v=ZiIcqZoQQwg";

    UIWebView *webView = [UIWebView new];
    webView.frame = CGRectMake(60, 60, width, height);

    NSMutableString *html = [NSMutableString string];
    [html appendString:@"<html><head>"];
    [html appendString:@"<style type="text/css">"];
    [html appendString:@"body {"];
    [html appendString:@"background-color: transparent;"];
    [html appendString:@"color: white;"];
    [html appendString:@"}"];
    [html appendString:@"</style>"];
    [html appendString:@"</head><body style="margin:0">"];
    [html appendFormat:@"<embed id="yt" src="%@" type="application/x-shockwave-flash"", youTubeURL];
    [html appendFormat:@"width="%0.0f" height="%0.0f"></embed>", width, height];
    [html appendString:@"</body></html>"];

    [webView loadHTMLString:html baseURL:nil];

    [self.view addSubview:webView];

}
  

Стоит отметить, что этот код будет работать только на устройстве, он не будет работать в симуляторе.

Обновить…

Из-за изменений, внесенных YouTube, описанный выше метод теперь неверен. Вместо этого используйте приведенный ниже метод.

 - (void)viewDidLoad {

    [super viewDidLoad];

    float width = 200.0f;
    float height = 200.0f;

    NSString *youTubeToken = @"K95Q0VFyhA8";

    UIWebView *wv = [UIWebView new];
    webView.frame = CGRectMake(60, 60, width, height);

    NSMutableString *html = [NSMutableString string];
    [html appendString:@"<html>"];
    [html appendString:@"<head>"];
    [html appendString:@"<style type="text/css">"];
    [html appendString:@"body {"];
    [html appendString:@"background-color: transparent;"];
    [html appendString:@"color: white;"];
    [html appendString:@"margin: 0;"];
    [html appendString:@"}"];
    [html appendString:@"</style>"];
    [html appendString:@"</head>"];
    [html appendString:@"<body>"];
    [html appendFormat:@"<iframe id="ytplayer" type="text/html" width="%0.0f" height="%0.0f" src="http://www.youtube.com/embed/%@" frameborder="0"/>", width, height, videoToken];
    [html appendString:@"</body>"];
    [html appendString:@"</html>"];

    [wv loadHTMLString:html baseURL:nil];

    [self.view addSubview:wv];

}
  

Комментарии:

1. это не сработает в симуляторе? Почему это? разве это не встраивает проигрыватель в webview?

2. UIWebView будет создан, но миниатюра YouTube в нем отображаться не будет, и вы не сможете воспроизвести видео. Это происходит только на устройстве.

3. и когда я нажимаю кнопку «Готово», кажется, что она запускает мое приложение с начального экрана вместо того, чтобы закрывать просмотр видео … Вы знаете, что происходит? Есть ли способ изменить поведение кнопки «Готово»?

4. Ваш код не работает для симулятора, или мы не можем воспроизводить видео YouTube в симуляторе. Я пытаюсь играть в симуляторе и получаю эту ошибку на консоли. «Исключение, исключающее WebKit <NSRangeException> *** -[__NSCFString substringToIndex:]: диапазон или индекс выходят за пределы»

Ответ №2:

Замените URL. Использование

 http://www.youtube.com/v/XXXXXXX
  

вместо

 http://www.youtube.com/watch?v=XXXXXXX
  

Ответ №3:

попробуйте этот простой :

 //get the youtube video token from youtube url //https://www.youtube.com/watch?v=youTubeToken

 NSString *youTubeToken = @"K95Q0VFyhA8";

//create webview..
    UIWebView *webView = [UIWebView new];
    webView.frame = CGRectMake(10, 10, 300, 300);

//load webview with the load request..
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://www.youtube.com/embed/%@",youTubeToken]]]];
    [self.view addSubview:webView];