7

少なくとも 4 つの mediaPlayer をロードしようとすると、そのうちの 1 つがロードしようとしているビデオを破損し、「このビデオを再生できません」という Android OS メッセージをトリガーします。

その他の情報:

3 つの mediaPlayers の場合、すべて正常に動作します。

4.2 とは異なる他の A​​ndroid バージョンでは、同じ 4 つのビデオで同じコードが機能します。

4 つのビデオは、デバイス上で個別に再生できます。フォーマットの問題はありません。

プログラムを起動して「このビデオを再生できません」というメッセージが表示された後、デバイスをリセットしない限り、他のアプリケーションでビデオを再生できなくなります。

VideoViews または surfaceViews に表示される独立した MediaPlayers の両方でこれを試しました。

Android 4.2 を実行している他のデバイスでもエラーを再現しました。Android 4.1.2 およびその他の Android 4 バージョンでは、コードが正常に機能したことを思い出せません。

4

1 に答える 1

1

Android では、メディア コーデックに関連するものはすべて、一貫した独自の API を使用する必要がある開発者から隠されているという考え方ですMediaPlayer

メディアを再生するとき、それはストリームであるか、外部デバイスにあるものであるかに関係なく、アプリケーションが助けを必要とするたびに、低レベルのコーデック/パーサーがインスタンス化されます。

ただし、ハードウェアのデコードに関連する特定の理由により、一部のコーデックは複数回インスタンス化できない場合があります。実際のところ、すべてのアプリケーションは、リソース (コーデック インスタンスなど) が不要になったときに、有効な状態で呼び出してリソースを解放する必要があります。MediaPlayer.release()

実際、私が言っていることは、Android Developers Web サイトのドキュメントに示されています。release

この MediaPlayer オブジェクトに関連付けられたリソースを解放します。MediaPlayer を使い終わったら、このメソッドを呼び出すことをお勧めします。特に、アプリケーションのアクティビティが一時停止された (その onPause() メソッドが呼び出された) か、停止された (その onStop() メソッドが呼び出された) 場合は常に、このメソッドを呼び出して MediaPlayer オブジェクトを解放する必要があります。オブジェクトを維持する必要があります。不要なリソース (メモリやコーデックのインスタンスなど) が保持されることに加えて、MediaPlayer オブジェクトが不要になった場合にこのメソッドをすぐに呼び出さないと、モバイル デバイスの継続的なバッテリー消費につながる可能性があり、そうでない場合は他のアプリケーションの再生に失敗する可能性があります。デバイスでは、同じコーデックの複数のインスタンスがサポートされています。

releaseしたがって、再生が完了したときに呼び出していないか、別のアプリがこの種のリソースへの参照を保持しています。

編集 :

同じ で複数のビデオをレンダリングする必要がある場合Activityは、2 つの選択肢があります。私の回答で言ったように、あなたが最初に望んでいたことは、低レベルの問題のために不可能であり、ちなみに iOS でもありません。

ただし、できること次のとおりです。

  • 再生しているメディアがリアルタイム ストリーミング コンテンツでない場合は、広く利用されている無料のビデオ エディターのいずれかを使用して、4 つのビデオを 1 つのビデオにまとめることができます次に、アクティビティでビデオをフルスクリーンでレンダリングします。 4 があるように見えますViews

  • リアルタイム/非録画コンテンツの場合は、最初のビデオをそのままにしておきます。すべてのビデオが同じコーデック/コンテナを使用してエンコードされていると想定しています。あなたが試みているのは、他の 3 つのビデオをトランスコードして、別のコーデックと別の形式を使用することです。Android でサポートされているコーデック/コンテナにトランスコードしていることを確認してください。これにより、Android が同時に異なるデコーダーを使用する可能性があります。これは、あなたが期待している結果と比較してやり過ぎだと思います。

  • MediaPlayer最後に、 +FFMPEGや単になどのデコードに別のバックエンドを使用できますFFMPEG。しかし、繰り返しになりますが、うまくいったとしても、これは非常にやり過ぎだと思います。

これを要約すると、これが機能するためには妥協が必要です。

于 2013-04-05T18:43:03.940 に答える