質問

私はAndroid眼鏡で次の問題を回避しようとしています。

ポンツスペックは次のように言っています:

> http://www.khronos.org/registry/sles/ specs / opensl_es_specification_1.0.1.pdf - 8.12

プレイヤーがSL_PLAYSTATE_PLAYING状態にあるとき、これは SLPLAYITFインターフェースによって制御されている[8.32]を参照してください。 バッファは暗黙的に再生を開始します。飢餓の場合の場合 キュー内のバッファが不足するために、オーディオデータの再生は停止します。 プレイヤーはSL_PLAYSTATE_PLAYING状態のままです。のキューイング時 追加のバッファ、オーディオデータの再生が再開されます。ご了承ください キューに入れられたバッファの飢餓はオーディオデータの可聴ギャップを引き起こします ストリーム。プレイヤーが演奏状態にない場合、 バッファの追加がオーディオの再生を開始しません。

Alas私たちがAndroidに入ったら:

http://mobilepearls.com/labs/ Native-Android-API / NDK / Docs / OpenSLES / index.html - PCM

にオーディオをデコードします

プラットフォームの実装に応じて、復号化が必要な場合があります アイドル状態のままにできないリソース。したがって、それはお勧めできません 十分な数の空を提供しないことでデコーダを飢えています PCMバッファ、例えばAndroidシンプルなバッファキューから戻って戻って 別の空のバッファをエンキューすることなくコールバック。結果として デコーダの飢餓は指定されていません。実装はtoを選ぶかもしれません 復号化されたPCMデータをドロップし、復号化プロセスを一時停止するか 厳しいケースはデコーダを終了します。

このスペックのない動作は私のプロジェクトの進歩を完全に停止しています、そして私はそれを回避するのが最善の方法として失われます。メモリまたはディスク上のPCMへのファイル全体をデコードすることはオプションではありません。これは本当にストリーミング解決策になる必要があります。これに関する助けが大まかに高く評価されます

役に立ちましたか?

解決

この問題のまわりの方法ではないようです。他のプロジェクトは、それらの復号化を行うために下位レベルのAPI(LibStageFrightなど)を使用しているようです。そのメソッドはあなたがデータを取得することができます

[編集] 飢餓の問題についての方法はありません。Androidはスペックに従わないだけです。基本的には、メモリにバッファーし、データの流れを制御する必要があるときに一時停止を使用して復号化するように復元するようにしてください。

NDK Googleグループの件名に関する議論です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top