使用MPMoviePlayerController播放YouTube视频

时间:2014-01-17 23:57:19

标签: ios objective-c youtube

我一直在使用html字符串长时间通过UIWebView播放youtube视频,问题是我希望通过更改回放状态获取通知。我决定创建一个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;
 }

3 个答案:

答案 0 :(得分:4)

对我来说,这个图书馆确实完美无缺! https://github.com/hellozimi/HCYoutubeParser

moviePlayer = [[MPMoviePlayerController alloc] init];    
moviePlayer.shouldAutoplay = YES;
moviePlayer.fullscreen = YES;
moviePlayer.repeatMode = MPMovieRepeatModeNone;
moviePlayer.controlStyle = MPMovieControlStyleDefault;
moviePlayer.movieSourceType = MPMovieSourceTypeFile;
moviePlayer.scalingMode = MPMovieScalingModeAspectFit;

此调用方法之后。

[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;
}

答案 1 :(得分:2)

使用自定义 LBYouTubePlayerViewController

它是MPMoviePlayerViewController

的子类

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

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

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

答案 2 :(得分:0)

播放youtube视频的官方方式:1)UIWebView使用来自Youtube的嵌入标签UIWebView的内容.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”编写桥接头,然后您可以使用其他步骤关注https://github.com/youtube/youtube-ios-player-helper 这绝对适合我!