問題タブ [openmax]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Jelly Bean より前の Android での H.264 のハードウェア アクセラレーション ビデオ デコード
私はビデオ会議プロジェクトに取り組んでいます。ビデオ フレームのエンコードとデコードにソフトウェア コーデックを使用していましたが、これは低解像度 (最大 320p) で問題なく動作します。また、最大 720p までの高解像度のアプリケーションをサポートする予定です。ハードウェア アクセラレーションがこの仕事をかなりうまくやってのけることを知りました。
ハードウェア コーデック API メディア コーデックは Jelly Bean 以降で使用できるため、エンコードとデコードに使用しましたが、正常に動作しています。しかし、私のアプリケーションは 2.3 からサポートされています。したがって、30fps で 720p の H.264 フレームのハードウェア アクセラレーション ビデオ デコードが必要です。
H.264 のハードウェア デコーダーは 2.1 から、エンコーダーは 3.0 から利用できると読んだことがあります。このサイトに掲載されている多くの記事や質問を確認し、先に進むことができることを確認しました。
私は舞台恐怖症のアーキテクチャについてここで読んでいました - 建築とここ - 舞台恐怖症がどのように機能するか
そして、ここで OMX コーデックについて読みました- use-android-hardware-decoder-with-omxcodec-in-ndk。
起動に問題があり、その実装についていくつかの混乱があります。それについての情報が欲しいです。
- コードで OMX コーデックを使用するには、Android ソース ツリー全体を使用してプロジェクトをビルドする必要があります。または、AOSP ソースからいくつかのファイルを追加することで実行できます (はいの場合)。
- それを達成するために従うべき最初からの手順は何ですか。
誰かがこれに関するガイドラインを教えてもらえますか
ありがとう...
android - mpeg2 ts アンドロイド ffmpeg openmax
セットアップは次のとおりです。
- マルチキャスト サーバー 1000Mbs、UDP、Mpeg2-TS Part 1 (H.222) ストリーミング ライブ TV チャンネル。
- クアッドコア 1.5Ghz Android 4.2.2 GLES 2.0 レンダラー。
- FFMpeg ライブラリ。
- Eclipse Kepler、Android SDK/NDK など。Windows 8.1 上で動作します。
- 出力画面 1920 x 1080、2048 x 1024 のテクスチャを使用し、毎秒 35 ~ 45 フレームを取得しています。
アプリ:
- レンダラー スレッドは継続的に実行され、メディア イメージの準備ができたときに GPU にセグメントをアップロードすることで単一のテクスチャを更新します。
- メディア ハンドラー スレッドは、サーバー/ローカル ストレージからメディアをダウンロードして処理します。
- UDP パケットをバッファリングするためのビデオ スレッドと、パケットをフレームにデコードするためのビデオ スレッド。
ffmpeg を UDP ストリームに正常に接続しており、パケットはバッファリングされ、一見正常にデコードされています。パケット バッファは十分にあり、アンダー/オーバーフローはありません。私が直面している問題は、フレームを切り刻んでいるように見えることです (つまり、非常に多くのフレームのうち 1 つだけを再生しています)。I/P/B フレームを区別する必要があることは理解していますが、現時点では手がかりがありません。Iフレームを検出するためにハックを試みましたが、役に立ちませんでした。さらに、フレームを画面の 4 分の 1 未満にレンダリングするだけです。だから私は全画面デコードを使用していません。
デコードされたフレームは、ページのティアリングをカットするために別のバッファーにも格納されます。私が変更したバッファの数も、1 から 10 に変更しましたが、うまくいきませんでした。
OpenMax IL について私が見つけたところによると、それは MPEG2-TS Part 3 (H.264 および AAC) のみを処理しますが、独自のデコーダーを使用できます。独自のデコード コンポーネントを追加できることを理解しています。このルートを試す価値はありますか、それともffmpegを続行する必要がありますか?
フレーム デコーダー (レンダラーのみが準備が整ったときにフレームを変換およびスケーリングします) /* * この関数はパケットを処理し、* フレームの準備が整うまで、またはパケットがなくなるまでデコードを続けます */
パケット リーダー (pthread として生成) void *mainPacketReader(void *voidptr) { int res;
レンダラーは単にこれを行うだけです // テクスチャはこの関数を呼び出す前に既にバインドされています
過去には、libvlc にもオーディオ同期の問題があったため、ffmpeg を使用してすべてのロバ作業をゼロから行うことにしました。
ビデオ再生の途切れを止める方法(VLCプレーヤーでうまく機能する)、またはおそらく別の方法でダウンする方法についての指針があれば、真剣に感謝します。
EDIT Iフレームのハックを削除しました(まったく役に立たない)。sws_scale 関数をレンダラーからパケット デコーダーに移動します。そして、udp パケット リーダー スレッドはそのままにしました。
その間に、パケット リーダー スレッドとパケット デコーダ スレッドの優先度をリアルタイムに変更しました。それを行ってから、ドロップされたパケットが大量に流されることはありません。
android - OMX logcat メッセージから始まる MediaCodec エラーをデバッグする方法は?
MediaCodec を使用すると、多くの場合、OMX レイヤーからエラー メッセージが表示されます。それほど些細ではない問題をデバッグするために、それらをどのように使用できますか? たとえば、h264 ストリームをデコードするためのコーデックの作成に失敗することがあるアプリケーションがあります。Samsung S4 (I9505) などの一部のデバイスでのみ発生するようですが、S3 や Nexus 4(old) では発生しません。S4 では、ほとんどの場合、同じビデオが正常にデコードされます。コーデックを作成する前に、OpeGL を含む集中的な計算が行われます。失敗する行は次のとおりです。
logcatcodecInfo[0].getName()
に値OMX.qcom.video.decoder.avc
と次の出力がある場合:
また、デバイスに依存するエラーの場合、開発者は問題を解決するために何ができますか?
android - Android カメラ ハードウェア実装からのハードウェア エンコーダーの使用
ハードウェア エンコーダーを使用して、hardware/ti/omap3/camera/CameraHardware.cpp ファイルから JPEG イメージ ファイルを作成したいと考えています。現在、libjpeg を使用してエンコードを行っています。Java コードからはハードウェア エンコーディングが機能していますが、ネイティブ コードからの使用方法がわかりません。誰かが私を正しい方向に向けることができますか? 多くの Google 検索では、関連する結果が得られませんでした。
ありがとう
android - OpenMax アンドロイド
NDK の最新リリースには、native-media を呼び出す例があります。標準の android メディア プレーヤーによるビデオ レンダリングと、OpenMax AL のネイティブ ライブラリを使用した 2 つの例があります。Android API14 から、android が自動的にハードウェア アクセラレーションを使用することが参照されます。コアでは、メディア プレーヤーが openMax テクノロジを使用してビデオをデコードするということですか?
前もって感謝します 。
android - Android、ネイティブ OpenGL/OpenMAX、スクリーン キャプチャ
使用事例
USBを使用してAndroid画面をPCにミラーリング
潜在的な(ネイティブ)実装アプローチ
- Android オープンソースを使用して、必要に応じてスクリーンレコードを変更し、ADB を使用して Android デバイスに再インストールします
- OpenGL / OpenMAXなどのよく知られたネイティブ API を使用して画面をキャプチャする
討論
アプローチ #1は確かに機能します (シェル アカウントの下で)。ただし、Android OS が更新されるたびに、OS の変更に対応するためにカスタム コードを更新する必要があります。アプローチ #2では、API は固定されたままであり、 OS の変更を心配する必要がある場合、問題は OpenGL/OpenMAX のみを使用してミラーリングを実装できるかどうかです。
質問
上記のことを踏まえて、USB経由でAndroid画面をミラーリングするための最良の方法は何でしょうか?
linux - gstreamer の gst-launch パイプラインをどのように構築しますか?
ビデオファイルがあるとしましょう。
私が調べた限りでは、まずmediainfo
コマンドで使用するコンテナを知る必要があります。
次に、コンテナのデマルチプレクサを見つける必要があるため、そうします
などの適切なデマルチプレクサがあるのでoggdemux
、ビデオとオーディオを分割できます。ビデオを表示したい場合は、まずコーデック名を知る必要があり、それをデコードして画面に出力する必要があります。
出力に戻ってmediainfo
、ビデオを探しに行きますFormat
。
あなたは見つけtheoradec
て、その詳細を確認します
と を参照してsink
くださいsrc
。が見つかったので、表示されているビデオを出力するための最終的なシンク ( など) を見つける必要がありsrc
ます。 video/x-raw
xvimagesink
私はこれをすべて日本語のWeb ページに基づいて書いているだけで、これ以上(英語でも日本語でも)説明しているページは他に見つかりませんでした。
mediainfo などに基づいてパイプラインを完成させる方法を説明しているページを見つけたいです。Web ページを読んだ後でも、要素間の機能を要素に一致させる方法がわかりません。
パイプラインをどのように構築しますか?
キャップの合わせ方は?