17

ユーザーがビデオをストリーミング/再生できるアプリの一部を作成しています。WiFi 接続がある場合にのみビデオをストリーミングできるように、機能を制限したいと考えています。次に、ビデオを保存して、3G のみ (またはそれ以下) の接続を使用している場合、ビデオをストリーミングできず、電話に保存されているビデオのみを再生できるようにします。

理想的には、MPMoviePlayerController でムービーをストリーミング/再生してから、ムービー データにアクセスして保存したいと考えています。ただし、MPMoviePlayerController API は動画データへのアクセスをサポートしていないようです。

ダウンロードしてから再生するシナリオは避けたいと思います。何か案は?

4

3 に答える 3

11

2つの解決策が思い浮かびます。この両方のソリューションでは、ファイルがプログレッシブに再生できる形式である必要があります。たとえば、ファイル全体を再生できるようにする必要はありません (ただし、それは前提条件です)。

  1. スレッドを使用してデータをダウンロードしてファイルに追加し、別のスレッドからファイルを再生します。そのためには、MPMoviePlayerController で EOF イベントを処理し、キャッシュ ファイルが追加されるまで再生を一時停止してから、同じポイントから再開できる必要があります。

これまでのところ、MPMoviePlayerController が EOF イベントを処理できないため、これを行っている人は機能しません。(まだ自分でテストしていません)[ MPMoviePlayerControllerによるプリロードが成功した後のビデオのディスクへのキャッシュ

  1. ファイルからの再生をスキップし、ローカル HTTP サーバーをセットアップして、そこから (localhost 上で) ストリーミングします。これもテストされていません。これは、MPMoviePlayerController が、ファイルを直接読み取るよりも、HTTP ストリームからの方が、欠落したデータのイベントをより適切に処理するというものです。欠点は効率が悪いことかもしれませんが、それは CPU のわずかな増加だと思います。ネットワーク インターフェイスがそれを処理するかどうかはわかりませんが、問題ではないと思います。

私は実用的な解決策を持っていませんが、私もそれを望んでいるので、この回答をwikiとして残します。

于 2009-10-07T21:39:54.260 に答える
2

これを機能させる方法はありますが、独自の HTTP ライブ ストリーミング ダウンローダーを作成する必要があります。

基本的に、.m3u8 ファイルを解析し (これは非常に単純な標準ですが、別のストリームと、ストリームが単純にドロップアウトし、続行するには新しいプレイリストが必要になる可能性があるため注意が必要です)、チャンクを .ts 形式でダウンロードして、 Documents フォルダーや Caches などのローカル ストレージ。

次に、ローカル HTTP サーバーをセットアップして、MPMoviePlayerController または AVPlayer が HTTP 経由でファイルにアクセスできるようにする必要があります (ローカル ファイル パスにアクセスしないため)。元のプレイリストから自分で作成する必要があります。CocoaHTTPServer はこれに最適です。

それがすべて完了すると、うまく機能します。ローカル HTTP URL をムービー プレーヤーに提示する前に、最初のチャンクをダウンロードする際に多少の遅延が発生することは避けられませんが、その後はダウンロード、録画、プレビュー再生がシームレスに行われます。

幸運を!

于 2013-04-07T12:07:49.977 に答える
1

iPhoneはプログレッシブダウンロードを使用しているため、デバイスに保存されません。そのためには、明示的にダウンロードしてから、ローカルフォルダからビデオを再生する必要があります。

于 2009-08-29T14:20:57.293 に答える