所以我有一台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完成流。那么我做错了什么,有没有更好的处理流媒体视频的方法?我最终想要使用一些重叠的文本和按钮来配合视频视图,并在必要时拍摄屏幕截图。目前我很幸运,如果我在切断之前几秒钟收到视频......
其他一些评论;
我已经成功运行了一段时间 - 所以它并不总是很糟糕,这使得诊断很困难。但当它停止时停止。 如果视频丢失了连接,它是否会主动尝试重新连接? 有没有办法用进度指示器来证明这一点 - 所以看起来它什么都不做?
答案 0 :(得分:1)
有点晚了,但对于遇到同样问题的其他人:通过将监听器设置为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;
}
});
如果流是“结束”,您将获得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)
也许不是您正在寻找的答案,但希望能引导您找到合适的答案!