web-dev-qa-db-ja.com

アプリでYoutubeビデオをiPhoneに保存する

アプリでのYoutubeビデオの再生は簡単で、文書化されています。

これには2つの問題があります。

  1. youtubeプレーヤーを閉じた後、ユーザーがもう一度再生したい場合は、再度オンラインストリーミングを待つ必要があります。
  2. オフラインで再生できない(自宅でビデオを読み込んで外出先で見る)

誰かがするコードを持っていますか:

  1. youtubeビデオをドキュメントフォルダーにダウンロードし、ダウンロードの進行状況を表示する
  2. ドキュメントフォルダーからファイルを読み込んで、ダウンロードしたビデオを再生します(インターネットに接続していない場合でも)
27
Biko

YouTubeからビデオをダウンロードするには:

  1. YouTube APIまたはその他の方法で、ダウンロード元のURLを取得します。
  2. NSOutputStream または NSFileHandle を一時ファイル(NSTemporaryDirectory()またはDocumentsディレクトリの一時的なファイル)。
  3. プログレスバーなど、必要な操作を設定します。
  4. NSURLConnectionを割り当てて開始し、URLからファイルをフェッチします。使ってはいけません sendSynchronousRequest:returningResponse:error:、 もちろん。
  5. の中に connection:didReceiveResponse:デリゲートメソッド。ダウンロードするデータの長さを読み取り、プログレスバーを適切に更新します。
  6. の中に connection:didReceiveData:デリゲートメソッド、出力ストリーム/ファイルハンドルにデータを書き込み、必要に応じて進行状況バーを更新します。
  7. connectionDidFinishLoading:またはconnection:didFailWithError:、出力ストリーム/ファイルハンドルを閉じ、必要に応じて一時ファイルの名前を変更または削除します。

再生するには、NSURLのfileURLWithPath:を使用して、Documentsディレクトリのローカルファイルを指すURLを作成し、リモートビデオと同じように再生します。

42
Anomie

このプロジェクトのクラスを使用しました: https://github.com/larcus94/LBYouTubeView それは私にとってはうまくいきます。 youtube動画をダウンロードできます。

私はこのコードを使用しました:

LBYouTubeExtractor *extractor = [[[LBYouTubeExtractor alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:(@"http://www.youtube.com/watch?v=%@"), self.videoID ]] quality:LBYouTubeVideoQualityLarge] autorelease];
[extractor extractVideoURLWithCompletionBlock:^(NSURL *videoURL, NSError *error) {
    if(!error) {
        NSLog(@"Did extract video URL using completion block: %@", videoURL);

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            NSData *data = [NSData dataWithContentsOfURL: videoURL];
            NSString *pathToDocs = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
            NSString *filename = [NSString stringWithFormat:(@"video_%@.mp4"), self.videoID ];
            [data writeToFile:[pathTODocs stringByAppendingPathComponent:filename] atomically:YES];
            NSLog(@"File %@ successfully saved", filename);
        });
    } else {
        NSLog(@"Failed extracting video URL using block due to error:%@", error);
    }
}];

上記の投稿で説明されている手法を使用して、ダウンロードの進行状況を表示できます。

7
Petr

これが私の例です: https://github.com/comonitos/youtube_video

Peter SteinbergerによるPSYouTubeExtractor.hクラスを使用しました。YouTubeのmp4ビデオのURLを取得でき、ダウンロードや表示よりも問題ありません。

NSURLConnection + NSNotificationCenter + PSYouTubeExtractor + NSMutableData

6
comonitos

私はYouTubeビデオをダウンロードする方法を個人的に知りません(コードが大きすぎてここで答えを出すことができません)。

ただし、これは完全なyoutubeのダウンロード例 here です。これは、LoadTubeと呼ばれるオープンソースのYouTubeダウンローダーです: これがソースコードへのリンクです

5
Kyle Howells

これらのプロジェクトを確認してください-

https://github.com/iosdeveloper/MyTube
https://github.com/pvinis/mytube

これらは間違いなくあなたを助けます!!

5
Saurabh

ビデオを再生して、一時ファイルが保存されている場所を見つけます。アクセスできる場合は、オフラインで表示できるようにドキュメントフォルダにコピーしてください。

1
Sean