【问题标题】:Playing youtube video with MPMoviePlayerController使用 MPMoviePlayerController 播放 youtube 视频
【发布时间】:2014-02-07 12:11:10
【问题描述】:

长期以来,我一直在使用 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;
 }

【问题讨论】:

    标签: ios objective-c youtube


    【解决方案1】:

    对我来说,这个库确实很好用! 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;
    }
    

    【讨论】:

    • 太棒了。谢谢 :) 您是否在 Appstore 上成功提交了使用该库的应用程序?提到“这未经 YouTube 的 ToC 批准。使用风险自负。”
    【解决方案2】:

    播放 youtube 视频的官方方式:1) UIWebView 带有 Youtube 的 embed 标签 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 这绝对对我有用!

    【讨论】:

      【解决方案3】:

      利用自定义LBYouTubePlayerViewController

      它是MPMoviePlayerViewController的子类。

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

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

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

      【讨论】:

      • 我不明白。我已经使用了示例应用程序,我所做的只是用我自己的替换标准 youtube 链接 (URLWithString:@"youtube.com/… quality:LBYouTubeVideoQualityLarge];),它给了我错误...?
      猜你喜欢
      • 2012-05-11
      • 2016-07-26
      • 2011-10-18
      • 2010-12-19
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      • 2011-08-08
      • 2014-01-02
      相关资源
      最近更新 更多