6

今までで一番簡単だと思っていたものに完全に困惑しています。相対レイアウトのフレーム内でビデオを再生しようとしています。

アプリケーションは非常に特定のデバイス (Archos 101 インターネット タブ) でランドスケープ モードで実行することを意図しており、ビデオは非常に特定のサイズの 480x360 で事前にエンコードされていることに注意してください。

レイアウトはこちら

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<!-- Background -->
<ImageView
    android:layout_width="980dp"
    android:layout_height="568dp"
    android:src="@drawable/bg_video" />

<TextView
    android:id="@+id/video_headtext"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="73dp"
    android:layout_marginLeft="255dp"
    android:textColor="#FFFFFF"
    android:textSize="16dp" />

<TextView
    android:id="@+id/video_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="#FFFFFF"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="112dp" />

<VideoView 
    android:id="@+id/video_videocontainer"
    android:layout_width="480dp"
    android:layout_height="360dp"
    android:layout_below="@id/video_title"
    android:layout_marginTop="10dp"
    android:layout_centerHorizontal="true" />

</RelativeLayout>

このコードを使用してビデオをロードします

player = (VideoPlayer) findViewById(R.id.video_videocontainer);
player.setVideoURI(videoUri);

コードは機能しますが、videoView が正しくフレーム内にある場合、ビデオ自体は画面上部のどこかで再生され、その一部のみが VideoView に表示されます。

ここで何が起こるかの例(これはデバッグ用の一時的なビデオです)。ここで同じ瞬間のビデオのスクリーンショット。

ご覧のとおり、VideoView にはビデオの一部のみが表示され、残りは黒で塗りつぶされています。

本当に単純なものが欠けていると確信していますが、何がまったくわからないのです。

前もって感謝します。

編集: VideoView を拡張し、このように onMeasure をオーバーライドする VideoPlayer クラスを作成しようとしました

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
    setMeasuredDimension(480, 360);
} 

public void changeVideoSize()
{
    getHolder().setFixedSize(480, 360); 

    requestLayout();
    invalidate();
}

しかし、それは少しも役に立ちません。

EDIT 2 : SurfaceView と MediaPlayer で試してみましたが、同じ結果です。Android で動画を再生する原理を理解していない気がします。ここでかなり行き詰まります。

EDIT 3:Samsung Galaxy HDで試してみましたが、ビデオはフレーム内に正しく表示されます。これはタブレットの問題なのか、それとも 2.2 の問題なのか?

編集 4: 2.2 で実行されている AVD は、ビデオを適切にレンダリングしません。4.1 を実行している AVD はそうします。これでだいぶ絞れると思います。

4

2 に答える 2

3

その特定のデバイス(2.1)を処理するにはプロファイルが高すぎるビデオで同様の問題が発生し、Android 4.0では正常に機能しました。

それ以外は、SurfaceView を使用しており、MediaPlayer (特に setOnVideoSizeChangedListener) のイベントにリスナーを追加し、mediaplayer イベントにリンクされたサーフェスにコールバックを追加するというトリックがありました。

于 2012-10-10T13:59:27.527 に答える
0

VideoView属性setZOrderOnTopをtrueに設定し、それが機能するかどうかを確認します。たとえば、qvideoというビデオビューがある場合

qvideo.setZOrderOnTop(true);
于 2012-10-10T18:34:19.443 に答える