0

バックグラウンドでバッファリングが完了した後、MediaPlayer新しいでビデオストリームを再生しようとしています。Activityなぜ別のActivity?これはビデオ再生ライブラリの一部であり、現在アクティブなレイアウトに関係なく、ビデオはユーザーのアプリをオーバーレイする必要があります。

私の考えは、MediaPlayerオブジェクトを作成し、(prepareメソッドを使用して)バッファリングを開始し、バッファリングが完了した後、ビデオを表示Activityするための新しいを開始することです。SurfaceView新しいでは、のを(withメソッド)Activityに割り当てて再生を開始しましたが、成功しませんでした。ビデオの再生なしで表示されます。SurfaceHolderSurfaceViewMediaPlayersetDisplaySurfaceView

問題は、メソッドがその前のメソッドで設定されてMediaPlayer's prepareいることを期待していることだと思います。SurfaceHoldersetDisplay

このセットアップを機能させるためのアイデアはありますか?

4

3 に答える 3

1

さて、何週間もの試行錯誤とさらなる調査の結果、答えは次のとおりです。

現在のバージョンの Android SDK では、ビデオをバックグラウンドでプリロードする方法がありません。これは、後者がプリロードを開始VideoViewするMediaPlayerために作成された Surface を必要とするためです。したがって、 (またはを使用して) プリロードを開始する前に、 yourVideoViewまたは yourMediaPlayerが (一時的に) アプリケーションのレイアウトの可視部分である必要があります。このソリューションでは、これらをユーザーのレイアウトに挿入するか、一時的なアクティビティを開始して Surface を初期化する必要がありますが、これは対象 (ビデオ SDK) には侵襲的すぎます。prepare()prepareAsync()Views

ユーザーがバッファリングの完了を待たずにビデオを表示する必要があり、アプリケーションのレイアウトを制御できない場合は、完全なビデオを SD カードに保存し、後で再生を開始することをお勧めします。

于 2012-09-17T10:03:17.650 に答える
0

私があなたに言ったこと、そしてそれは私のために働いた、

クラスを作成して非同期を拡張し、OnPrepared Listenerを実装してから、メソッドで

doinbackgroung(){
Display display =getWindowManager().getDefaultDisplay();
video_view.setOnPreparedListener(this);
video_view.setVideoURI(Uri.parse(path)); 
return null;
} 

その後、onPrepared()でvideo_view.start();

横向きと縦向きの両方のモードでビデオを適切に再生したい場合は、onVideoSizeChangedListenerを実装することもできます。これはうまくいくようです。

于 2012-08-17T12:28:17.963 に答える
0

Async タスクを開始し、メソッド doinBackground() の本体内で onBuffering リスナーを開始すると、データをキャッシュに保存し、ビデオを再生できます。これで必要なタスクを実行できる場合があります。

于 2012-08-17T12:05:50.577 に答える