仅适用于Android的VideoView中的Pixelation与Wifi连接(3G / 4G运行完美)

时间:2016-05-30 14:39:15

标签: android video video-streaming android-wifi rtsp

我有一个问题,谷歌搜索后,我不知道它为什么会发生。

我使用协议RTSP制作并播放视频应用。一切都在3G / 4G连接上运行良好,但如果我改用Wifi,很多时候视频会出现像灰色屏幕一样的像素化。

在Android 5.1(LG G3)中进行测试。 minSDKVersion = 15。 已编译SDKVersion = 22。

enter image description here

如果我改为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摄像头。

0 个答案:

没有答案