首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >视频流延时,使用ip摄像头流与videoview断开连接

视频流延时,使用ip摄像头流与videoview断开连接
EN

Stack Overflow用户
提问于 2016-01-26 16:08:17
回答 1查看 883关注 0票数 0

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

代码语言:javascript
复制
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();

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

我还发现,当触摸屏幕上的菜单或按钮等对象时,它似乎有一点滞后,但这可能只是一个巧合-我不能肯定。

事情是,流是完美的,从同一网络上的PC通过VLC使用相同的URL。那么,我做错了什么,有没有更好的方法来处理流媒体视频?我最终想要将videoview与一些叠加的文本和按钮相匹配,并在必要时可能会截屏。目前我很幸运,如果我能在视频中断前得到几秒钟的视频...

一些补充意见;

我在较长的时间内运行它取得了一些成功-所以它并不总是糟糕的,这使得事情很难诊断。但当它停止时,它就会停止。如果失去连接,videoview是否会主动尝试重新连接?有没有一种方法可以用进度指示器来演示这一点-这样它看起来就不会像什么都没做呢?

EN

回答 1

Stack Overflow用户

发布于 2016-03-22 04:07:12

有点晚了,但对于其他有相同问题的人来说:尝试通过将侦听器设置为您的VideoView来进行调试?即onErroronCompletion等。

例如:

代码语言:javascript
复制
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;
            }
        });

如果流是‘get’,你会得到一个onCompletion

代码语言:javascript
复制
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)

也许不是你想要的答案,但希望能带你找到正确的答案!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35009294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档