关于 ios:使用 MPMoviePlayerController 播放 youtube 视频

Playing youtube video with MPMoviePlayerController

我长期以来一直在使用 html 字符串通过 UIWebView 播放 youtube 视频,问题是我想获得改变播放状态的通知。我决定创建一个 MPMoviePlayerController 并通过它播放 youtube 视频,但似乎无法让它工作。我在 viewdidload 中使用以下代码:

1
2
3
4
5
6
7
8
9
NSString *urlAddress = @"http://www.youtube.com/watch?v=m01MYOpbdIk";
NSURL *url = [NSURL URLWithString:urlAddress];
CGFloat width = [UIScreen mainScreen].bounds.size.width;
CGFloat height = [UIScreen mainScreen].bounds.size.height;
movie = [[MPMoviePlayerController alloc] initWithContentURL:url];
movie.scalingMode=MPMovieScalingModeAspectFill;
movie.view.frame = CGRectMake(0.0, 0.0, width, height);
[self.view addSubview:movie.view];
[movie play];

给我这个错误:

1
2
3
4
5
_itemFailedToPlayToEnd: {
    kind = 1;
    new = 2;
    old = 0;
 }

对我来说,这个库确实很好用! https://github.com/hellozimi/HCYoutubeParser

1
2
3
4
5
6
7
moviePlayer = [[MPMoviePlayerController alloc] init];    
moviePlayer.shouldAutoplay = YES;
moviePlayer.fullscreen = YES;
moviePlayer.repeatMode = MPMovieRepeatModeNone;
moviePlayer.controlStyle = MPMovieControlStyleDefault;
moviePlayer.movieSourceType = MPMovieSourceTypeFile;
moviePlayer.scalingMode = MPMovieScalingModeAspectFit;

在这个调用方法之后。

1
[self callYouTubeURL:[NSString stringWithFormat:@"http://www.youtube.com/embed/%@",_urlcode]];

在此方法中解析 youtube 链接。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
- (void)callYouTubeURL:(NSString *)urlLink
{

    NSURL *url = [NSURL URLWithString:urlLink];
    actvity.hidden = NO;
    [HCYoutubeParser thumbnailForYoutubeURL:url thumbnailSize:YouTubeThumbnailDefaultHighQuality completeBlock:^(UIImage *image, NSError *error) {

        if (!error) {

            [HCYoutubeParser h264videosWithYoutubeURL:url completeBlock:^(NSDictionary *videoDictionary, NSError *error) {


                NSDictionary *qualities = videoDictionary;

                NSString *URLString = nil;
                if ([qualities objectForKey:@"small"] != nil) {
                    URLString = [qualities objectForKey:@"small"];
                }
                else if ([qualities objectForKey:@"live"] != nil) {
                    URLString = [qualities objectForKey:@"live"];
                }
                else {
                    [[[UIAlertView alloc] initWithTitle:@"Error" message:@"Couldn't find youtube video" delegate:nil cancelButtonTitle:@"Close" otherButtonTitles: nil] show];
                    return;
                }
                _urlToLoad = [NSURL URLWithString:URLString];


                [self urlLoadintoPlayer];

            }];
        }
        else {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
            [alert show];
        }
    }];
}

在此加载后,将新解析的 url 加载到播放器中。

1
2
3
4
-(void)urlLoadintoPlayer
{
    moviePlayer.contentURL = _urlToLoad;
}


使用自定义的 LBYouTubePlayerViewController

它是 MPMoviePlayerViewController.

的子类

LBYouTubeView 只是一个能够在 MPMoviePlayerController 中显示 YouTube 视频的小视图。您甚至可以在高质量和标准质量流之间进行选择。

它只是加载 YouTube 移动网站的 HTML 代码并在 script 标签中查找数据。

LBYouTubeView 不使用 UIWebView,这使它更快,看起来更干净。


播放 youtube 视频的官方方式:1) UIWebView 使用 Youtube 的 embed 标签 UIWebView\\'s content.2) 使用 youtube-ios-player-helper[Google 官方方式]

很遗憾,无法使用 MPMoviePlayerController 直接播放 youtube 视频,因为 youtube 不会公开指向视频文件的直接链接。

有通过 MPMoviePlayerController 运行 youtube 视频的库,但它们违反了 youtube 的 TOC。因此,最简单的方法是使用 youtube-ios-player-helper。

如果 youtube-ios-player-helper pod 不起作用,您可以将 YTPlayer.h/.m 和 assets 文件夹添加到您的项目中,并使用 #import "YTPlayerView.h" 编写一个桥头文件,然后rest您可以在 https://github.com/youtube/youtube-ios-player-helper 上遵循的程序
这绝对对我有用!