给定URL在android中播放视频

Posted

技术标签:

【中文标题】给定URL在android中播放视频【英文标题】:Given URL play video in android 【发布时间】:2015-12-21 08:55:07 【问题描述】:

我对视频的了解很少。尽管如此,我正在构建一个需要以下功能的应用程序:给定视频的 url,播放视频。 这个看似简单的任务对我来说非常困难。这是我的代码:

XML:

JAVA:

private void setupVideoToPlay(Bundle savedInstanceState,View parent) mVideoView=(VideoView)parent.findViewById(R.id.videoview); mMediaController=new MediaController(getContext()); mMediaController.setAnchorView(mVideoView); mVideoView.setMediaController(mMediaController); mVideoView.setVideoURI(Uri.parse(mVideoUrl)); mVideoView.requestFocus(); 如果(空!= savedInstanceState) int position = savedInstanceState.getInt(VIDEO_SEEK_POSITION); mVideoView.seekTo(位置); 别的 mVideoView.start();

这是我得到的错误:

D/MediaPlayer﹕ setDataSource IOException happend :
    java.io.FileNotFoundException: No content provider: https://www.youtube.com/watch?feature=player_detailpage&v=c4rSDxwHJI0
            at android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1074)
            at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:927)
            at android.content.ContentResolver.openAssetFileDescriptor(ContentResolver.java:854)
            at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1085)
            at android.widget.VideoView.openVideo(VideoView.java:370)
            at android.widget.VideoView.access$2100(VideoView.java:73)
            at android.widget.VideoView$7.surfaceCreated(VideoView.java:651)
            at android.view.SurfaceView.updateWindow(SurfaceView.java:606)
            at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:184)
            at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:895)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2158)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1185)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6591)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777)
            at android.view.Choreographer.doCallbacks(Choreographer.java:590)
            at android.view.Choreographer.doFrame(Choreographer.java:560)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:145)
            at android.app.ActivityThread.main(ActivityThread.java:5837)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)

有趣的是,我可以在短时间内看到控件在 VideoView 的底部变胖。但是没有视频播放,只显示了 VideoView 背景。有谁知道我该如何解决这个问题?

一边

否则是否有已知的库可以做到这一点?理想情况下,我希望能够使用 youtube 视频链接或任何其他视频链接。我看过 ExoPlayer 和 Protyposis,但两者的文字/概念都超出了我的想象;诸如 TrackRenderer 和 ChunkSampleSource 之类的词仅举两例。此外,Youtube API 本身似乎有一些有问题的要求:设备必须安装 Youtube 应用程序,并且我必须提供 videoId 而不是视频的 url。 (我看的还不够深入,看能否从url解析videoId)。

注意

我已经尝试过使用 Youtube 视频链接和非 Youtube 视频链接。对于 Youtube 链接,我右键单击视频本身以获取链接。

【问题讨论】:

1.该 URL 不是视频链接,它是指向播放视频的网页的链接 2. 如果您的所有视频都将在 YouTube 上播放,那么只需通过意图将链接传递给 YouTube 应用程序即可播放,这很容易播放视频的简单方法。 视频将都是 youtube 视频。即使他们是,我希望用户从我的应用程序中观看视频。这是我通过 Google 搜索 http://i.istockimg.com/video_passthrough/63649595/153/63649595.mp4 找到的随机视频。而且由于它以.mp4 结尾,我认为它是一个视频,而不仅仅是一个播放视频的网站。 【参考方案1】:

有谁知道我该如何解决这个问题?

为one of the supported media formats and served via one of the supported protocols 中的视频提供Uri,而不是为网页提供Uri。 https://www.youtube.com/watch?feature=player_detailpage&v=c4rSDxwHJI0 是一个网页。

【讨论】:

这也是网页吗? http://i.istockimg.com/video_passthrough/63649595/153/63649595.mp4?它也不起作用。另外,如果您不介意,您知道我可以尝试的有效视频网址吗?我需要任何可以得到的帮助。 @KatedralPillon:不,这似乎是 MP4 视频的直接链接。我没有使用VideoView 播放远程视频,我也不会。我会管理自己的MediaPlayerTextureView 和自定义控制器。 @CommonsWare 你知道为什么在某些情况下 VideoView 在我们传递直接 .mp4 链接时会出现此错误。在我的情况下,相同的 VideoView 从链接播放某些 .mp4 并且对于某些它会引发此错误。实际上,我正在尝试在我遇到此问题的 VideoView 上播放 Google IMA 广告。你会推荐Exoplayer吗?还是可以由 VideoView 自己解决? @VinayakBevinakatti:我建议您提出一个单独的 Stack Overflow 问题,在那里您可以提供一个 minimal reproducible example 来展示您的问题。 @CommonsWare 谢谢!

以上是关于给定URL在android中播放视频的主要内容,如果未能解决你的问题,请参考以下文章

如何在android webview中播放视频URL

如何在 android 中播放来自 URL 的流媒体视频?

如何在 android videoview 中播放 VIMEO 视频 url

无法在videoview android中播放来自url的视频

Android TV 从 URL 播放视频

如何仅在给定帧中限制 UIWebView 中的视频播放