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

如何用DirectShow来连续播放一组Memo里的Jpeg?

答題得分者是:wameng
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-22 16:32:39 IP:218.18.xxx.xxx 未訂閱
如果用 DsPack 组件,可以用 FilterGraph.RenderFile('myPic.Jpg') 的方式把一个 Jpeg 图片播放到屏幕上。 我有一组连续的 Jpeg 图片,为避免 Disk IO 造成的效率问题,我想直接从 Memory Stream 里把 Jpeg data 输入给 directShow,让它来播放。不知道该怎么做?是不是要自己写 Filter ?
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-22 17:49:11 IP:61.222.xxx.xxx 未訂閱
用 Thread 播放
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-23 15:50:17 IP:218.18.xxx.xxx 未訂閱
引言: 用 Thread 播放
谢谢。我的问题是我不知道用什么方式把一个 TStream 里的JEPG 直接输入给 DirectShow而不通过Disk file.
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-23 16:04:47 IP:61.222.xxx.xxx 未訂閱
轉移到 TMemoryStream
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-23 16:21:54 IP:61.222.xxx.xxx 未訂閱
隨便找的!可Email 給你 unit DSPlayerAsyncStreamSourceExample; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DirectShow9, ActiveX, StdCtrls, DSUtil; type TForm1 = class(TForm) Button1: TButton; OpenDialog1: TOpenDialog; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; procedure Button1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); private procedure NilAll(); public end; IStreamLoad = interface(IUnknown) ['{3E0FA056-926C-43d9-BA18-EF16E980913B}'] function LoadFromStream(f_Stream: TStream) : HRESULT; stdcall; end; var Form1: TForm1; g_GraphBuilder : IGraphBuilder = NIL; g_MediaControl : IMediaControl = NIL; g_DSPlayerFileSource : IBaseFilter = NIL; g_StreamSource : IStreamLoad = NIL; g_Pin : IPin = NIL; g_count : integer = 0; g_FileStream : TFileStream = NIL; const CLSID_DSPlayerAsyncSource : TGUID = '{3E0FA044-926C-42d9-BA12-EF16E980913B}'; IID_IStreamLoad : TGUID = '{3E0FA056-926C-43d9-BA18-EF16E980913B}'; pinID = 'StreamOut'; implementation {$R *.dfm} procedure TForm1.NilAll(); begin if Assigned(g_MediaControl) then CheckDSError(g_MediaControl.Stop); if Assigned(g_Pin) then g_Pin := nil; if Assigned(g_StreamSource) then g_StreamSource := nil; if Assigned(g_DSPlayerFileSource) then g_DSPlayerFileSource := nil; if Assigned(g_MediaControl) then g_MediaControl := nil; if Assigned(g_GraphBuilder) then g_GraphBuilder := nil; end; procedure TForm1.Button1Click(Sender: TObject); begin if not OpenDialog1.Execute then exit; NilAll; CheckDSError(CoCreateInstance(TGUID(CLSID_FilterGraph), NIL, CLSCTX_INPROC, TGUID(IID_IGraphBuilder), g_GraphBuilder)) ; CheckDSError(g_GraphBuilder.QueryInterface(IID_IMediaControl, g_MediaControl)); CheckDSError(CoCreateInstance(CLSID_DSPlayerAsyncSource,NIL, CLSCTX_INPROC, IID_IBaseFilter, g_DSPlayerFileSource)); CheckDSError(g_DSPlayerFileSource.QueryInterface(IID_IStreamLoad, g_StreamSource)); if g_FileStream <> nil then g_FileStream.Free; g_FileStream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead); CheckDSError(g_StreamSource.LoadFromStream(g_FileStream)); CheckDSError(g_DSPlayerFileSource.FindPin(pinID, g_Pin)); CheckDSError(g_GraphBuilder.AddFilter(g_DSPlayerFileSource, StringToOleStr('DSPlayer Async FileSource'))); CheckDSError(g_GraphBuilder.Render(g_Pin)); CheckDSError(g_MediaControl.Run); if g_count = 0 then begin g_count := g_count 1; CheckDSError(dsutil.ShowFilterPropertyPage(0,g_DSPlayerFileSource)); end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin NilAll; end; procedure TForm1.Button2Click(Sender: TObject); begin if Assigned(g_MediaControl) then CheckDSError(g_MediaControl.Run); end; procedure TForm1.Button3Click(Sender: TObject); begin if Assigned(g_MediaControl) then CheckDSError(g_MediaControl.Pause); end; procedure TForm1.Button4Click(Sender: TObject); begin if Assigned(g_MediaControl) then CheckDSError(g_MediaControl.Stop); end; procedure TForm1.Button5Click(Sender: TObject); begin CheckDSError(dsutil.ShowFilterPropertyPage(0,g_DSPlayerFileSource)); end; end.
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-25 13:14:26 IP:218.17.xxx.xxx 未訂閱
谢谢!!我仔细学习一下这段代码。
系統時間:2024-04-29 6:43:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!