6

私はしばらくこのトピックを調べてきましたが、どうすればこれを達成できるのか本当にわかりません。HTTP ストリームからのビデオがあり、そのビデオを自分のアプリで再生できるようにしたいとしましょう。同時に、ビデオもディスクに永続化されます。AVFoundationまたは MediaPlayer フレームワーク で動画を再生でき、 NSURLRequest.

ただし、これらは 2 つの異なるプロセスであり、ビデオを 2 回ロードする必要があります。これら2つを組み合わせることができるかどうか、またどのように組み合わせることができるかわかりません。これは可能/実現可能ですか?

4

2 に答える 2

8

それが可能だ。ただし、YouTube 動画の目的でお勧めしたくはありません。Youtbe TOSに従っているため。

次の理由によります。

22.4

あなたのアプリには、ユーザーが YouTube 利用規約に準拠していない YouTube コンテンツをダウンロードできる可能性がある情報が含まれていることがわかりました。

「...あなたは、そのコンテンツのサービス上で YouTube によって表示される「ダウンロード」または同様のリンクが表示されない限り、コンテンツをダウンロードしてはなりません。あなたは、コピー、複製、配布、送信、放送、表示、販売、ライセンス付与、またはYouTube またはコンテンツの各ライセンサーの事前の書面による同意なしに、その他の目的でコンテンツを悪用すること。YouTube およびそのライセンサーは、サービスおよびコンテンツにおいて明示的に付与されていないすべての権利を留保します。」

次のサイトの質問も参照してください。それはとても重要です。あなたは間違いなく読む必要があります。

http://www.iphonedevsdk.com/forum/business-legal-app-store/88260-youtube-downloader.html


とにかく、今はそれらを実装する方法について説明します。

を。ストリーミング サービスの実装は難しくありません。Apple のサンプル コードによると、簡単に実装できます。次の点に注意してください。これはAVPlayerを使用しています。3G で、Wifi をテストしました。大丈夫です。どのようにテストするのですか?ビデオをサーバーにアップロードするか、ビデオ リンクを取得します。ソース コード xib textField にコピー アンド ペーストします。

スティッチストリームプレーヤー

b. ビデオのダウンロードも同時に利用できます。AFネットワーキングをお勧めします。それのARCサポート。アプリの状態がバックグラウンドの場合、ダウンロードは続行されます。

AFネットワーキング

ダウンロードする方法?

NSURLRequest *request = [NSURLRequest requestWithURL:"your_http_video_url" cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:20];

AFURLConnection *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

NSArray *docPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docPath = [[docPaths objectAtIndex:0] stringByAppendingPathComponent:"your_save_video_name.mp4"];

operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];

[operation setDownloadProgressBlock:^(NSInteger bytesRead, long long 
totalBytesRead, long long totalBytesExpectedToRead)
{
    //do stuff. about upadte progressbar...
}];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
{
  NSLog(@"downloadComplete"); // show alertView to user.
}];
[operation start];
于 2012-08-13T00:48:30.933 に答える
1

この優れた答えをチェックしてください:

https://stackoverflow.com/a/23754994/1509392

これは、AVURLAsset を使用してこれを実行し、resourceLoader オブジェクトにデータを提供する方法を説明しています。アイデアは、resourceLoader がデリゲートにメディア データを要求し、それをソースからダウンロードしてディスクに保存できるようにするというものです。

于 2014-08-29T10:16:14.520 に答える