web-dev-qa-db-ja.com

tvOSでYouTubeコンテンツを再生する方法

Apple tvOSでYouTubeビデオをどのように再生しますか?

OSにはUIWebViewが組み込まれており、YouTubeの埋め込み機能はiOS 9で機能します。新しいtvOSにはUIWebViewが含まれていないため、YouTubeビデオを埋め込む方法がわかりません。

45
Carl Thomas

UIWebView および MPMoviePlayerController は、tvOSでは使用できません。次のオプションは、AVPlayerを使用してYouTubeビデオを再生することです。

AVPlayerは、標準のYouTube URLからYouTubeビデオを再生できません。 https://www.youtube.com/watch?v=8To-6VIJZRE。ビデオファイルへの直接URLが必要です。 HCYoutubeParser を使用すると、まさにそれを達成できます。必要なURLを取得したら、次のようにAVPlayerで再生できます。

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];

これは[〜#〜] not [〜#〜]YouTubeのTOS で許可されていることに注意してください。 ご自身の責任で使用してください。 YouTubeがTOSに従っていないことに気付いた場合、またはYouTubeが生成する埋め込みコードを変更した場合、アプリはいつでも動作を停止する場合があります。

44
Daniel Storm

ダニエルストームの答えのSwift 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()
18
Burf2000

XCDYouTubeKit は、しばらくの間iOSでYouTubeビデオを直接再生する一般的な方法であり、開発者は最近、新しいAppleTVをサポートするように更新しました。

Objective-Cの例 のコードは次のとおりです。

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];
    }
}];

ここでの迅速な例

6
Nick

悲しいことに、Appleスタッフもこれについて「否定」を繰り返しました。 トピックに関するApple Developer Forumsのスレッド

TvOSでのWebViewのサポートはないため、iframeの実装は機能しません。 TVMLはこの機能を提供しません。

5
Joel Farris

Daniel Stormの答えに加えて、コードを使用して新しいTVML言語でこれを達成することもできます。

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

(これを機能させるには、YouTube TOSでも許可されていない直接ビデオファイル(mp4)が必要です)

編集、.JSソリューションも見つけました: tvOSでApple TV? のビデオを再生するにはどうすればよいですか?

1
Bldjef

私はこれを使用しました 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)
    }
}
0
pillade