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
它是
的子类
LBYouTubeView 只是一个能够在
它只是加载 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 上遵循的程序
这绝对对我有用!