给定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
播放远程视频,我也不会。我会管理自己的MediaPlayer
、TextureView
和自定义控制器。
@CommonsWare 你知道为什么在某些情况下 VideoView 在我们传递直接 .mp4 链接时会出现此错误。在我的情况下,相同的 VideoView 从链接播放某些 .mp4 并且对于某些它会引发此错误。实际上,我正在尝试在我遇到此问题的 VideoView 上播放 Google IMA 广告。你会推荐Exoplayer吗?还是可以由 VideoView 自己解决?
@VinayakBevinakatti:我建议您提出一个单独的 Stack Overflow 问题,在那里您可以提供一个 minimal reproducible example 来展示您的问题。
@CommonsWare 谢谢!以上是关于给定URL在android中播放视频的主要内容,如果未能解决你的问题,请参考以下文章
如何在 android videoview 中播放 VIMEO 视频 url