精華區beta AndroidDev 關於我們 聯絡資訊
今天來分享一下串流影片的做法 (這裡有圖 http://fooolgle.blogspot.com/2011/05/streamrtsp.html) 在開始做之前需要知道幾件重要的事 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 -- 我的Android作品集 http://android.wuya.us/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.231.68.87 ※ 編輯: badhabit 來自: 115.80.161.110 (05/28 09:03)
mamaya3:好東西 推一個 05/28 09:14
laiis:有趣...馬上來玩玩看 05/28 11:19