2017-03-27 4 views
-1

J'ai posé une question plus tôt play video in new activityAndroid - MediaPlayer (open failed: ENOENT (Aucun fichier ou répertoire)

Ce que je veux quand (Button) findViewById(R.id.pickVid); est cliqué, il appelle PICK_VIDEO_REQUEST, puis lorsque la vidéo est sélectionnée, la nouvelle activité devrait ouvrir et lire la vidéo

le gars qui m'a aidé dit que je devrais utiliser this.mPlayer.setDataSource(mStringFilePath); au lieu de FileInputStream

PROBLÈME:.

Je reçois une erreur en disant setDataSource failed.: status=0x80000000 avec un écran noir.

MainActivity

public class MainActivity extends AppCompatActivity { 

Uri mMediaUri; 
String vidFile; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button pickVid = (Button) findViewById(R.id.pickVid); 

    //choose the video 
    pickVid.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent chooseVideo = new Intent(Intent.ACTION_GET_CONTENT); 
      chooseVideo.setType("video/*"); 
      startActivityForResult(chooseVideo, PICK_VIDEO_REQUEST); 


     } 
    }); 


} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == PICK_VIDEO_REQUEST) { 
     if (resultCode == RESULT_OK) { 
      mMediaUri = data.getData(); 
      vidFile = mMediaUri.toString(); 
      Intent playVid = new Intent(MainActivity.this, PlayVideoAct.class); 
      playVid.putExtra("vidFile", vidFile); 


      startActivity(playVid); 
     } 
    } 

} 

PlayVideoAct

String mStringFilePath; 

    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_playvideo); 

    mStringFilePath = getIntent().getStringExtra("vidFile"); 

    } 

    public void surfaceCreated(SurfaceHolder holder) { 

    if (this.mPlayer == null) { 
     this.mPlayer = new MediaPlayer(); 
    } else { 
     this.mPlayer.reset(); 
     mPlayer.start(); 
    } 
    try { 
     this.mMediaPlayer.setDataSource(mStringFilePath); 
     this.mPlayer.setDisplay(this.mSurfaceHolder); 
     this.mPlayer.prepare(); 
     this.mPlayer.start(); 
     this.mPlayer.pause(); 
     Play(); 

    } catch (Exception e) { 
     LogUtil.e(e, "Error in PlayVideoAct.surfaceCreate(SurfaceHolder)"); 
    } 
} 

private void Play() { 

mMediaPlayer.start(); 
if (this.mMediaPlayer.isPlaying()) { 
    this.mMediaPlayer.pause(); 
    return; 
} 
if (this.isStop) { 
    this.mMediaPlayer.seekTo(this.leftPosition); 
} 
this.mImageViewButtonControls.setImageResource(R.drawable.pause); 

}

+0

* 'void MediaPlayer.setDataSource (String path)' - Définit la source de données (chemin de fichier ou URL http/rtsp) à utiliser. * ... ** pourquoi vous pensez que Intent.ACTION_GET_CONTENT' renvoie http/rtsp ou file-path? ** – Selvin

+0

@Selvin ne le fait pas? J'ai grillé 'mStringFilePath' et il a retourné' content: // media/external/video/media/28638' – Brooks

Répondre

0

chemin vidéo Vérifiez, si elle est correcte, vérifiez si vous avez toutes les autorisations nécessaires comme:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

Si oui, alors en fonction de votre version Android, vous devrez peut-être aller à Paramètres -> Applications -> Votre application -> Autorisations et basculer ces autorisations manuellement.

+0

J'ai déjà ajouté les permissions – Brooks

+0

Dans ce cas, essayez de coder en dur avec le chemin pour vérifier s'il est correct. Par exemple. Réglez-le sur /sdcard/yourFile.mp4 – LLL