Dou*_*ith 6 youtube cocoa-touch objective-c youtube-api ios
我有UITableView完整的YouTube视频缩略图,当他们点击其中一个时,我想自动开始全屏播放YouTube视频而无需用户看到添加的视图或进行任何进一步的互动,而不是点击缩略图.
基本上,我根本不想看到带有红色播放图标的YouTube视频播放器.
我打算用youtube-ios-player-helper/YTPlayerView来完成这个,我明白它只是雇用了一个,UIWebView但我似乎无法弄清楚如何让它工作.
如果我在我的类上创建一个实例变量,请将自己设置为委托并选择一个随机视频进行观察:
let YouTubePlayer = YTPlayerView()
override func viewDidLoad() {
super.viewDidLoad()
YouTubePlayer.delegate = self
YouTubePlayer.loadWithVideoId("apKJikXWU2g")
...
}
Run Code Online (Sandbox Code Playgroud)
然后当调用委托方法时:
func playerViewDidBecomeReady(playerView: YTPlayerView!) {
YouTubePlayer.playVideo()
}
Run Code Online (Sandbox Code Playgroud)
但大部分时间它都会在我的AppDelegate中崩溃并显示以下消息:
11月23日23:34:44 rtcreporting [73827]:伐木开始......
11月23日23:34:44 rtcreporting [73827]:setMessageLoggingBlock:调用
或者如果我禁用断点但它会在视频播放之前获得大量的自动布局约束投诉消息,它将起作用,表明某些事情在某种程度上是生气.
这是因为我在使用UIView子类而没有将其实际添加到视图层次结构中吗?
如何在某个事件发生之后完成自动播放YouTube视频的行为,而不会泄露出愚蠢的中间视图?
在这里,您不必看到youtube徽标.
定义youtube iFrame,'%@'以后在提供给UIWebView时需要用youtube视频ID 替换该部件
#define youtubeVideoPlayUrl
@"<html><head><style>body{margin:0px 0px 0px 0px;}</style></head> <body> <div id=\"player\"></div> <script> var tag = document.createElement('script'); tag.src = 'http://www.youtube.com/player_api'; var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); var player; function onYouTubePlayerAPIReady() { player = new YT.Player('player', { width:'%f', height:'%f', videoId:'%@', events: { 'onReady': onPlayerReady } }); } function onPlayerReady(event) { event.target.playVideo(); } </script> </body> </html>"
Run Code Online (Sandbox Code Playgroud)定义UIWebView名称对象videoWebView以显示iFrame.您可以将高度和宽度设置为零,这样就不会阻挡屏幕.它就像一个隐藏的iFrame.
self.videoWebview = [UIWebView alloc] init];
Run Code Online (Sandbox Code Playgroud)我建议您使用自己的默认图像和图像顶部的播放按钮,以避免显示"Youtube"视频徽标.完成后,使用以下代码全屏播放YouTube视频
- (void)onPlayYouTubeVideo:(UIButton *)sender
{
NSString *youtubeVideoID = YOUR_YOUTUBE_VIDEO_ID;
NSString *html = [NSString stringWithFormat:youtubeVideoPlayUrl,
_videoWebView.frame.size.width, _videoWebView.frame.size.height, youtubeVideoID];
_videoWebView.mediaPlaybackRequiresUserAction = NO;
_videoWebView.delegate = self;
[_videoWebView loadHTMLString:html baseURL:[[NSBundle mainBundle] resourceURL]];
}
Run Code Online (Sandbox Code Playgroud)我正在使用这样的酒店预订应用程序.
我为你创建了一个演示应用程序.
加载webView html的源代码取自:http: //iphoneincubator.com/blog/audio-video/how-to-play-youtube-videos-within-an-application
@interface ViewController : UIViewController
@property (nonatomic, strong) UIWebView *webView;
@end
Run Code Online (Sandbox Code Playgroud)
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 300, 200)];
self.webView.layer.borderWidth = 1.0;
self.webView.layer.borderColor = [UIColor redColor].CGColor;
self.webView.backgroundColor = [UIColor blackColor];
self.webView.center = self.view.center;
[self.view addSubview:self.webView];
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>";
NSURL *url = [NSURL URLWithString:@"https://www.youtube.com/watch?v=K14RnTVt194"];
NSString* html = [NSString stringWithFormat:embedHTML, url, self.webView.frame.size.width, self.webView.frame.size.height];
[self.webView loadHTMLString:html baseURL:nil];
}
Run Code Online (Sandbox Code Playgroud)
你应该看到这个:

当您按下播放按钮时,它会全屏显示.
您可能想要创建一个方法,该方法接受自定义单元类中youtube视频的URL.
然后在View Controller的cellForRowAtIndexPath:方法中,您可以调用自定义单元格loadYouTubeVideoWithURL:方法从数据源加载Youtube视频网址.
| 归档时间: |
|
| 查看次数: |
7226 次 |
| 最近记录: |