iphone - MPMoviePlayerController 播放 YouTube 视频

标签 iphone ios http youtube mpmovieplayercontroller

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

此问题已在此提出:MPMoviePlayerController is playing YouTube video?在这里:Play Youtube video in MPMoviePlayerController or play RTSP - 3GP link答案声称这种功能是不可能的。

然而,Deja 这个应用程序完全具有我想要的功能:一个无缝的 MPMoviePlayerController,我可以对其框架进行显式控制。 http://itunes.apple.com/app/deja/id417625158

这是怎么做到的!?

最佳答案

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

调用YoutubeStreamPathExtractorTest实例的test方法。 关注日志并快乐

#import "AFHTTPRequestOperationManager.h"
#import <MediaPlayer/MediaPlayer.h>

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

关于iphone - MPMoviePlayerController 播放 YouTube 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10411250/

相关文章:

iphone - UIPickerview 多个文本字段 Xcode

iphone - Objective C/iOS 中 Ruby method_missing 的等价物

html - 如何在 iOS Swift 3 中从 url 解析 HTML 后获取表数据

php - WampServer 3.2.3 无法访问局域网,

ios - XCode 7.3 和 Swift 2.0 十进制键盘,带点 (".") 而不是逗号 (",")

iphone - 如何使用 iPhone SDK 以编程方式将连接从 3G 更改为 wi-fi?

ios - 加载 uiviewcontroller 后更新 xib View 的位置?

ios - MonoTouch 可以安全地与 Core Audio 一起使用吗?

http - 如何处理 Rails 3.1 中丢失的主机 header

http - 用于处理持久 HTTP 连接上的多个请求的 CGI