2015-10-22 16 views
5

voglio giocare i dati mp4 registrati utilizzando Android Media Player, ma quando tenta di riprodurre questo errore ha mostrato:java.io.IOException: setDataSource fallì quando il gioco ha registrato mp4

java.io.IOException: setDataSource fallita .

a android.media.MediaPlayer.setDataSource (MediaPlayer.java:1086)

a android.media.MediaPlayer.setDataSource (MediaPlayer.java:1032)

Questo è il mio codice:

final ImageView play = (ImageView) root.findViewById(R.id.voice_play); 
     play.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       try { 
        player = new MediaPlayer(); 
        if (player.isPlaying()) { 
         player.reset(); 
        } 
        player.setDataSource("file://mnt/sdcard/Android/data/com.myapp.apptalk/AudioRecorder/22-Oct-2015 11:26:14.mp4"); 
        player.prepare(); 

        seekbar.setMax(player.getDuration()); 

        if (isPlay) { 
         player.stop(); 
         play.setImageResource(R.drawable.play); 
         handler.removeCallbacks(runnable); 
         isPlay = false; 
        } else { 
         player.start(); 

         runnable = new Runnable() { 
          @Override 
          public void run() { 
           seekbar.setProgress(player.getCurrentPosition()); 
           handler.postDelayed(this, 1000); 
          } 
         }; 
         handler = new Handler(); 
         handler.post(runnable); 

         play.setImageResource(R.drawable.stop); 
         isPlay = true; 
        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 

Chiunque può aiutare?

risposta

3

Ho appena risolto questo problema ieri

Invece di dare percorso diretto a setDataSource, dare il percorso del file

try 
      {     
       Log.d("SetDatasource path", playRecordPath); 

       File filePath = new File(playRecordPath); 

       if (!filePath.exists()) 
       { 
        filePath.createNewFile(); 
       } 

       FileInputStream is = new FileInputStream(filePath); 

       mMediaRecordingPlayer.setDataSource(is.getFD()); 

       mMediaRecordingPlayer.prepare(); 

       is.close(); 
      } 
      catch (IllegalArgumentException e) 
      { 
       e.printStackTrace(); 
      } 
      catch (SecurityException e) 
      { 
       e.printStackTrace(); 
      } 
      catch (IllegalStateException e) 
      { 
       e.printStackTrace(); 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 

E poi nel metodo onPrepared

@Override 
    public void onPrepared(MediaPlayer mp) 
    { 
     mMediaRecordingPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

     mMediaRecordingPlayer.setVolume(1.5f, 1.5f); 

     mMediaRecordingPlayer.start(); 

     duration = mMediaRecordingPlayer.getDuration(); 

     mSeekBarPlayer.setMax(duration); 

     mSeekBarPlayer.postDelayed(onEverySecond, 1000); 
    } 

durante l'inizializzazione i file multimediali player do this

mMediaRecordingPlayer = new MediaPlayer(); 

mMediaRecordingPlayer.setOnPreparedListener(this); 

E nella vostra attività è necessario implementare questo

public class MainActivity extends Activity implements OnPreparedListener 
+0

ora, ma non mostra l'errore precedente, BU si mostrano sempre: java.io.FileNotFoundException: file:/stoccaggio/emulato/0/AudioRecorder/blablabla. mp4: open failed: ENOENT (Nessun file o directory) – Redturbo

+0

perché il file che stai registrando e il percorso che stai dando al file per la registrazione sono diversi, registra il percorso durante la registrazione e poi di nuovo registra il percorso mentre lo dai a il file per riprodurre il record –

+0

salvare il percorso durante la registrazione e quindi dare lo stesso percorso durante la riproduzione del record –