如何在MPMoviePlayerController中打开YouTube视频并播放

3
我之前使用过这种方法,但现在无法从直接播放YouTube视频的URL中获取视频。
URL = http://www.youtube.com/watch?v=JPUWNcGDyvM&feature=player_embedded
- (void)viewDidLoad
{

   player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.youtube.com/watch?v=JPUWNcGDyvM&feature=player_embedded"]]];

[[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(movieFinishedCallback:)
 name:MPMoviePlayerPlaybackDidFinishNotification
 object:player];

//---play movie---
[player prepareToPlay];
[player pause];

player.view.frame = CGRectMake(0, 0, 320, 367);

[self.view addSubview:player.view];   

[super viewDidLoad];

我的movieFinishedCallback如下:

- (void) movieFinishedCallback:(NSNotification*) aNotification 
{ 
 player = [aNotification object];
[[NSNotificationCenter defaultCenter]
 removeObserver:self
 name:MPMoviePlayerPlaybackDidFinishNotification
 object:player];
}

可能是https://dev59.com/AnI-5IYBdhLWcg3wlpeW#13719715的重复问题。 - DD_
2个回答

2

创建一个自定义的UIWebView:请按照以下步骤进行

1)创建一个名为"YouTubeView.h"的接口文件(.h文件)

#import <UIKit/UIKit.h>

@interface YouTubeView : UIWebView 
{
}

- (YouTubeView *)initWithStringAsURL:(NSString *)urlString frame:(CGRect)frame  mimeSubType:(NSString *)mimeType;

@end

2) 转换为 .m 文件

 #import "YouTubeView.h"

@implementation YouTubeView


- (YouTubeView *)initWithStringAsURL:(NSString *)urlString frame:(CGRect)frame mimeSubType:(NSString *)mimeType
    {
    NSString *strMimeType;

    if([mimeType length]>0)
    {
        strMimeType = mimeType;
    }

    else
    {
        strMimeType =@"x-shockwave-flash"; //@"x-shockwave-mp4";
    }

    if (self = [super init]) 
    {
    // Create webview with requested frame size
        self = [[UIWebView alloc] initWithFrame:frame];

    // HTML to embed YouTube video

        NSString *youTubeVideoHTML = @"<html><head>\
        <body style=\"margin:0\">\
        <embed id=\"yt\" src=\"%@\" type=\"application/%@\" \
        width=\"%0.0f\" height=\"%0.0f\"></embed>\
        </body></html>";

        // Populate HTML with the URL and requested frame size
        NSString *html = [NSString stringWithFormat:youTubeVideoHTML, urlString,strMimeType, frame.size.width, frame.size.height];

        // Load the html into the webview
        [self loadHTMLString:html baseURL:nil];
    }

    return self;  

    }


   - (void)dealloc 
    {
    [super dealloc];
    }

    @end

3) 在您想播放YouTube视频的控制器中导入youtubeview文件,并创建像下面代码中的uiview

YouTubeView *videoVw = [[YouTubeView alloc] initWithStringAsURL:[NSString 

stringWithFormat:@"%@",strNormalVdoURL] frame:CGRectMake(0,0,320,480) mimeSubType:@"x-shockwave-

flash"];

  [self.view addSubview:videoVw];
    [videoVw release];
      videoVw = nil;

注意:视频只能在设备上播放,因此请在设备上检查。

视频无法在横屏模式下播放。 - user578386

1
如果可以在你的类中打开URL,那么就在你的类中添加一个按钮,并将其重定向到WebsiteViewController类。这可能会对你有所帮助。

WebsiteViewController.h ///----

 @interface WebsiteViewController : UIViewController <UIWebViewDelegate>
 {
  IBOutlet UIWebView *webView;
 }

 @property(nonatomic,retain) IBOutlet UIWebView *webView;

WebsiteViewController.m ///---

网站视图控制器.m ///---

-(void)viewDidLoad {
 NSURLRequest *request = [[NSURLRequest alloc] initWithURL:@"url"];
 [self.webView setScalesPageToFit:YES];
 [self.webView loadRequest:request];
 [request release]; 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接