2013-11-21 71 views
0

我正在製作這個iPhone應用程序,允許用戶觀看YouTube視頻和Vimeo視頻。我想知道是否有一個自定義播放器可以加入到我的應用中,該播放器將從YouTube鏈接或vimeo鏈接播放視頻。這也必須與iOS 7兼容。謝謝!iPhone SDK與YouTube的自定義視頻播放器

+0

什麼問題與Web視圖?? –

+0

webview有嵌入式的YouTube視頻播放器(在我看來,這看起來並不專業)。有一個名爲ProTuber的應用程序可以完成同樣的功能。 – Username

+0

錯誤。 ProTuber使用webview在頂部添加自定義工具欄。檢查這個http://stackoverflow.com/questions/9060153/play-youtube-videos-in-iphone-app-without-using-uiwebview –

回答

0

可能您正在尋找AVFoundation.framework。只需將它添加到您的項目中,並且您可以使用其AVPlayer組件來完全自定義您的界面。這將是這樣的:

-(void)viewDidLoad { 
//prepare player 
self.videoPlayer = [AVPlayer playerWithURL:<# NSURL of your youtube video #>]; 
self.videoPlayer.actionAtItemEnd = AVPlayerActionAtItemEndPause; 

//prepare player layer 
self.videoPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:self.videoPlayer]; 
self.videoPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
self.videoPlayerLayer.frame = self.view.bounds; 
[self.view.layer addSublayer:self.videoPlayerLayer]; 

//add player item status notofication handler 
[self addObserver:self forKeyPath:@"videoPlayer.currentItem.status" options:NSKeyValueObservingOptionNew context:NULL]; 

//notification handler when player item completes playback 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerItemDidReachEnd:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.videoPlayer.currentItem]; 
} 

//called when playback completes 
-(void)playerItemDidReachEnd:(NSNotification *)notification { 
[self.videoPlayer seekToTime:kCMTimeZero]; //rewind at the end of play 

//other tasks 
} 

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
if ([keyPath isEqualToString:@"videoPlayer.currentItem.status"]) { 
//NSLog(@"player status changed"); 

    if (self.videoPlayer.currentItem.status == AVPlayerItemStatusReadyToPlay) { 
     //player is ready to play and you can enable your playback buttons here 
    } 
} 
} 

和正常人一樣VC可以添加按鈕或其他物品來調用這些方法回放:

-(IBAction)play:(id)sender { 
    [self.videoPlayer play]; 
} 
-(IBAction)pause:(id)sender { 
    [self.videoPlayer pause]; 
} 

請確保您刪除以前你之前添加的觀察員離開了VC否則這些都是會泄漏:

//remove observers 
@try { 
[self removeObserver:self forKeyPath:@"videoPlayer.currentItem.status" context:NULL]; 
} 
@catch (NSException *exception) {} 
@try { 
[[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidPlayToEndTimeNotification object:self.videoPlayer.currentItem]; 
} 
@catch (NSException *exception) {} 

從蘋果公司的詳細說明,請here。希望你會發現它有幫助。

+0

以下所有這些會在.h(導入AVFoundation框架後)? – Username

+0

完全不是......你如何期待'viewDidLoad'出現在.h !!! –

+0

你真的嘗試過嗎?通過視頻網址播放** YouTube **視頻真的有效嗎? – cprcrack

0
 
1) Youtube uses flash which does not work with native mediaplayer. 
2) Native media player either needs a file or it can live stream url which use HTTPLiveStreaming (it does not support RTSP). 

簡而言之,他們工作在不同的協議上,不能互相交談。 但是,您可以使用第三方API下載YouTube視頻然後播放,但這需要您的用戶等待,直到整個文件被下載。

我會建議你使用webview。 here是一篇很好的文章,展示瞭如何做到這一點。 YoutubeHacks是一個相同的開源工具。

+0

Youtube我認爲有一個HLS版本,另一種方式是使用第三方rtsp播放器和android手機rtsp鏈接。即。該鏈接youtube爲android玩家提供。 http://streammore-tv.tumblr.com/post/34794206547/歡迎這個測試版程序已過期,但還有其他玩家。 –

相關問題