Android VideoView 我随机收到“无法播放此视频”错误
Posted
技术标签:
【中文标题】Android VideoView 我随机收到“无法播放此视频”错误【英文标题】:Android VideoView I get randomly a "Can't play this video" error 【发布时间】:2020-09-02 07:56:14 【问题描述】:我想使用VideoView
播放视频:
videoView.setVideoURI(Uri.parse("http://192.168.1.10:7777/mov_bbb.mp4"));
videoView.start();
它随机工作。视频加载时间的 20%,然后开始。但是 80% 的时候,我会收到这个错误:
Can't play this video
这是输出到控制台:
W/MediaPlayer: Couldn't open http://192.168.1.10:7777/...
java.io.FileNotFoundException: No content provider: http://192.168.1.10:7777/mov_bbb.mp4
at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1673)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1503)
at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:1420)
at android.media.MediaPlayer.attemptDataSource(MediaPlayer.java:1101)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1073)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1097)
at android.widget.VideoView.openVideo(VideoView.java:412)
at android.widget.VideoView.access$2200(VideoView.java:83)
at android.widget.VideoView$7.surfaceCreated(VideoView.java:694)
at android.view.SurfaceView.updateSurface(SurfaceView.java:758)
at android.view.SurfaceView$2.onPreDraw(SurfaceView.java:155)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:1088)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2745)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1721)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7598)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:966)
at android.view.Choreographer.doCallbacks(Choreographer.java:790)
at android.view.Choreographer.doFrame(Choreographer.java:725)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:951)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
V/MediaHTTPService: MediaHTTPService(android.media.MediaHTTPService@969a5ef): Cookies: null
D/EGL_emulation: eglMakeCurrent: 0xe331a180: ver 3 0 (tinfo 0xe330f830)
V/MediaHTTPService: makeHTTPConnection: CookieHandler (java.net.CookieManager@abffe09) exists.
V/MediaHTTPService: makeHTTPConnection(android.media.MediaHTTPService@969a5ef): cookieHandler: java.net.CookieManager@abffe09 Cookies: null
D/EGL_emulation: eglMakeCurrent: 0xe331a180: ver 3 0 (tinfo 0xe330f830)
D/EGL_emulation: eglMakeCurrent: 0xe331a180: ver 3 0 (tinfo 0xe330f830)
W/MediaHTTPConnection: readAt 516238 / 32768 => java.net.ProtocolException
E/MediaPlayerNative: error (1, -2147483648)
E/MediaPlayer: Error (1,-2147483648)
我不知道如何调试它。是否可以捕获这些错误,禁用警报,然后静默重试?
如果我在浏览器中打开网址,视频会完美加载并播放。
【问题讨论】:
【参考方案1】:试试这个
Uri uri= Uri.parse(Environment.getExternalStorageDirectory().getAbsolutePath()+"/yourvideopath");
videoView.setVideoURI(uri);
videoView.start();
您可以使用它来获取存储在外部存储中的视频的路径。 将“/yourvideopath”替换为您的视频路径,例如 /dcim/camera/mov_bbb.mp4
【讨论】:
我的视频不在外部存储中 哦,那它在哪里呢?你能知道你想从哪里获取要在 VideoView 中播放的视频吗? 好的。因此,您正在使用 URL 来设置 VideoView。所以最好使用 setVideoPath 方法而不是 setVideoUri。 videoView.setVideoPath("http://192.168.1.10:7777/mov_bbb.mp4"); videoView.start();以上是关于Android VideoView 我随机收到“无法播放此视频”错误的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 URL 的视频视图知道视频在 android VideoView 中启动的实时时间?
在 Android 的 Firebase URL 的 VideoView 中显示视频
如何在 android 的 videoview 中播放 .mp4 视频?
android videoview - 管理错误的网址错误?