2

Google TV/Android 3.2 API には、ビデオ コンテンツのディスプレイ サイズを正しくレポートする機能がないようです。

int surfaceViewHeight = surfaceView.getHeight();
int surfaceViewWidth = surfaceView.getWidth();

float videoWidth = mediaPlayer.getVideoWidth();
float videoHeight = mediaPlayer.getVideoHeight();

float ratioWidth = surfaceViewWidth / videoWidth;
float ratioHeight = surfaceViewHeight / videoHeight;
float aspectRatio = videoWidth / videoHeight;

問題は、mediaPayer.getVideoWidth() および getVideoHeight 呼び出しのようです。ビデオコンテンツの物理的なストレージサイズを常に返しているため、実際の表示サイズをサポートするコンテナではありません。確認したところ、表示サイズを取得する API はありません。アスペクト比を正しく返す Plex Media Server のような外部ソースを使用することで近づくことができますが、表示サイズが返されない限り、ratioWidth と ratioHeight の計算は常に間違っています。

私のアプリのユーザーからほとんどのバグ レポートを受け取っているため、これは LG Google TV に実際に影響しているようです。コンテナが存在する場合、実際の表示サイズをコンテナに記録する方法はありますか?

更新: Handbrake のアナモルフィック コンテンツに関する一般的なガイドです。

https://trac.handbrake.fr/wiki/AnamorphicGuide

基本的に、ビデオの物理サイズのみが返され、縦横比の計算に使用される場合、表示されるビデオは常に押しつぶされたり引き伸ばされたりします。また、おそらくそうでない場合でも、常に黒いバーが表示される場合があります。コーデックは、ディスプレイの幅と高さを返して、テレビで正しく表示されるようにコンテンツを表示する方法をビデオ プレーヤーに通知する必要があります。

MKV コンテナ形式は、EBML で正しい情報を報告できます。Android api はピクセル幅とピクセル高さのみを報告しているように見えます。次の Java ソースを参照してください (MKV の回避策になる可能性があります)。

http://matroska.svn.sourceforge.net/viewvc/matroska/trunk/JEBML/src/org/ebml/matroska/MatroskaFileTrack.java?revision=874&view=markup

4

0 に答える 0