2012-04-22 10 views
2

私は、さまざまなソースからローカルハードディスクにビデオをダウンロードできるMacアプリケーションを作成しています。これまでのところうまくいきますが、ダウンロードしている間にその動画を再生できるようにしたいと考えています。 QTKitのドキュメンテーションを見て、私は映画のデータをQTMovieオブジェクトにピース単位で送ることができる方法を見つけることができませんでした。ダウンロード中にQuickTimeムービーを再生するには?

QTKit、AVFoundationなどのシステムフレームワークで実現できる方法はありますか?私は本当にffmpegや他のサードパーティのライブラリを持ってこないようにしたいと思っています。

+0

これは、ムービーファイルのフォーマットによって異なります。一部のフォーマットはストリーミングされるように設計されており、他のフォーマットは不可能です。 –

+0

@Rob、私はいくつかのフォーマットをストリーミングできないことを知っています。ダウンロードしたい映画のほとんどは、ストリーミング可能な形式でなければなりません。そうでないものについては、play-while-downloading機能を無効にします。私は不可能なことをする方法を求めているわけではありません(すなわちストリームムービーをストリームできない形式で) – Sven

答えて

2

おそらく、QTKitではなくAV Foundationフレームワークを使用してください。最初にやりたいことはAV Foundation Programming Guideです。ガイドはiOSを大いに参照していますが、AV Foundationの機能は10.7以降、OS Xで利用できます。

+0

ヒントのおかげで、AVFoundationがMacでも利用可能であることはわかりませんでした。しかし、これは必要な機能を持っていないようです。 – Sven

+0

Sven、リンクされたページの半分をスクロールすると、AVPlayerオブジェクトを使用してアセットの再生を制御する方法と、AVPlayerLayerオブジェクトを使用してビデオを表示する方法について説明するセクションリンク "再生"があります。それはあなたが必要なものではありませんか? これらのクラスが現在ダウンロードされているファイル/アセットから読み取る機能についてはわかりません。 –

+1

ああ、ローカルファイルシステムまたはストリームURLからムービーを再生することは問題ではありません。ダウンロード中に映画を再生する方法に関する情報が必要です。理想的には、NSDataオブジェクトをネットワークから受け取ったときに渡すものが必要です。 – Sven

3

問題はQuickTimeムービーの仕組みにあります。それらはストリームベースのファイルではないので、一度に情報をチャンクに送るのは通常役に立ちません。 代わりに、それらは原子ベースのファイルであり、原子は任意の順序で来ることができます。
「moov」アトム(重要な情報を提供し、メディアデータを解釈するために必要です)は、QuickTimeムービーの作成方法によって異なります。それが最後であれば、完全にダウンロードされるまでムービーを再生することは不可能です。 moovデータが最初にある場合(たとえば、「インターネットの準備」オプションを使用してムービーを保存した場合)、QuickTimeはファイルの再生をすぐに開始できます。

MPGトランスポートストリームのようなフォーマットは、ストリーミングまたは「プログレッシブダウンロード」用に設計されています。

+0

プログレッシブ再生の仕組みの詳細については、[プログレッシブ再生:アトムストーリー](http://fabiensanglard.net/mobile_progressive_playback/index.php)を参照してください。 – 0xced

+0

ありがとうございますが、これは役に立ちません。ほとんどのムービーファイルはストリーミングの準備ができていて問題ではありません。私が必要とするものは、それらを再生するためのAPIです。 – Sven

関連する問題