全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1436
推到 Plurk!
推到 Facebook!

數個媒體檔連續播放問題

尚未結案
m1357
一般會員


發表:4
回覆:3
積分:6
註冊:2004-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-23 16:54:41 IP:61.221.xxx.xxx 未訂閱
各位前輩請幫幫忙: 因專題之故,我急於完成一個多媒體播放程式,但一直苦無方法,在BCB的版面找不出高手解答,特來此版請教各路前輩,並希望能給予最高之協助,拜託大家! 我的問題是: 1.我要寫一個媒體播放程式,該程式可連續撥放多個檔案,中間不要有停頓狀態出現,而且播放框可調整及無任何控制按鈕,畫面亦可放到最大。 2.我試過TMediaPlay元件,但此元件似乎只有支援到mpg1,若是mpg2以上格式則無法播放。 3.我參考過幾篇文章,安裝了DSPack,雖然可以執行Demo程式PlayWin,但要如何做到多個媒體檔輪流播放,而且中間沒有空檔出現,我發現光讀一個小小的媒體檔案就要花好長的時間。 4.我又試了Windows Media Player的ActiveX物件,我發現無法將邊框去除,而且它所有的控制按鈕都還在,另外我也不知如何將媒體存入播放清單中讓它輪流播放。 5.可自行控制音量大小。
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-05 11:15:59 IP:211.184.xxx.xxx 未訂閱
用個List來存放你要的播放計畫檔案列表(記完整檔名),用一個廣域變數來記錄你現在播到這個list的什麼地方,再加一個timer來處理更換曲目的工作,平常就讓這個tiner不動作(enabled設成false),然後在filtergraph的ongraphcomplete的事件里面讓這個timer.enabled:=true;,在tiner的ontimer的事件中,請先把timer給關掉,避免timer再被執行,然後移動先前定義的播放指標變數,如果超過list的最末筆的話,就跳到list的最上面一筆,然後重新給filtergraph做cleargraph、renderfile、play的動作,就可以做出多檔播放了 藏私の禁止
japhenchen
高階會員


發表:51
回覆:444
積分:184
註冊:2003-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-05 11:30:29 IP:211.184.xxx.xxx 未訂閱
timer的interval可以設定隨意數字,我的做法是間隔2秒鐘再播下一首,也就是2000,你可以設到300,就已經很接近無間隔播放了,但這樣不知道會不會出錯哦,我沒出現過錯誤,就算我設到10微秒也沒錯誤發生,所以應該沒什麼大問題吧    那個當前list指標變數是從0開始算,第一首就是0,最後一首就是list的items.count-1,小心點就是,我的timer的寫法(delphi)    在ide階段請先把timer的enabled設成false,不然會出錯    
var  
  Form1: TForm1;
  currplay: integer;
  PlayList: TStringList;     implementation
procedure TForm1.Form1Create(sender:TObject);
begin
   PlayList:=TStringList.create;
   PlayList.add('c:\mp3\1.mp3');
   PlayList.add('c:\mp3\2.mp3');
   PlayList.add('c:\mp3\3.mp3');   //我自己掰的列表,你自己可以用opendialog或loadfromfile來處理
   CurrPlay:=0;
   with FilterGraph do begin  
      Active:=true;
      Renderfile(PlayList[Currplay]);
      Play;  
   end;
end;    procedure TForm1.Timer1Timer(sender:TObject);
begin
   Timer1.enabled:=false;  //關掉timer
   if CurrPlay<(PlayLisy.count-1) then 
      inc(CurrPlay)
   else 
      CurrPlay:=0;
   with FilterGraph do begin
      ClearGraph;
      RenderFile(PlayList[CurrPlay]
   end;
end;    procedure TForm1.FilterGraphGraphComplete(sender: TObject;
  Result: HRESULT; Renderer: IBaseFilter);
begin
   Timer1.Enabled:=true; //把 timer叫起來工作了
end;    
藏私の禁止
m1357
一般會員


發表:4
回覆:3
積分:6
註冊:2004-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-05 18:19:17 IP:61.221.xxx.xxx 未訂閱
雖然利用Timer來輪撥清單,但我目前我面臨的問題是集中在影片播放上,在播放交接處,畫面會有停頓現象,所以利用幾個元件來處理是我現在臨時解決的作法,但這樣又會佔掉太多資源,問題仍存在! 還是感謝japhenchen的指導!
系統時間:2024-05-04 12:18:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!