Android NDKのレビューサンプルに基づいて、ハードウェアデコーダ(OMX.xxx)を使用するためにMediaCodecまたはOpenMAXALインタフェース。C++を使用したAndroidモバイル(Snapdragon 820)のPlayerのMediaCodec(NDK)とOpenMAXの比較
私の質問は以下のとおりです。
が、これはモバイル(Android上のSnapdragon 820)上のハードウェアデコーダを使用するための最良の方法ですか?
OMX over MediaCodecを使用する利点はありますか?現在のAndroidヘッダーは、実際にはMPEG2/.ts MIMEタイプしかサポートしていません。私はあなたがOpenMaxを介してビデオ(mp4など)のストリーミングのデコードをサポートできることを期待しています - それは正しい評価ですか?
私の要件は次のとおりです。 1.一般的なコンテナのストリーミングオーディオとビデオの再生をサポートします。 2.デコード用にモバイルハードウェア(GPU + DSP)を活用します。 3.フレーム単位で画像処理を行います。 4.オーディオとビデオの独自のタイムシンクを書き込まないでください。
私はffmpegを使って基本的なプレーヤーを書いていますが、ハードウェアデコーダを使用できないので、それをフォローしません。
私は上記を達成する他のすべてのフレームワーク(無料または商用)には公開されています。
ケータン
こんにちはmstorsjo、すばらしい賛否両論の分析のためにありがとう。私は、FFmpeg + OpenCVを使って基本的なストリーミングを実装しました。私は必要なものすべてを行いますが、オーディオフレームを落とさなければならないため、同期は100%ではありません。私はMediaCodecのために考え、それはオンラインで述べたようにmp4、webpなどのフォーマットをストリーミングすることができます。私は二重チェックします。 MediaCodecはもう一度やり直すことになりそうです。 – Ketan
もう1つの質問 - MediaCodecはハードウェアデコーダを使用することを保証しますか?失敗した場合はswモードにフォールバックしますか? – Ketan
MediaCodecを使用すると、使用するコーデックを手動で選択できます。 「OMX.google。*」という名前の場合はSWコーデック、それ以外の場合はおそらくHWコーデックです。 'MediaCodec.createDecoderByType'を使うなら、実際には常に利用可能なHWコーデックが必要です。詳細については、http://stackoverflow.com/questions/37715529/how-to-know-android-decoder-mediacodec-createdecoderbytypetype-is-hardware-またはを参照してください。 – mstorsjo