2010-06-02 27 views
18

Quiero controles de medios como reproducción/pausa para la transmisión de audio que estoy reproduciendo en mi aplicación. Estoy usando MediaPlayer para transmitir y reproducir el audio.MediaController con MediaPlayer

¿Alguien puede proporcionar un fragmento de código sobre cómo usar MediaController con MediaPlayer?

Gracias Chris

Respuesta

12

Tan fácil como el código extraído de here. Utilizan VideoView en lugar de un MediaPlayer, lo que le ahorra unas pocas líneas de código:

Diseño:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout android:id="@+id/LinearLayout01" 
    android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" 
    android:paddingLeft="2px" android:paddingRight="2px" 
    android:paddingTop="2px" android:paddingBottom="2px" 
    android:layout_width="fill_parent" android:orientation="vertical"> 

    <VideoView android:layout_height="fill_parent" 
     android:layout_width="fill_parent" android:id="@+id/VideoView"></VideoView> 

</LinearLayout> 

Y código:

public class VideoPlayerController extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.video); 

     VideoView videoView = (VideoView) findViewById(R.id.VideoView); 
     MediaController mediaController = new MediaController(this); 
     mediaController.setAnchorView(videoView); 
// Set video link (mp4 format) 
     Uri video = Uri.parse("mp4 video link"); 
     videoView.setMediaController(mediaController); 
     videoView.setVideoURI(video); 
     videoView.start(); 

    } 
} 

eso es todo. Simplemente reemplace mp4 video link con una url de transmisión de video.

+7

Uso VideoView para audio ??? – Chris

+0

¿Puedo usar esto para transmitir un video rtsp? – vrunoa

43

Es bastante simple para agregar controlador de medios en un reproductor multimedia. Haga que su actividad implemente MediaPlayerControl y agregue métodos no implementados. Código es la siguiente:

estoy usando el código de demos Api de aquí http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/media/MediaPlayerDemo_Video.html

public class ActivityVedioPlay extends Activity implements 
     OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener, 
     OnVideoSizeChangedListener, SurfaceHolder.Callback, MediaPlayerControl { 
..... 

    private MediaPlayer mMediaPlayer; 
    private MediaController mcontroller; 
    private Handler handler = new Handler(); 
..... 
@Override 
    public boolean onTouchEvent(MotionEvent event) { 
     /* 
     * the MediaController will hide after 3 seconds - tap the screen to 
     * make it appear again 
     */ 
     mcontroller.show(); 
     return false; 
    } 
...... 
private void playVideo() { 
     doCleanUp(); 
     try { 
      path = getIntent().getStringExtra("url"); 
      if (path == "") { 
       Toast.makeText(ActivityVedioPlay.this, "URL Not found", 
         Toast.LENGTH_LONG).show(); 
      } 
      mMediaPlayer = new MediaPlayer(); 
      mMediaPlayer.setDataSource(path); 
      mMediaPlayer.setDisplay(holder); 
      mMediaPlayer.prepare(); 
      mMediaPlayer.setOnBufferingUpdateListener(this); 
      mMediaPlayer.setOnCompletionListener(this); 
      mMediaPlayer.setOnPreparedListener(this); 
      mMediaPlayer.setScreenOnWhilePlaying(true); 
      mMediaPlayer.setOnVideoSizeChangedListener(this); 
      mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      mcontroller = new MediaController(this); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
...... 

public void onPrepared(MediaPlayer mediaplayer) { 
     Log.d(TAG, "onPrepared called"); 
     mIsVideoReadyToBePlayed = true; 
     if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) { 
      startVideoPlayback(); 
     } 
     mcontroller.setMediaPlayer(this); 
     mcontroller.setAnchorView(findViewById(R.id.mediaplayer_surfaceview_container)); 
     handler.post(new Runnable() { 

      public void run() { 
       mcontroller.setEnabled(true); 
       mcontroller.show(); 
      } 
     }); 
    } 

//mediacontroller implemented methods 

    public void start() { 
     mMediaPlayer.start(); 
    } 

    public void pause() { 
     mMediaPlayer.pause(); 
    } 

    public int getDuration() { 
     return mMediaPlayer.getDuration(); 
    } 

    public int getCurrentPosition() { 
     return mMediaPlayer.getCurrentPosition(); 
    } 

    public void seekTo(int i) { 
     mMediaPlayer.seekTo(i); 
    } 

    public boolean isPlaying() { 
     return mMediaPlayer.isPlaying(); 
    } 

    public int getBufferPercentage() { 
     return 0; 
    } 

    public boolean canPause() { 
     return true; 
    } 

    public boolean canSeekBackward() { 
     return true; 
    } 

    public boolean canSeekForward() { 
     return true; 
    } 
+1

Parece que esto es específicamente para video mientras que la pregunta es sobre audio, sería bueno editar la respuesta para que quepa. –

+0

En serio, ¿por qué hay tantas respuestas con vistas de video? La pregunta nunca mencionó nada sobre videos – grant