UIWebViewの代わりにMPMoviePlayerControllerを使用してYouTubeビデオを再生する


89

MPMoviePlayerControllerを使用していくつかのyouTubeビデオをストリーミングしようとしていますが、いくつか問題があります。私が使用しているコードはかなりシンプルで、URLをinitWithContentURLに渡すことで.m4vビデオを再生できます。ムービープレーヤーを起動すると、プレーヤーが表示されますが、約20秒後に消えます。シミュレータで試してみると、サーバーが正しく構成されていないという警告ビューが表示されます。Googleから特定の種類のビデオフィードを取得するためにURLで渡す必要がある引数はありますか?

NSURL *videoURL = [NSURL URLWithString:@"http://www.youtube.com/v/HGd9qAfpZio&hl=en_US&fs=1&"];
MPMoviePlayerController *moviePlayer;
moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:videoURL];

[moviePlayer play];

次のURLのhttp://www.youtube.com/watch?v=HGd9qAfpZioも試しました

引数&format = 1も確認し、両方の文字列の最後に追加しようとしましたが、運がありませんでした。


さらに情報を見つけましたが、それでも機能しません。誰かがこれをURLに使用することを提案しました: youtube.com/get_video ? video_id= ID &t=SIGNATURE&fmt=18私は自分のビデオIDを入力しましたが、署名がわからないのですか?そして、ビデオプレーヤーはまだ同じように動作します。プレーヤーを開き、10〜20秒後に閉じます。
jmurphy 2009年

回答:


78

自分のアプリ内でyoutubeビデオを再生する唯一の方法はUIWebViewUIWebView'sコンテンツとして再生する映画のYouTubeからの埋め込みタグを使用してを作成することです。UIWebView埋め込みオブジェクトがYoutubeリンクであることを検出し、WebビューのコンテンツがビデオのYouTubeプレビューになります。ユーザーがプレビューをクリックすると、ビデオがMPMoviePlayerControllerに表示されます。これはMuxecoidが提供したリンクで説明されている手法(アプリケーション内でYouTubeビデオを再生する方法)であり、これが(私が知る限り)アプリケーション内でYouTubeビデオを再生する唯一の方法です。YouTubeのURLを次のURLに渡すことで、YouTubeアプリケーションを起動できます。-[UIApplication openURL:]が、もちろん、これにより独自のアプリケーションが終了する、多くの場合望ましくあり。

残念ながら、MPMoviePlayerControllerYouTubeは動画ファイルへの直接リンクを公開していないため、YouTube動画を直接再生する方法はありません。


1
うん、それがアプリでYouTube動画を再生する唯一の方法です。代替案を探すために費やした2。品質もちょっと悪いです。
samvermette 2009

2年以上たった今でも他に方法はありませんか?
FABB

埋め込まれたYouTubeビデオを再生する場合、PlaybackFinishReasonおよびPlaybackState通知を取得する可能性はありますか?
Roshit

7
これが唯一の方法ではありません。Youtubeからmp4ファイルを取得できます。私はこれをAirPlayer Python Projectで行います。これにより、AppleTVでYouTubeビデオを再生できます。これを移植して現在のiOSプロジェクトで使用し、準備ができたらここにコードを投稿します。
hellozimi

7
残念ながら、直接リンクの使用は禁止されています。セクションII / 10。でdevelopers.google.com/youtube/terms:「あなたのAPI Clientは[...] YouTubeのプレイヤーまたは明示のYouTubeが承認し、他のビデオプレーヤーの使用以外のいかなる方法によってもYouTubeの視聴覚コンテンツの任意の部分にアクセスしないでしょう。」
Lvsti 2012

26

コードを使用している場合:

- (void)embedYouTube:(NSString*)url 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, url, frame.size.width, frame.size.height];  
   if(videoView == nil) {  
      videoView = [[UIWebView alloc] initWithFrame:frame];  
     [self.view addSubview:videoView];  
    }  
    [videoView loadHTMLString:html baseURL:nil];  
  }

ソース:

このリンクを参照してください

シミュレータではなく、デバイスでテストしてください。シミュレーターは常に青いボックスでクエスチョンマークを表示するため(クイックタイムプレーヤーはありません)。


23

上記のコメントで書いたように、自分が取り組んでいるプロジェクトでこれを行わなければなりませんでした。この問題を解決し、コードをgithubに送信しました。

ソースをチェックしてここでフォークできます

基本的にはyoutubeのURLを取り、iOSと互換性のあるすべての動画のURLを取得します。

これが何らかの助けになることを願っています!
乾杯


1
ありがとう!ところで、アップデートは最近のYouTubeの変更で問題を修正しました。
Peter DeWeese

1
これは、YouTubeのToSでは許可されていません。YouTubeがToSに従っていないことに気付いた場合、またはYouTubeが生成する埋め込みコードを変更した場合、アプリはいつでも動作を停止する可能性があるため、自己責任で使用してください。
Mathew 2013

13

YouTube内にビデオを配置できる誰かに偶然出会いましたMPMoviePlayerController。今では可能に見えます。

LBYouTubeView


@正常に動作しますが、[mpplayer stop]を使用すると、このビデオを停止すると、ビデオが実行されます。
ただし、

githubリンクもバックグラウンドでオーディオを再生していますか?
Khalid Usman

2

チューブビデオを再生するには、URLを渡す前にURLを抽出する必要があります MPMoviePlayer。直接再生することはできません。

私のgithubリポジトリには、これのデモ実装があります。

見る:

https://github.com/DpzAtMicRO/IOSYoutubePlayer

試してみてください、これはYouTubeビデオを直接ロードして再生することを可能にします MPMoviePlayer、他の動画と同じようにようになり、非常に優れたアプローチです。

編集:プロジェクトでこれを使用する前に、Readme.mdをよく読んでください


2
YouTubeのToSに対して、残念ながら。これを行うと、YouTubeが何をしているのかを認識していない限り、アプリの動作が期待できます。
Mathew 2013

私もしばらく前にYouTube APIの人にメールを送って、自分で動画のURLを解析してもいいかどうか尋ねました。これは、私が受け取った返信からの引用です。「サポートされているメカニズムはiframe埋め込みのみです。未加工のストリームアクセスは、フィーチャーフォン用に提供している低解像度のRTSPストリーム以外のToSではサポートされていません。」
Mathew

1
あなたは反対投票のポイントで私を納得させました。私はそれが誤りをマークするためのツールであるべきであり、賛成投票はYouTubeの埋め込み問題を解決しようとしている人々に最も関連があると私が思うこれらの回答のどれを示すのに十分であることに同意します。どうやら、StackOverflowは私の反対票をロックし、回答を編集しない限りそれを削除することはできません。
Mathew

すごい!私は編集して、あなたの反対票を削除するように要求できます!...しかし...必要ありません。
DD_

@Mathew多くの合法的なiOSアプリがこの種のことを行っており(YouTubeのAPIをバイパスしています)、指摘されているようにToSに違反していますが、Googleは多くの場合、製品がアクセスできるようにするので気にしていません。より多くの視聴者。
rmp251

1

新しい埋め込みコード用にiframeのsrc要素を取得して呼び出すのと同じくらい簡単です。

[self.webView loadRequest:[NSURLRequest requestWithURL:self.url]];


0

Googleが提供するiOSアプリケーションにYouTube動画を埋め込む公式な方法があります。

cocoapodsを介してライブラリをインストールします:pod "youtube-ios-player-helper"

インポート:クラスの#import “YTPlayerView.h” 使用UIViewと設定、YTPlayerViewまたはオブジェクトの作成YTPlayerViewプログラムで。

ビデオを読み込む: [self.playerView loadWithVideoId:@"M7lc1UVf-VE"];

またplayVideostopVideo利用可能なメソッドもあります。詳細については、このリンクにアクセスしてください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.