Ios 使用MPMoviePlayerController播放youtube视频

Ios 使用MPMoviePlayerController播放youtube视频,ios,objective-c,youtube,Ios,Objective C,Youtube,很长一段时间以来,我一直在使用html字符串通过UIWebView播放youtube视频,问题是我想在playbackstate更改后获得通知。我决定创建一个MPMoviePlayerController并通过它播放youtube视频,但似乎无法实现。我在viewdidload中使用以下代码: NSString *urlAddress = @"http://www.youtube.com/watch?v=m01MYOpbdIk"; NSURL *url = [NSURL URLWithStrin

很长一段时间以来,我一直在使用html字符串通过UIWebView播放youtube视频,问题是我想在playbackstate更改后获得通知。我决定创建一个MPMoviePlayerController并通过它播放youtube视频,但似乎无法实现。我在viewdidload中使用以下代码:

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];
给我这个错误:

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

利用定制

它是
mpmovieplayervewcontroller
的子类

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

它只是加载YouTube移动网站的HTML代码,并在脚本标记中查找数据


LBYouTubeView没有使用UIWebView,这使得它看起来更快更干净。

对我来说,这个库工作得非常好

在此调用方法之后

[self callYouTubeURL:[NSString stringWithFormat:@"http://www.youtube.com/embed/%@",_urlcode]];
在此方法中,解析youtube链接

- (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到播放器中

-(void)urlLoadintoPlayer
{
    moviePlayer.contentURL = _urlToLoad;
}

播放youtube视频的官方方式:1)使用youtube中的嵌入标记的UIWebView,即UIWebView的内容。2)使用youtube ios播放器帮助程序[谷歌官方方式]

不幸的是,无法使用MPMoviePlayerController直接播放youtube视频,因为youtube不公开视频文件的直接链接

有一个通过MPMoviePlayerController运行youtube视频的库,但它们反对youtube的TOC。因此,最简单的方法是使用youtube ios播放器助手

如果youtube ios player helper pod无法工作,您可以将YTPlayer.h/.m和assets文件夹添加到项目中,并编写一个带有#import“YTPlayerView.h”的桥接头和您可以继续执行的rest过程
这对我来说绝对有效

我不明白。我使用了示例应用程序。我所做的只是将标准的youtube链接(URLWithString:@“quality:LBYouTubeVideoQualityLarge];)替换为我自己的链接,这给我带来了错误…?太好了。谢谢:)您是否已在使用此库的Appstore上成功提交了应用程序?有人提到“这未经youtube的ToC批准”。使用风险自负。”
-(void)urlLoadintoPlayer
{
    moviePlayer.contentURL = _urlToLoad;
}