35

自己定義のプロトコルをテストするには、研究プロジェクト用にハードウェアアクセラレーションによるH.264デコードが必要です。

Webで検索を行っているので、Androidでハードウェアアクセラレーションによるビデオデコードを実行する方法をいくつか見つけました。

  1. ffmpeg libstagefright(libstagefrightの概要)を使用するか、ここのようにOSでlibstagefrightを直接使用します。
  2. 特定のハードウェアプラットフォームでOpenMaxを使用します。サムスンデバイスについてはこちら、クアルコムキンギョソウシリーズについてはこちら
  3. 一部の人々はPVplayerに言及しました、

一部の人々は、クアルコムの人たちが明らかに成功している間、libstagefrightが唯一の方法であると「言います」 。

現在、どちらの方法で機能するかわかりません。私は今少し混乱しています。すべてがうまくいくなら、私は確かにハードウェアに依存しない方法を好むでしょう。

Galaxy Tab 7.7(3.2&Enxyos)でH / Wアクセラレーションのビデオプレーヤーをいくつかテストしたので、VLC、Mobo、Rock、vplayer、rock、moboは正常に動作し、VLCは動作せず、vplayerにはレンダリングがあるようですパフォーマンスを犠牲にするバグ。

とにかく、私はRockplayerで「操作」を実行し、data \ data \ com.redirecting \ rockplayer内のすべての.soライブラリを削除しました。ソフトウェアのデコードは、ハードウェアのデコードが正常に機能しているときにクラッシュします。彼らはどうやってそれをしたのだろうか。ハードウェアアクセラレーションはハードウェアプラットフォームに依存しないように思われます。

誰かがこの問題を釘付けにすることができますか?または、追加情報やより詳細な情報を参照してください。

4

3 に答える 3

22

上記の質問に答えるために、Androidに関連するいくつかの概念を紹介します

OpenMAX AndroidはコーデックインターフェイスにOpenMAXを使用します。したがって、すべてのネイティブコーデック(ハードウェアアクセラレーションまたはその他)はOpenMAXインターフェイスを提供します。このインターフェイスは、コーデックを使用してメディアをデコードするためにStageFright(プレーヤーフレームワーク)によって使用されます

NDK Androidを使用すると、JavaアプリケーションはNDKを使用して基盤となるC /C++ネイティブライブラリと対話できます。これには、JNI(Java Native Interface)を使用する必要があります。

今あなたの質問に来ていますHow to tap native decoder to decode raw video bitstream?

Android 4.0バージョン以下では、AndroidはJavaレイヤーの基盤となるビデオデコーダーへのアクセスを提供していませんでした。OMXデコーダーと直接対話するには、ネイティブコードを作成する必要があります。これは可能ですが、OMXがどのように機能するか、およびこのOMXをNDKを使用してアプリケーションにマップする方法についての知識が必要になるため、簡単ではありません。

4.1(Jelly Beanバージョン)では、AndroidはJAVAAPIを介してアプリケーションレベルでハードウェアアクセラレーションデコーダーへのアクセスを提供するようです。新しいAPIの詳細については、http://developer.android.com/about/versions/android-4.1.html#Multimediaをご覧ください。

于 2012-07-07T22:19:18.810 に答える
1

ExoPlayer ( github )を使用します。

プラットフォームの MediaPlayer を置き換える、Google が後援するオープンソース プロジェクトです。パイプラインの各コンポーネントは、サンプル ソース (カスタム プロトコルから H.264 フレームを抽出する方法) からレンダリング (Surface、SurfaceTexture など) まで拡張可能です。

使用法を示す素敵なデモアプリが含まれています。

于 2016-05-11T22:23:24.153 に答える