我有一个问题,谷歌搜索后,我不知道它为什么会发生。
我使用协议RTSP制作并播放视频应用。一切都在3G / 4G连接上运行良好,但如果我改用Wifi,很多时候视频会出现像灰色屏幕一样的像素化。
在Android 5.1(LG G3)中进行测试。 minSDKVersion = 15。 已编译SDKVersion = 22。
如果我改为3g,一切顺利。这似乎是初始缓冲区的一个问题,但它很奇怪,因为问题在于Wifi连接(使用两个不同的连接测试,一个xVDSL和一个FTTH)。
我没有使用任何库,直接使用android sdk和VideoView以及mediaPlayer完成所有工作。
这里是初始化配置的代码以及它如何处理侦听器:
videoView= (VideoView)this.findViewById(R.id.videoView);
videoView.setMediaController(null);
videoView.setOnErrorListener(this);
videoView.setOnCompletionListener(this);
videoView.setOnPreparedListener(this);
videoView.setVideoURI(Uri.parse(URL));
启动/停止方法(上面的按钮)并覆盖监听器方法:
public void startVideo(){
if(videoView !=null) {
initProgressDialog(getResources().getString(R.string.load_streaming));
startProgressDialog();
videoView.setVisibility(View.VISIBLE);
videoView.requestFocus();
//btnPlay.setVisibility(View.INVISIBLE);
}
}
public void stopVideo(){
if(videoView !=null) {
btnPlay.setText(getResources().getString(R.string.video_button_play));
stateVideo=2;
videoView.suspend();
}
}
public void resumeVideo(){
if(videoView !=null) {
initProgressDialog(getResources().getString(R.string.load_streaming));
startProgressDialog();
btnPlay.setText(getResources().getString(R.string.video_button_stop));
stateVideo=1;
videoView.setVisibility(View.VISIBLE);
videoView.resume();
}
}
private boolean manageErrorVideo(MediaPlayer mediaPlayer, int i, int i1){
return false;
}
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
videoView.setVisibility(View.VISIBLE);
stopProgressDialog();
}
@Override
public boolean onError(MediaPlayer mediaPlayer, int i, int i1) {
//A lot of control error code. If need, ask but never go this way when the problem appear.
return true;
}
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
btnPlay.setText(getResources().getString(R.string.video_button_stop));
videoView.start();
stopProgressDialog();
stateVideo = 1;
findViewById(R.id.mainView).setBackgroundColor(Color.BLACK);
Log.d("test", mediaPlayer.getVideoHeight() + "");
Log.d("test", mediaPlayer.getVideoWidth()+"");
}
@Override
public boolean onInfo(MediaPlayer mediaPlayer, int i, int i1) {
return false;
}
@Override
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
}
任何信息或帮助都会很好!
谢谢!
编辑:RTSP服务器是IP摄像头。