当我启动使用VideoView从RTSP URL播放视频的活动时,会显示空白屏幕?

时间:2012-11-19 17:35:05

标签: android android-videoview

我试图制作一个带有实时视频流的Android应用程序,但每当相关活动(这个)打开时,除了空白屏幕外,它不会显示任何内容。谁能帮帮我吗?

       package guc.edu.iremote;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.net.Uri;
import android.os.Bundle;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.MediaController;
import android.widget.VideoView;

public class Video extends Activity  implements OnTouchListener{

VideoView videoView;
int stopPosition;
boolean touched;
protected WakeLock mWakeLock;
Dialog dialog;



@SuppressWarnings("deprecation")
public void OnCreate(Bundle b) {
    super.onCreate(b);
    this.setContentView(R.layout.video);



    videoView = (VideoView) findViewById(R.id.videoView1);


    PowerManager lPwrMgr = (PowerManager) getSystemService(POWER_SERVICE);
    mWakeLock = lPwrMgr.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK,                 "Video");
    mWakeLock.acquire();


    videoView.setVisibility(View.VISIBLE);

    MediaController mc = new MediaController(this){
        @Override
        public void hide() {
            this.show(0);
        }

        @Override
        public void setMediaPlayer(MediaPlayerControl player) {
            super.setMediaPlayer(player);
            this.show();
        }
    };
    videoView.setMediaController(mc);
    mc.setAnchorView(videoView);

      dialog = ProgressDialog.show(Video.this, "", "Loading...",
            true);
    new Thread(new Runnable() {
        public void run() {

             String str = "rtsp://v4.cache2.c.youtube.com/"+
                    "CkELENy73wIaOAng93Xa-"+ 
                        "iQH5xMYESARFEIJbXYtZ29vZ2xlSARSBXdhdGNoWglDbGlja0xpbmtgg9fFkeTLublGDA==/"+ 
                    "0/0/0/video.3gp";  

            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
            Uri uri = Uri.parse(str);
            videoView.setVideoURI(uri);
             videoView.setOnTouchListener(this);
            videoView.requestFocus();
            videoView.setZOrderOnTop(false);
            videoView.start();
            dialog.dismiss();
        }
    }).start();





}



@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    //videoView.seekTo(stopPosition);
    //videoView.resume();
}


protected void onPause() {
    super.onPause();
    if (videoView != null) {
        stopPosition = videoView.getCurrentPosition();
        videoView.pause();
    }

}



public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
    if(v==videoView)
    {
        System.out.println("touched"); 

        if(!touched)
        {
            onPause();
            touched = true;
        }
        else
            onResume();
            touched  = false;
    }
    return false;
}

@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();

    // release wake-lock 
    if(mWakeLock != null){
        mWakeLock.release();
    }
}
}

这是针对XML的

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <VideoView
        android:id="@+id/videoView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</FrameLayout> 

2 个答案:

答案 0 :(得分:0)

那是什么链接:

RTSP://v4.cache2.c.youtube.com/CkELENy73wIaOAng93Xa-iQH5xMYESARFEIJbXYtZ29vZ2xlSARSBXdhdGNoWglDbGlja0xpbmtgg9fFkeTLublGDA==/0/0/0/video.3gp

它似乎不起作用。应该修复该链接,如果它被破坏然后尝试它。但是......要验证这是问题所在,您可以将其替换为另一个有效的视频文件的链接吗? (如果你需要一些,请告诉我,但谷歌可以提供一吨:)

修改

作为另一个人(早先的其他答案)评论说,你还需要在mainthread中访问你的UI,而不是在后台线程中。所以你应该发布到UI线程,如:

Runnable r = new Runnable(){ /* the updating videoView stuff you wanted to do*/ };
ctx.runOnUIThread(r); 

其中ctx是对您当前活动的引用。

答案 1 :(得分:0)

此外:

&#13;
&#13;
videoView.setZOrderOnTop(false); <- wrong
videoView.setZOrderOnTop(true); <- right
&#13;
&#13;
&#13;