Даден URL възпроизвеждане на видео в android

Имам минимални познания, които можете да си представите, когато става въпрос за видеоклипове. Въпреки това създавам приложение, което изисква следната функционалност: предвид URL адреса на видеоклип, пуснете видеоклипа. Тази на пръв поглед проста задача се оказа много трудна за мен. Ето моят код:

XML:

    <VideoView
    
    android:id="@+id/videoview"
    
    android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:layout_gravity="center"

        android:background="@color/primary_dark"/>

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();
   if(null != savedInstanceState ) {
      int position = savedInstanceState.getInt(VIDEO_SEEK_POSITION);
      mVideoView.seekTo(position);
   } else {
      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, за да назовем две. Освен това самият API на Youtube изглежда има няколко проблемни изисквания: устройството трябва да има инсталирано приложението Youtube и аз трябва да предоставя videoId вместо url на видео. (Не съм погледнал достатъчно задълбочено, за да видя дали videoId може да бъде анализиран от URL адреса).

ЗАБЕЛЕЖКА

Опитах това с видеовръзки в Youtube и видеовръзки извън YouTube. А за връзките в Youtube, щраквам с десния бутон върху самото видео, за да получа връзката.


person Katedral Pillon    schedule 23.09.2015    source източник
comment
1. URL адресът не е връзка към видеоклип, той е връзка към уеб страница, която възпроизвежда видеоклип 2. достатъчно е лесно просто да прехвърлите връзката чрез намерение към приложението YouTube за възпроизвеждане, ако всичките ви видеоклипове ще бъдат в YouTube, това може бъде лесен начин за възпроизвеждане на видеоклипа.   -  person Dan S    schedule 24.09.2015
comment
Видеоклиповете не ще бъдат видеоклипове в YouTube. И дори да бяха, искам потребителите да гледат видеоклиповете от приложението ми. Ето едно произволно видео, което намерих чрез търсене в Google http://i.istockimg.com/video_passthrough/63649595/153/63649595.mp4. И тъй като завършва на .mp4, предполагам, че е видеоклип, а не просто уебсайт, който възпроизвежда видеоклип.   -  person Katedral Pillon    schedule 24.09.2015


Отговори (1)


Някой знае ли как мога да поправя това?

Предоставете Uri на видеоклип, който е в един от поддържаните медийни формати и се показва чрез един от поддържаните протоколи, вместо Uri към уеб страница. https://www.youtube.com/watch?feature=player_detailpage&v=c4rSDxwHJI0 е уеб страница.

person CommonsWare    schedule 23.09.2015
comment
Това също ли е уеб страница? http://i.istockimg.com/video_passthrough/63649595/153/63649595.mp4? Не работи и за това. Освен това, ако нямате нищо против, знаете ли валиден URL адрес на видеоклип, който мога да опитам? Имам нужда от всякаква помощ, която мога да получа. - person Katedral Pillon; 24.09.2015
comment
@KatedralPillon: Не, изглежда, че това е директна връзка към MP4 видео. Не съм използвал VideoView за възпроизвеждане на дистанционно видео, нито бих го направил. Бих управлявал собствените си MediaPlayer, TextureView и персонализиран контролер. - person CommonsWare; 24.09.2015
comment
@CommonsWare Знаете ли защо в някои случаи VideoView чрез тази грешка, когато предаваме директна .mp4 връзка. В моя случай същият VideoView възпроизвежда определени .mp4 от връзка и за някои извежда тази грешка. Всъщност се опитвам да пусна Google IMA реклами на VideoView, където се сблъсквам с този проблем. Бихте ли предложили Exoplayer? или може да се справи със самия VideoView? - person Vinayak Bevinakatti; 22.09.2016
comment
@VinayakBevinakatti: Препоръчвам ви да зададете отделен въпрос за препълване на стека, където можете да предоставите минимално възпроизводим пример, демонстриращ вашия проблем. - person CommonsWare; 22.09.2016
comment
@CommonsWare Благодаря! - person Vinayak Bevinakatti; 23.09.2016