2011年5月28日 星期六
播放RTSP串流的影片的功能
張貼者:
Wu
於
上午8:51
今天來分享一下在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
訂閱:
張貼留言 (Atom)
可以更新一下下載的聯結嗎??
回覆刪除感恩
你好~
回覆刪除請問可以更新一下載點嗎?
想看看實際的code怎麼寫
非常感謝!
不好意思請問可以更新程式碼的載點嗎
回覆刪除他們都失效了
謝謝~
你好請問有範例程式嗎??
回覆刪除可以發一份看看嗎??
作者已經移除這則留言。
回覆刪除您好,我想請問一下,在一邊下載影片一邊觀看的情況下,若是遇到欲觀看的片段還沒下載完成,有辦法停留在同個時間點,等待下載完成再繼續觀看嗎?
回覆刪除