MPMoviePlayerController播放YouTubevideo

如何在iPhone上的MPMoviePlayerController中播放YouTubevideo,同时避免进入全屏模式?

这个问题在这里提出: MPMoviePlayerController正在播放YouTubevideo吗? 在这里: 在MPMoviePlayerController中播放Youtubevideo或播放RTSP – 3GP链接以及声称此类function的答案是不可能的。

然而,这个应用程序,Deja,具有我想要的function:一个无缝的MPMoviePlayerController,其框架我有明确的控制权。 http://itunes.apple.com/app/deja/id417625158

怎么做的!?

将此示例添加到项目实例化YoutubeStreamPathExtractorTest中

调用YoutubeStreamPathExtractorTest实例的测试方法。 按照日志,快乐

#import "AFHTTPRequestOperationManager.h" #import  typedef void (^CallbackBlock)(NSArray* result, NSError* error); static NSString* const kYouTubeStreamPathPattern = @"\\\"url_encoded_fmt_stream_map\\\\\":.*?url=(.*?)\\\\u0026"; @interface YoutubeStreamPathExtractorTest : NSObject - (void)test; - (void)youtubeURLPath:(NSString*)youtubeURLPath extractStreamURLPathsWithCallback:(CallbackBlock)callback; @end @implementation YoutubeStreamPathExtractorTest - (void) test { NSString* path = @"http://www.youtube.com/watch?v=TEV5DZpAXSw"; [self youtubeURLPath:path extractStreamURLPathsWithCallback:^(NSArray *result, NSError *error) { if (error){ NSLog(@"extracting error:%@",[error localizedDescription]); } for(NSString* streamURLPath in result) { NSLog(@"streamURLPath:%@",streamURLPath); /* NSURL* url = [NSURL URLWithString:streamURLPath]; MPMoviePlayerController* mpMoviePlayerController_ = [[MPMoviePlayerController alloc] initWithContentURL:url]; mpMoviePlayerController_.controlStyle = MPMovieControlStyleDefault; [mpMoviePlayerController_ play]; */ } }]; } - (void)youtubeURLPath:(NSString*)youtubeURLPath extractStreamURLPathsWithCallback:(CallbackBlock)callback { __block NSMutableArray* resultArray = [NSMutableArray new]; AFHTTPRequestOperationManager* manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:nil]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil]; [manager GET:youtubeURLPath parameters:nil success:^(AFHTTPRequestOperation* operation, id responseObject) { NSData* data = (NSData*)responseObject; NSString* string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSError* error = nil; NSRegularExpression* expression = [NSRegularExpression regularExpressionWithPattern:kYouTubeStreamPathPattern options:NSRegularExpressionCaseInsensitive error:&error]; NSRange range = NSMakeRange(0,[string length]); NSArray* matches = [expression matchesInString:string options:0 range:range]; for(NSTextCheckingResult* checkingResult in matches) { if ([checkingResult numberOfRanges]>1){ NSString* resultStr = [string substringWithRange:[checkingResult rangeAtIndex:1]]; //remove extra slashes [resultArray addObject:[resultStr stringByReplacingOccurrencesOfString:@"\\" withString:@""]]; } } if (callback) { callback(resultArray,error); } } failure:^(AFHTTPRequestOperation* operation, NSError* error) { if (callback) { callback(resultArray, error); } }]; } @end 

MPMoviePlayerController不支持播放YouTube SWF(Flash)video,期间。

您提到的那个应用程序实际上播放了MP4格式的逐步下载文件,YouTube也提供了一些内容。 这实际上违反了Apple的指导原则,因为它将(并且确实)超过每个应用程序每个时间段的最大渐进式下载量。 通过iTunes批准我感到很惊讶。

警告:提交在App Store中分发的iOS应用必须符合这些要求。 如果您的应用通过蜂窝网络传送video,并且video在五分钟内超过10分钟或5 MB数据,则需要使用HTTP直播。 (渐进式下载可用于较小的剪辑。)

如果您的应用通过蜂窝网络使用HTTP直播,则需要提供至少一个64 Kbps或更低带宽的流(低带宽流可以是仅音频流或带有静止图像的音频)。

这些要求适用于在App Store中提交以供在Apple产品上使用的iOS应用程序。 Apple可自行决定拒绝或删除不符合要求的应用。

因此,您的任务归结为如何获取通过YouTube提供的video的MP4url的问题。 这部分非常棘手且很好地被Deja解决了。 只需使用数据包嗅探器,您将看到它实际上创建了一个本地服务器,该服务器为MPMoviePlayerController提供信息。

试试这段代码:

 NSString *urlStr=[Your url is here]; NSURL *url = [NSURL fileURLWithPath:urlStr]; MPMoviePlayerController* moviePlayer = [[MPMoviePlayerController alloc]initWithContentURL:url]; [self.view addSubview:moviePlayer.view]; moviePlayer.view.frame = CGRectMake(set frame is here); [moviePlayer play]; [moviePlayer setFullscreen:NO animated:YES]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish) name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; 

我想这是针对Youtube ToS的,但你可以在这里使用这段代码:

https://github.com/larcus94/LBYouTubeView

它使用简单,就像一个魅力!

使用UIWebView。 在youtube中复制HtML代码video。

 UIWevView* movie = [UIWebView alloc] initWithFrame:CGRectMake(0,0,320,460)]; NSString* urlString = @"past HTML code"; [self.webView loadHTMLString:urlString baseURL:nil]; [self.view addSubview:movie];