2010-06-02 34 views
18

Tôi muốn điều khiển phương tiện như phát/tạm dừng để phát trực tuyến âm thanh mà tôi đang phát trong ứng dụng của mình. Tôi đang sử dụng MediaPlayer để phát và phát âm thanh.MediaController với MediaPlayer

Ai đó có thể cung cấp đoạn mã về cách sử dụng MediaController với MediaPlayer không?

Cảm ơn Chris

Trả lời

12

Dễ dàng như mã này được chiết xuất từ ​​here. Họ sử dụng VideoView thay vì một MediaPlayer, mà giúp bạn tiết kiệm một vài dòng mã:

Layout:

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

Và mã:

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

    } 
} 

Đó là tất cả. Chỉ cần thay thế mp4 video link bằng url video phát trực tuyến.

+7

Sử dụng VideoView cho âm thanh ??? – Chris

+0

Tôi có thể sử dụng tính năng này để phát trực tuyến video rtsp không? – vrunoa

43

Nó khá đơn giản để thêm điều khiển phương tiện truyền thông trong một máy nghe nhạc phương tiện truyền thông. Làm cho hoạt động của bạn triển khai MediaPlayerControl và thêm các phương thức chưa được thực hiện. Mã như sau:

Tôi đang sử dụng mã từ bản demo Api từ đây 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

Dường như điều này dành riêng cho video trong khi câu hỏi là về âm thanh, sẽ rất hay để chỉnh sửa câu trả lời cho phù hợp. –

+0

Nghiêm túc, tại sao có quá nhiều câu trả lời với lượt xem video. Câu hỏi chưa bao giờ đề cập đến bất kỳ điều gì về video – grant

Các vấn đề liên quan