视频流滞后并使用ip camera stream

时间:2016-01-26 08:08:17

标签: android video video-streaming android-videoview ip-camera

所以我有一台IP摄像机,可以输出我可以通过rtsp协议连接的视频流。我想在我的Android应用程序中显示这个,所以我使用以下代码设置了视频;

VideoView vv = (VideoView)this.findViewById(R.id.videoView);
    Uri uri = Uri.parse("rtsp://username:password@192.168.0.1:554/1/stream3");
    vv.setVideoURI(uri);
    vv.requestFocus();
    vv.start();

我将它放在主要活动类的onCreate()中,因此当应用加载时,它会自动连接并开始流式传输。我对此的体验是它有效 - 但最终变得波涛汹涌,或者只是随意停止并且似乎再也无法恢复运行。我必须关闭应用程序并从内存中清除它并重新启动才能将其恢复 - 但之后不久就失去连接,这意味着它几乎无用。

我还发现,当触摸菜单或按钮等屏幕对象时,它似乎有些滞后,但这可能只是巧合 - 我无法肯定地说。

事情是通过使用相同URL的VLC从同一网络上的PC完成流。那么我做错了什么,有没有更好的处理流媒体视频的方法?我最终想要使用一些重叠的文本和按钮来配合视频视图,并在必要时拍摄屏幕截图。目前我很幸运,如果我在切断之前几秒钟收到视频......

其他一些评论;

我已经成功运行了一段时间 - 所以它并不总是很糟糕,这使得诊断很困难。但当它停止时停止。 如果视频丢失了连接,它是否会主动尝试重新连接? 有没有办法用进度指示器来证明这一点 - 所以看起来它什么都不做?

1 个答案:

答案 0 :(得分:1)

有点晚了,但对于遇到同样问题的其他人:通过将监听器设置为VideoView来尝试调试?即onErroronCompletion

例如:

vv.setOnErrorListener(new MediaPlayer.OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer mp, int what, int extra) {
                Log.d("VideoViewError", Integer.toString(what)); 
                                   //logs the error you're running into

             //You can also put a switch case here to 
               determine what error it is running into exactly: 
            String errorString = "Media Player Error: ";
            switch (what) {
                case MediaPlayer.MEDIA_ERROR_UNKNOWN: {
                    errorString += "Unspecified media player error. ";
                }
                case MediaPlayer.MEDIA_ERROR_SERVER_DIED: {
                    errorString += "Media server died. ";
                }
            }
            switch (extra) {
                case MediaPlayer.MEDIA_ERROR_IO: {
                    errorString += "File or network related operation error.";
                }
                case MediaPlayer.MEDIA_ERROR_MALFORMED: {
                    errorString += "Bitstream is not conforming to the related coding standard or file spec.";
                }
                case MediaPlayer.MEDIA_ERROR_UNSUPPORTED: {
                    errorString += "Bitstream is conforming to the related coding standard or file spec, but the media framework does not support the feature.";
                }
                case MediaPlayer.MEDIA_ERROR_TIMED_OUT: {
                    errorString += "Media operation timed out.";
                }
            }
            Log.d(TAG, errorString);
                return true;
            }
        });

如果流是“结束”,您将获得onCompletion

setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
         @Override
         public void onCompletion(MediaPlayer mp) {
                   Log.d("VideoViewError", "Media Player reached end of file");
         }
         }
        );

您也可以使用setOnInfoListener执行此操作,以便在播放期间了解视频视图的状态。 (代码在这里:http://developer.android.com/reference/android/media/MediaPlayer.OnInfoListener.html

也许不是您正在寻找的答案,但希望能引导您找到合适的答案!

相关问题