因此,我有一个IP摄像机,可以输出我可以通过rtsp协议连接到的视频流。我想在我的android应用程序中显示它,所以我使用以下代码设置了一个videoview;
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是否会主动尝试重新连接?有没有一种方法可以用进度指示器来演示这一点-这样它看起来就不会像什么都没做呢?
发布于 2016-03-22 04:07:12
有点晚了,但对于其他有相同问题的人来说:尝试通过将侦听器设置为您的VideoView来进行调试?即onError、onCompletion等。
例如:
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
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)
也许不是你想要的答案,但希望能带你找到正确的答案!
https://stackoverflow.com/questions/35009294
复制相似问题