2

サーフェスビューでレンダリングされたメディアプレーヤーを使用してビデオを表示するアクティビティ (アクティビティ A など) があります。
ユース ケースは、ビデオを一時停止し、別のアクティビティ (アクティビティ B など) を開始してから、アクティビティ A に戻ることです。
アクティビティ A は停止されますが、B に移動しても破棄されません。これは良いことです。
サーフェス ビュー (表示されないため) は破棄されます (通知コールバックから観察されるように)。
アクティビティ A に戻り、start() を使用してメディア プレーヤーを再起動すると、メディア プレーヤーはオーディオを再生しますが、ビデオは表示されません。次のようなエラーが Logcat に出力されます。

11-16 18:14:44.532: ERROR/Overlay(8630): Error = Invalid argument from qbuf

SurfaceHolder残念ながら、 as provided byの新しいインスタンスを使用しsurfaceCreated()ても役に立ちません (つまり、同じエラーが発生します)。

さまざまな投稿を読んだことがありますが、解決策は をリセットして完全に再起動することですが、エンド ユーザーはストリーム内でmediaplayerプレーヤーの準備が完了するまで待たなければならないため、効率的ではありません。cycle + seekTo last positio

オーディオが再生されるという事実で示されているように、ビデオ デコーダーと新しいsurfaceholder/view.

アクティビティを再開するときにビデオの再生を再開するための最善の解決策 (最善 = 最速) は何ですか?

4

4 に答える 4

1

Android 4 では可能です (申し訳ありませんが、私は 2.3 と 4.0 しか持っていません。3.0 ではテストしていません)。Surface と mediaplayer を使用する場合、mediaplayer のサーフェスを変更することはできません。ビデオビューについても同じことが言えます。

ログを印刷すると、別のアプリから戻ったときに surfaceview が破棄され、再び作成されたことがわかります。

Android 4.0 では、メディアプレーヤーのサーフェスまたはサーフェス ホルダーを変更できます。

于 2012-03-31T07:49:41.300 に答える
0

履歴スタックで一時停止し、アクティビティ B を表示しているときに、アクティビティ A が OS によって強制終了される可能性があるため、注意してください。それを予期するようにコーディングする必要があります。

速度が重要な場合は、アクティビティ B を開始せずに、代わりにビデオビューを非表示にして別のビューを表示することを検討してください。

于 2010-11-17T03:47:13.730 に答える
0

ありがとう。システムがリソースを必要とするため、アクティビティが破棄される可能性があるという事実を処理することは問題ありません。

私は上のビューで行くかもしれません。次に、戻るキーを押してビデオに戻るユーザーを処理する必要があります...

ht メディア プレーヤーの動作から、期待どおりに動作させるために何かが欠けているように見えます。つまり、オーディオが戻ってきました (これは、a/v のデマルチプレクサが正しく行われていることを意味します)。デコーダーとビデオ レンダラー。

于 2010-11-17T15:29:56.830 に答える
0

Surface と MediaPlayer オブジェクトの両方で構成されているため、VideoView を試してみることができますか

于 2010-11-17T03:10:02.243 に答える