2011-01-13 13 views
27

これまで私がこれまで行ってきたことはここにあります。私はアンドロイドでFFmpegを構築し、それをうまく使用することができます。私はFFmpegにビデオをロードすることができました。パフォーマンスを節約するため、FFmpegからJNIを通してjavaにフレームを渡すのではなく、NDKにビデオプレーヤーを書きます。私は、ビデオからOpenGLサーフェイスにフレームを送りたいと思います。私は、ビデオの各フレームを取得してOpenGLサーフェイスにレンダリングする方法を理解するのに問題があります。私は運がないので、数週間はこれを理解しようとしている。うまくいけば、誰かが正しい方向に私を指すことができます。NDK、OpenGL ES、FFmpegを使用したAndroidビデオプレーヤー

ありがとうございます!

+0

こんにちはKieran、私はFFmpegとアンドロイドndkを使ってフォーマットを変換し、オーディオやビデオを再生しようとしています。私はウェブ上でこれに関するリソースやガイダンスを見つけることはできません。長い時間の後、私はこのリンクhttps://github.com/havlenapetr/FFMpegを見つけました。しかし、この例をコンパイルして実行することはできません。私に助けてください、または私にreflinkを与えてください - どのように私はアンドロイドでFFmpegファイルを使用してオーディオ/ビデオを再生することができます....ありがとう – praveenb

+0

Praveenb、 私はFFmpegを最終的にコンパイルし、私は少しconfigureスクリプトで遊ばなければならなかった。私はFFmpegの最新版を使用していません。私はそれを動作させるためにsws_scale関数を利用している少し古いバージョンをダウンロードしました。私はあなたが今現在どこにいるのか、どのような種類のエラーが出てきたのかを教えてくれるように働くのを手助けするために最善を尽くすことができます。静的ライブラリを構築するのは難しいことではありません。 – DRiFTy

+0

こんにちは、FFmpegをAndroid用にビルドするのに苦労しています。 Android用の静的ライブラリをどのように構築できたか教えてください。どんなgit-repositoryやこれと同様のものがありますか?そのconfigureスクリプトはどうですか?設定するものは何ですか? – j00hi

答えて

20

フレームのピクセルをテクスチャに描画し、そのテクスチャをOpenGLを使用してレンダリングする方法の1つです。

私は、主にold-skoolのピクセルベースのビデオゲームのために、これについてどうやってブログ記事を書いていますが、あなたの状況にも当てはまります。投稿はAndroid Native Coding in Cで、私はgithub repository with an exampleを設定しました。この技術を使用して、第一世代のハードウェアでも60FPSを得ることができました。

EDITについては、このアプローチではglTexImage2DとglTexSubImage2Dがあります。

glTexImage2Dを呼び出すと、テクスチャにビデオメモリが割り当てられ、NULLを渡さない場合は、そのメモリに渡すピクセルがコピーされます。 glTexSubImage2Dを呼び出すと、すでに割り当てられているテクスチャで指定したピクセルが更新されます。

をすべてテクスチャのに更新すると、どちらか一方を呼び出す違いはほとんどなく、実際にはglTexImage2Dが通常より高速です。しかし、glTexSubImage2Dのテクスチャの一部を更新するだけで速度が上がります。

2のべき乗のテクスチャサイズを使用する必要があるため、高解像度のデバイスで画面を覆うには、1024x512のテクスチャと中程度の解像度の512x512のテクスチャが必要です。テクスチャが画面領域よりも大きい(高解像度は800x400-ish)。つまり、その一部を更新する必要があるだけなので、glTexSubImage2Dを使用してください。

+0

お返事ありがとうございます!ええ、それは面白いと知っている私はあなたのブログをしばらく前に来て、私は私のアプリの笑のための基盤としてそれを使用した。私は今までそれをもう一度見つけることができなかったので、私に知らせてくれてありがとう!今、私は最終的に画面上に何かを表示していますが、ピクセルは完全に乱れているようです。私は私の四角いテクスチャを正しく作成しているのか、それともFFmpegの正しいRGBピクセルフォーマットに変換するのが問題なのか分かりません。私は、OpenGLのクワッドでこれを行うのはかなり簡単であるため、OpenGL ESのドキュメントがたくさんあることを願っています。任意のヒント? – DRiFTy

+0

クワッドにテクスチャを使用することができます。'glOrthof'を使って頂点とテクスチャの座標を設定してください。普通のOpenGLの場合と同じです。うんざりしたピクセルはあいまいな説明です:彼らは完全に解読できますか?あまりにも緑色か、あまりにも赤い?彼らは左に剪断されているのだろうか?私のアドバイス:GLESと重複するOpenGLのサブセットを使ってコードをPC上で動かし、まったく同じコードをAndroidにコンパイルしてください。それは私が通常やっていることです。 – richq

+0

この度はありがとうございます。申し訳ありませんが、私がうんざりしていたピクセルによって意味されたことは、彼らが解読できないことです。 FFmpegでは、ピクセル形式をRGGに変換する関数sws_scaleを使用する必要がありますが、OpenGL側ではまだ使用方法を学習していますが、正しいピクセル形式に変換したか、私の四角形の頂点とテクスチャの座標を正しく設定します。また、私は各フレームをループしているので、glTexSubImage2d()を使用するか、glTexImage2d()を使用して現在のテクスチャを新しいフレームの新しいテクスチャデータに置き換えてください。 – DRiFTy

関連する問題