2011-02-25 32 views
27

嵌入YouTube视频,我通过一个片段,我在网上找到的嵌入来自YouTube的视频,在这里是我使用的代码:

@interface FirstViewController (Private) 
- (void)embedYouTube:(NSString *)urlString frame:(CGRect)frame; 
@end 


@implementation FirstViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self embedYouTube:@"http://www.youtube.com/watch?v=l3Iwh5hqbyE" frame:CGRectMake(20, 20, 100, 100)]; 
} 


- (void)embedYouTube:(NSString *)urlString frame:(CGRect)frame { 
    NSString *embedHTML = @"\ 
    <html><head>\ 
    <style type=\"text/css\">\ 
    body {\ 
    background-color: transparent;\ 
    color: white;\ 
    }\ 
    </style>\ 
    </head><body style=\"margin:0\">\ 
    <embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" \ 
    width=\"%0.0f\" height=\"%0.0f\"></embed>\ 
    </body></html>"; 
    NSString *html = [NSString stringWithFormat:embedHTML, urlString, frame.size.width, frame.size.height]; 
    UIWebView *videoView = [[UIWebView alloc] initWithFrame:frame]; 
    [videoView loadHTMLString:html baseURL:nil]; 
    [self.view addSubview:videoView]; 
    [videoView release]; 
} 


- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

- (void)viewDidUnload { 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 


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

@end 

它正确编译,当我打开它,我看到一个不正确的白色框,代码创建。我有一个关于这两个问题:

  1. 我怎么知道,如果视频会玩,这只是一个纯白色的盒子,从YouTube确实模拟器播放视频吗?

  2. 我该如何摆放这个盒子?

+0

代码真棒位,干杯! – Shawson 2012-06-10 12:00:06

+0

此代码是否适用于iOS 6? – Dee 2013-03-07 11:18:45

回答

13

刚刚测试过你的代码,它在iPhone上工作正常,Youtube视频虽然不支持在iOS模拟器上,所以你需要一个真正的设备进行测试。

我该如何摆放这个盒子?

您已经传递箱的X(20),Y(20),宽度(100)和高度(100)在该行:

[self embedYouTube:@"http://..." frame:CGRectMake(20, 20, 100, 100)]; 

要改变的位置事后查看,修改其物业:

videoView.center = CGPointMake(200, 100); 
+0

只是一个侧面说明这一点,如果你这样做的模式来看,视频结束后,我的应用程序行为异常,关闭模式的看法和UIButtons是反应迟钝。一旦我将其从模式视图中拉出,它就可以正常工作。 – steve 2012-04-14 02:52:08

+0

您好我有同样的问题,现在我成功了在设备上播放视频,但存在这样的视频在IOS版本5.1.1只打了另外一个问题,如果我想在下面的ios版本5.1.1播放视频什么,我应该怎么办? – Birju 2012-09-18 07:32:10

+0

嗨,我正在使用上面的代码播放视频。它适用于播放视频,但当我暂停视频回到应用程序,然后它崩溃。给EXC_BAD_ACESS。对此有任何想法。 – 2013-09-30 06:04:06

0

对于使用MonoTouch的和C#的,你可以将该类添加到您的项目,并用它来查看您的视频:

public class YouTubeViewer : UIWebView 
{ 
    public YouTubeViewer(string url, RectangleF frame) 
    { 
     string youTubeVideoHTML = @"<object width=""{1}"" height=""{2}""><param name=""movie"" 
          value=""{0}""></param><embed 
          src=""{0}"" type=""application/x-shockwave-flash"" 
          width=""{1}"" height=""{2}""</embed></object>"; 

     string html = string.Format(youTubeVideoHTML, url, frame.Size.Width, frame.Size.Height); 
     this.LoadHtmlString(html, null); 
     this.Frame = frame; 
    } 
} 

确保您传递的URL是您点击Share按钮时从Youtube提供的嵌入代码的URL。 (并检查复选框旧代码)

+0

问题是针对iOS – NSCoder 2015-02-08 09:33:03

+2

@NSCoder,这个答案是为iOS,MonoTouch的是一个名为Xamarin由公司提供的软件,可以让原生iOS应用程序开发C#,而不是现在不推荐使用的Objective-C。 (Swift) – TChadwick 2015-02-10 18:43:22

5

下面是在iOS 6中,并用新的YouTube嵌入代码兼容版本:

- (void)embedYouTube:(NSString *)urlString frame:(CGRect)frame { 
    NSString *html = [NSString stringWithFormat:@"<html><head><style type='text/css'>body {background-color: transparent;color: white;}</style></head><body style='margin:0'><iframe width='%f' height='%f' src='%@' frameborder='0' allowfullscreen></iframe></body></html>", frame.size.width, frame.size.height, urlString]; 
    UIWebView *videoView = [[UIWebView alloc] initWithFrame:frame]; 
    [videoView loadHTMLString:html baseURL:nil]; 
    [self.view addSubview:videoView]; 
} 
+0

你可以自动播放电影加载到webview后? – 2013-03-27 12:20:46

+0

我不再使用此代码,所以我不确定。你试过了吗?如果没有自动播放,我不会感到惊讶。我只是现在加载一个外部的MP4视频,它的效果很好。 – adriandz 2013-03-28 01:03:41

7

下面是示例代码,其在iOS工作正常5和更高版本,这是Youtube API提供的新实现,myWeb在这里是一个UIWebView。 showinfo=0在URL中将删除videoView中的顶部标题。

NSString *html = [NSString stringWithFormat:@"<html><body><iframe class=\"youtube-player\" type=\"text/html\" width=\"%f\" height=\"%f\" src=\"http://www.youtube.com/embed/q1091sWVCMI?HD=1;rel=0;showinfo=0\" allowfullscreen frameborder=\"0\" rel=nofollow></iframe></body></html>",frame.size.width,frame.size.height]; 
[myWeb loadHTMLString:html baseURL:nil]; 

希望这有助于你:)

+0

只有这个答案适合我。 – 2013-09-24 06:17:37

0

迅速实施:

let webView = UIWebView(frame: self.view.frame) // Position your player frame here 

self.view.addSubview(webView) 
self.view.bringSubviewToFront(webView) 

// Playback options: play in-line and start playing immediately 
webView.allowsInlineMediaPlayback = true 
webView.mediaPlaybackRequiresUserAction = false 

// Set the id of the video you want to play 
let videoID = "zN-GGeNPQEg" // https://www.youtube.com/watch?v=zN-GGeNPQEg 

// Set up your player 
let embededHTML = "<html><body style='margin:0px;padding:0px;'><script type='text/javascript' src='http://www.youtube.com/iframe_api'></script><script type='text/javascript'>function onYouTubeIframeAPIReady(){ytplayer=new YT.Player('playerId',{events:{onReady:onPlayerReady}})}function onPlayerReady(a){a.target.playVideo();}</script><iframe id='playerId' type='text/html' width='\(self.view.frame.size.width)' height='\(self.view.frame.size.height)' src='http://www.youtube.com/embed/\(videoID)?enablejsapi=1&rel=0&playsinline=1&autoplay=1' frameborder='0'></body></html>" 

// Load the HTML into your UIWebView 
webView.loadHTMLString(embededHTML, baseURL: NSBundle.mainBundle().bundleURL) 

另外,YouTube为开发者建立在他们的iOS版的YouTube播放其树立UIWebView为一个伟大的helper class您。

0

迅速4

func embedYouTube(_ urlString: String, frame: CGRect) {

let html = "<html><head><style type='text/css'>body {background-color: transparent;color: white;}</style></head><body style='margin:0'><iframe width='\(frame.size.width)' height='\(frame.size.height)' src='\(urlString)' frameborder='0' allowfullscreen></iframe></body></html>" 
    let videoView = UIWebView(frame: frame) 
    videoView.loadHTMLString(html, baseURL: nil) 
    view.addSubview(videoView) 
}