毛孩市集 (友站連結)

2011年5月28日 星期六

播放RTSP串流的影片的功能



今天來分享一下在Android上串流影片的做法



 
 


在開始做之前需要知道幾件重要的事
1.要在Layout裡新增一個SurfaceView
2.需要實作SurfaceHolder.Callback的事件
  (implements SurfaceHolder.Callback)
3.要在surfaceCreated事件下產生MediaPlayer (不然會沒有畫面)


接下來看主要的程式碼吧


先把在Layout新增的SurfaceView存成變數,然後取得Holder
接下來都是透過Holder去做事情
設定他的型態,還有設定Callback函數


public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        surfaceview = (SurfaceView)findViewById(R.id.surfaceView1);
        surfaceholder = surfaceview.getHolder();
        surfaceholder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        surfaceholder.addCallback(this);
}


然後在surfaceCreated事件下產生MediaPlayer


@Override
public void surfaceCreated(SurfaceHolder arg0) {
        m = new MediaPlayer();//產生MediaPlayer物件
        try {
                m.setAudioStreamType(AudioManager.STREAM_MUSIC);//設定型態
                m.setDataSource("rtsp://v.starv.tv/later.3gp");//路徑
                m.setDisplay(surfaceholder);//用surfaceholder顯示畫面
                m.prepareAsync();//要用非同步的準備,UI介面才不會停住
        } catch (Exception e) {}


        m.setOnBufferingUpdateListener(new OnBufferingUpdateListener() {
        @Override
        public void onBufferingUpdate(MediaPlayer mp, int percent) {
        text.setText("緩衝處理中: "+ percent +" %");//顯示緩衝進度
        if (percent==100){//如果緩衝完成就開始播放
                m.start();
                mHandle.sendEmptyMessage(0);//開始更新進度條
        }}});


        m.setOnPreparedListener(new OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer arg0) {
                seekBar.setMax(m.getDuration());//設定總毫秒數
                m.start();//載入完成時播放
        }});
}


因為是RTSP串流的方式,所以我有透過SeekBar加上隨點即播的功能


詳細程式碼請看 http://uploadmirrors.com/download/0AFVJRV9/stream_rtsp.zip



6 則留言:

  1. 可以更新一下下載的聯結嗎??

    感恩

    回覆刪除
  2. 你好~

    請問可以更新一下載點嗎?

    想看看實際的code怎麼寫

    非常感謝!

    回覆刪除
  3. 不好意思請問可以更新程式碼的載點嗎
    他們都失效了
    謝謝~

    回覆刪除
  4. 你好請問有範例程式嗎??

    可以發一份看看嗎??

    回覆刪除
  5. 作者已經移除這則留言。

    回覆刪除
  6. 您好,我想請問一下,在一邊下載影片一邊觀看的情況下,若是遇到欲觀看的片段還沒下載完成,有辦法停留在同個時間點,等待下載完成再繼續觀看嗎?

    回覆刪除