2015-09-11 5 views
41

Apple tvOSでYouTubeビデオを再生するにはどうすればよいですか?tvOSでYouTubeコンテンツを再生する方法

YouTubeの埋め込み機能は、OSには埋め込むことのできるUIWebViewがあるため、iOS 9で動作します。 新しいtvOSにはUIWebViewが含まれていないので、YouTubeの動画を埋め込む方法はわかりません。

+0

は、あなたが見たことがありますか? http://stackoverflow.com/questions/32493872/how-do-i-play-a-video-on-tvos-for-apple-tv/32551565#32551565「launchPlayer」のURLをYouTubeのURLに入れ替えてください。 –

+6

私はGoogleから利用規約に違反することなくこれを行うためのライブラリが必要になると思っています。だから、これを構築するには数ヶ月かかるかもしれない(最初に明らかになるYouTubeのtvOSアプリと共に)。 – Nick

+0

Plexは、新しい[AppleTV App](https://blog.plex.tv/2015/11/02/plex-on-the-new-apple-tv/)からYouTubeとVimeoのビデオを[後で見る/ Plex Itの機能](https://support.plex.tv/hc/en-us/articles/200392326-Using-the-Plex-It-Bookmarklet)。いくつかの[GitHub souce](https://github.com/plexinc-plugins/Services.bundle/blob/master/Contents/Service%20Sets/com.plexapp.plugins.youtube/URL/YouTube /ServiceCode.pys)は、ページスクレイピングを行っているようです。あれは正しいですか?彼らはどうやってこれを取り除くのか、誰にも気付かないのですか? – Nick

答えて

42

UIWebViewおよびMPMoviePlayerControllerは、tvOSでは使用できません。次の選択肢は、AVPlayerを使用してYouTube動画を再生することです。

AVPlayer標準のYouTube URLからYouTube動画を再生することはできません。 https://www.youtube.com/watch?v=8To-6VIJZRE。ビデオファイルへの直接URLが必要です。 HCYoutubeParserを使用すると、これを正確に達成できます。これはYouTube's TOSで許可されないであることを

NSString *youTubeString = @"https://www.youtube.com/watch?v=8To-6VIJZRE"; 
NSDictionary *videos = [HCYoutubeParser h264videosWithYoutubeURL:[NSURL URLWithString:youTubeString]]; 
NSString *urlString = [NSString stringWithFormat:@"%@", [videos objectForKey:@"medium"]]; 
AVAsset *asset = [AVAsset assetWithURL:[NSURL URLWithString:urlString]]; 

AVPlayerItem *avPlayerItem = [[AVPlayerItem alloc]initWithAsset:asset]; 
AVPlayer *videoPlayer = [AVPlayer playerWithPlayerItem:avPlayerItem]; 
AVPlayerLayer *avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:videoPlayer]; 
avPlayerLayer.frame = playerView.layer.bounds; 
[playerView.layer addSublayer:avPlayerLayer]; 

[videoPlayer play]; 

注:私たちは私たちに必要なURLを持っていたら、私たちはAVPlayerそうのようでそれを再生することができます。 自己責任で使用してください。 YouTubeがTOSに従っていないことに気づいた場合、またはYouTubeが生成した埋め込みコードをYouTubeが変更した場合、あなたのアプリはいつでも機能しなくなる可能性があります。

+1

HCYoutubeParserは引き続きサポートされていますか? – Shazam

+0

@Shazam GitHubで2年以上更新されていないので、いくつかの問題が存在する可能性があります。 –

+0

tvOSで実行できるライブラリを知っていますか? GTLYouTubeなどと同じように? –

5

悲しいことに、Appleのスタッフの人でさえ、これに「否定的」と答えました。 〜からApple Developer Forums thread on the topic

tvOSのWebViewはサポートされていないため、iframeの実装は機能しません。 TVMLはこの機能を提供していません。ダニエル・ストームの答えの

17

スウィフト2.0バージョン:ダニエル・ストームの答えへの追加として

let youTubeString : String = "https://www.youtube.com/watch?v=8To-6VIJZRE" 
let videos : NSDictionary = HCYoutubeParser.h264videosWithYoutubeURL(NSURL(string: youTubeString)) 
let urlString : String = videos["medium"] as! String 
let asset = AVAsset(URL: NSURL(string: urlString)!) 

let avPlayerItem = AVPlayerItem(asset:asset) 
let avPlayer = AVPlayer(playerItem: avPlayerItem) 
let avPlayerLayer = AVPlayerLayer(player: avPlayer) 
avPlayerLayer.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height); 
self.view.layer.addSublayer(avPlayerLayer) 
avPlayer.play() 
+1

HCYoutubeParserをSwiftにインポートするように設定しましたか? CocoaPodで試してみましたが、 'use_frameworks! 'のものは、私の既存のObj-Cコードを破壊します。 – Nick

+2

手動でparser.hと.mを入力しました – Burf2000

1

、あなたはまた、コードを使用して新しいTVML言語でこれを達成することができます

<lockup videoURL="http://mp4-url.mp4"> 
<img src="video thumbnail.jpg" /> 
</lockup> 

(これはあなたがYoutube TOSで許可されていない直接ビデオファイル(mp4)を必要とします)

EDIT、 How do I play a video on tvOS for Apple TV?

0

私はこの1つhttps://cocoapods.org/pods/youtube-parser

Youtube.h264videosWithYoutubeURL(testURL) { (videoInfo, error) -> Void in 
    if let videoURLString = videoInfo?["url"] as? String, 
     videoTitle = videoInfo?["title"] as? String { 
      print("\(videoTitle)") 
      print("\(videoURLString)") 
      self.playVideo(videoURLString) 
    } 
} 
6

XCDYouTubeKitを使用し、直接しばらくの間、iOSのYouTubeのビデオを再生する一般的な方法となっている、と開発者が最近にそれを更新:.JSソリューションも見つかりました新しいAppleTVをサポートします。

ここObjective-C exampleからのコードです:

AVPlayerViewController *playerViewController = [AVPlayerViewController new]; 
[self presentViewController:playerViewController animated:YES completion:nil]; 

__weak AVPlayerViewController *weakPlayerViewController = playerViewController; 
[[XCDYouTubeClient defaultClient] getVideoWithIdentifier:playlistItem.snippet.resourceId.videoId completionHandler:^(XCDYouTubeVideo * _Nullable video, NSError * _Nullable error) { 
    if (video) 
    { 
     NSDictionary *streamURLs = video.streamURLs; 
     NSURL *streamURL = streamURLs[XCDYouTubeVideoQualityHTTPLiveStreaming] ?: streamURLs[@(XCDYouTubeVideoQualityHD720)] ?: streamURLs[@(XCDYouTubeVideoQualityMedium360)] ?: streamURLs[@(XCDYouTubeVideoQualitySmall240)]; 
     weakPlayerViewController.player = [AVPlayer playerWithURL:streamURL]; 
     [weakPlayerViewController.player play]; 
    } 
    else 
    { 
     [self dismissViewControllerAnimated:YES completion:nil]; 
    } 
}]; 

Swift example here.

+0

TVML/TVJSインターフェイスからYTコンテンツを再生しようとしている場合は、ここで[方法を示す要点](https://gist.github.com/nickv2002/ b7bb28cdccc000bdb910)。 – Nick

+0

これはYouTube TOSにも違反するでしょうか? – Tobonaut

+1

はい、XCDYouTubeKitはそうです。関連項目:[XCDYouTubeKitを使用するアプリケーションのアップル認定に関する議論](https://github.com/0xced/XCDYouTubeKit/issues/121) – Nick

関連する問題