2017-06-19 3 views
0

J'ai trouvé quelques questions connexes mais je n'ai pas trouvé de réponse à mon problème spécifique.Android dit "Impossible de lire cette vidéo" lorsque vous essayez de lancer mp4 à partir du stockage local

J'essaie de lancer une activité vidéo qui lit une vidéo téléchargée sur la carte SD. Il génère une erreur indiquant "Impossible de lire cette vidéo". Lorsque je lance la vidéo sans l'application, elle joue très bien.

Ici, je crée l'activité:

VideoView mVideoView; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.videoview); 

    Intent intent = getIntent(); 
    String url = intent.getStringExtra(MainActivity.EXTRA_MESSAGE); 
    setJsonData(url); 
    Log.d("URL VID",url); 
    Uri uri = Uri.parse(url); //Declare your url here. 
    mVideoView = (VideoView) findViewById(R.id.videoview); 
    mVideoView.setVideoURI(uri); 
    MediaController vidControl = new MediaController(this); 
    vidControl.setAnchorView(mVideoView); 
    mVideoView.setMediaController(vidControl); 
    mVideoView.requestFocus(); 
    mVideoView.start(); 
} 

Quand je fais ce que je reçois cette erreur après avoir essayé de lancer la vidéo:

06-19 16:57:24.921 26033-26033/com.csform.android.uiapptemplate W/VideoView: Unable to open content: /storage/emulated/0/Nokia%20AirFrame.mp4 
java.io.IOException: setDataSource failed. 
    at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1120) 
    at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1066) 
    at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1003) 
    at android.widget.VideoView.openVideo(VideoView.java:437) 
    at android.widget.VideoView$7.surfaceCreated(VideoView.java:742) 
    at android.view.SurfaceView.updateWindow(SurfaceView.java:730) 
    at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:211) 
    at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944) 
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2420) 
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1324) 
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6712) 
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:894) 
    at android.view.Choreographer.doCallbacks(Choreographer.java:696) 
    at android.view.Choreographer.doFrame(Choreographer.java:631) 
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:880) 
    at android.os.Handler.handleCallback(Handler.java:815) 
    at android.os.Handler.dispatchMessage(Handler.java:104) 
    at android.os.Looper.loop(Looper.java:207) 
    at android.app.ActivityThread.main(ActivityThread.java:5728) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679) 

Mes autorisations sont définies comme suit:

<uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
+0

Que * exactement * est la valeur de 'url'? – CommonsWare

+0

L'URL est /storage/emulated/0/Nokia%20AirFrame.mp4 – tlambeir

+0

'/ storage/emulated/0/Nokia% 20AirFrame.mp4' n'est pas un 'Uri' valide, et donc' Uri.parse() 'est probable pour vous donner des problèmes. Un 'Uri' a un schéma, tel que' file' ou 'content' ou' https'. – CommonsWare

Répondre

0

La méthode mVideoView.setVideoURI(uri); doit être remplacée par la méthode mVideoView.setVideoPath(uri); . Ici uri spécifie le chemin du fichier vidéo sur le SDCARD.

setVideoURI ne sert pas quand on veut charger une vidéo de SDCARD et vous devez utiliser setVideoPath. setVideoURI est seulement pour la vidéo de flux d'Internet.

+0

J'ai essayé mVideoView.setVideoPath (url); mais je reçois la même erreur. – tlambeir

0

Il semble que ce soit un problème de nom de fichier. J'ai changé le nom pour qu'il n'y ait plus d'espaces ou de majuscules et l'erreur s'est dissipée et je peux jouer la vidéo.