使用VideoView显示视频的android-black屏幕

mah*_*ani 3 android android-videoview

这是我的布局:

<LinearLayout 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"
    android:orientation="vertical" >

    <FrameLayout
        android:id="@+id/frameLayout1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_gravity="center" >

        <VideoView
            android:id="@+id/geoloc_anim"
            android:layout_width="fill_parent"
            android:layout_height="match_parent"
            android:layout_gravity="top|center"
            android:visibility="visible" />

        <FrameLayout
            android:id="@+id/placeholder"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >
        </FrameLayout>
    </FrameLayout>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

这是我的活动代码:

public class MainActivity extends ActionBarActivity implements OnPreparedListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportActionBar().hide();
        VideoView mVideoView = (VideoView) findViewById(R.id.videoview);
        Uri uri = Uri.parse("android.resource://" + getPackageName()+"/raw/lst2");
        mVideoView.setVideoURI(uri);
        mVideoView.requestFocus();
        mVideoView.setZOrderOnTop(true); 
        mVideoView.start();

    }

     @Override
      public void onPrepared(MediaPlayer mp) {
        mp.setOnInfoListener(new MediaPlayer.OnInfoListener() {
          @Override
          public boolean onInfo(MediaPlayer mp, int what, int extra) {
              View placeholder = (View) findViewById(R.id.placeholder);
            if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START)  {
              // video started; hide the placeholder.
              placeholder.setVisibility(View.GONE);
              return true;
            }
            return false;
          }
        });
     }

    public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {
    }

    public void surfaceCreated(SurfaceHolder holder) {
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
    }

}
Run Code Online (Sandbox Code Playgroud)

它在Android 4.2上工作正常,但它在Android 2.3上无法正常工作.在Android 2.3上,它第一次打开它可以找到但是当关闭应用程序并再次打开它时,会出现黑屏,如下所示: 在此输入图像描述

一分钟左右后,它从黑屏变为白屏但仍然没有播放.

你能帮我解决这个问题吗?

Ran*_*mar 14

答案很晚.但肯定它对任何人都有帮助.

在start()之前设置videoView.setZOrderOnTop(true).

https://developer.android.com/reference/android/view/SurfaceView.html#setZOrderOnTop(boolean)

    videoView.setVideoURI(Uri.parse(uriString));
    videoView.setZOrderOnTop(true);//this line solve the problem
    videoView.start();
Run Code Online (Sandbox Code Playgroud)

  • 现在videoView.setZOrderOnTop(true); 给白色的屏幕. (13认同)
  • 如果您要在视频顶部显示视图,则无法使用。 (2认同)

Rog*_*ien 5

我解决了这个与切换alphaVideoView

public class VideoPlayer extends VideoView {

    ....
public VideoPlayer(Context context) {
    super(context);
    init();
}

public void init() {
    setAlpha(0); // hides view 
    setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.setOnInfoListener(new MediaPlayer.OnInfoListener() {
                @Override
                public boolean onInfo(MediaPlayer mp, int what, int extra) {
                    if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) {
                        setAlpha(1); // shows view
                        return true;
                    }
                    return false;
                }
            });
        }
    });
Run Code Online (Sandbox Code Playgroud)

我想如果你有外部设备VideoView并且可以访问它,你也可以这样做。


fal*_*our 1

删除 mVideoView.start() 并更改 onPrepared 以开始视频,

@Override
      public void onPrepared(MediaPlayer mp) {
          mp.start();

..............
Run Code Online (Sandbox Code Playgroud)

我没有 Android 版本低于 4.2 的设备可供测试,但这就是我使用应用程序启动视频的方式