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 仅显示部分视频,其余部分用黑色填充。

我很确定我错过了一些非常简单的东西,但我根本不知道是什么。

提前致谢。

编辑:我尝试编写一个 VideoPlayer 类来扩展 VideoView 并像这样覆盖 onMeasure

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

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

    requestLayout();
    invalidate();
}

但这一点帮助都没有。

编辑 2:尝试使用 SurfaceView 和 MediaPlayer,结果相同。我有种感觉,我还没有理解在Android上播放视频的原理。在这里卡住了。

编辑 3:我试过三星 Galaxy HD,视频在框架内正确显示。我想知道这是平板电脑的问题,还是 2.2 的问题?

编辑 4:在 2.2 下运行的 AVD 无法正确渲染视频。运行 4.1 的 AVD 可以。我想这缩小了一点。

4

2 回答 2

3

我对一个视频有类似的问题,该视频对于要处理的特定设备(2.1)来说太高了,它在 android 4.0 上运行良好。

除此之外,我使用的是 SurfaceView,诀窍是将侦听器添加到 MediaPlayer 的事件(特别是 setOnVideoSizeChangedListener)和链接到媒体播放器事件的表面的回调。

于 2012-10-10T13:59:27.527 回答
0

将 VideoView 属性 setZOrderOnTop 设置为 true 并查看它是否有效。例如,如果我有一个名为 qvideo 的视频视图

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