2010-06-02 16 views
18

Chcę, aby kontrolki multimedialne, takie jak odtwarzanie/pauza, przesyłane strumieniowo audio, które odtwarzam w mojej aplikacji. Używam MediaPlayer do streamowania i odtwarzania dźwięku.MediaController z MediaPlayer

Czy ktoś może podać fragment kodu na temat używania MediaController z MediaPlayer?

Dzięki Chris

Odpowiedz

12

Tak łatwe, jak ten kod pochodzących z here. Używają VideoView zamiast MediaPlayer, co oszczędza kilka linijek kodu:

Układ:

<?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> 

i kod:

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(); 

    } 
} 

To wszystko. Wystarczy zastąpić mp4 video link adresem URL do przesyłania strumieniowego wideo.

+7

Korzystanie VideoView audio ??? – Chris

+0

Czy mogę użyć tego do przesłania strumienia wideo rtsp? – vrunoa

43

Jest to dość proste, aby dodać kontroler multimediów w odtwarzaczu multimedialnym. Wykonaj swoją aktywność zaimplementuj MediaPlayerControl i dodaj niezatwierdzone metody. Kod jest jak poniżej:

Używam kod z dema api stąd 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

Wygląda na to, że jest specjalnie dla wideo, podczas gdy pytanie dotyczy dźwięku, byłoby miło edytować odpowiedź pasującą. –

+0

Poważnie, dlaczego jest tak wiele odpowiedzi z widokami wideo. Pytanie nigdy nie wspominało o filmach – grant

Powiązane problemy