2012-05-02 2 views
2

Как воспроизвести видео на 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

Как это делается !?

+0

Проверьте ссылку на рабочей демонстрации :: https://github.com/DpzAtMicRO/IOSYoutubePlayer –

ответ

0

попробовать этот код:

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]; 
+0

его не работает для меня NSString * urlStr = @ "https: // www.youtube.com/watch?v=ffHyA6JX4-0" ; NSURL * url = [NSURL fileURLWithPath: urlStr]; MPMoviePlayerController * moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL: url]; [self.view addSubview: moviePlayer.view]; moviePlayer.view.frame = myframe; [playPlayer play]; [moviePlayer setFullscreen: NO animated: YES]; любые изменения в нем plz modify thankyou –

1

MPMoviePlayerController не поддерживает воспроизведение YouTube SWF (Flash) видео, период.

Это приложение, которое вы упоминаете, фактически воспроизводит постепенно загруженные файлы в формате MP4, который YouTube также предлагает для своего контента. Это на самом деле является нарушением руководящих принципов Apple, так как оно (и делает) превышает максимальный объем прогрессивной загрузки за приложение за каждый таймфрейм. Я удивлен, что он получил одобрение iTunes.

Предупреждение: Приложения iOS, представленные для распространения в App Store, должны соответствовать этим требованиям. Если ваше приложение доставляет видео через сотовые сети , а видео превышает либо 10 минут, либо . 5 МБ данных в течение пяти минут, вы должны использовать HTTP Live Streaming. (Последовательная загрузка может быть использована для небольших клипов.)

Если ваше приложение использует HTTP Live Streaming в сотовых сетях, вы обязаны обеспечить по меньшей мере, один поток со скоростью 64 кбит или более низкой пропускной способностью (поток с низкой пропускной способностью может быть аудио или только с изображением ).

Эти требования применяются к приложениям iOS, представленным для распространения в App Store для использования в продуктах Apple, в магазине приложений . Неприемлемые приложения могут быть отклонены или удалены по усмотрению Apple.

Итак, ваша задача сводится к вопросу о том, как получить URL-адрес MP4 видео, предлагаемого через YouTube. Дежа очень сложна и красиво решена. Просто используйте сниффер пакетов, и вы увидите, что он фактически создает локальный сервер, который передает MPMoviePlayerController.

0

Использование UIWebView. Скопируйте видео в формате HTML на YouTube.

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]; 
0

Я предполагаю, что это против Youtube ToS, но вы можете использовать этот код здесь:

https://github.com/larcus94/LBYouTubeView

Он прост в использовании и работает как шарм!

+0

это против Youtube ToS ??? Могу ли я использовать его без отклонения от Apple? – Atrash

2

добавить этот образец в проецировании Instantiate YoutubeStreamPathExtractorTest

вызова тест метод YoutubeStreamPathExtractorTest экземпляра. Последующие журналы и быть счастливым

#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