如何截取播放视频控件中的视频流?(我已经没有分了,请帮忙)(100分)

  • 主题发起人 主题发起人 wsfok
  • 开始时间 开始时间
W

wsfok

Unregistered / Unconfirmed
GUEST, unregistred user!

如何截取自己编写的播放视频控件中的视频流并保存为AVI文件。
谢谢
 
不用视频卡截取
 
我也在问这个问题,一起讨论一下!
 
可以 你的电子信箱
 
1 如何将多个BMP文件+MP3=AVI文件和合并成AVI文件后图象闪烁的问题如何解决
(附源代码或详细的资料)
2 有没有不用视频采集卡截取正在播放的视频并保存为文件的方法?(附源代码或详细的资料)
3 如何截获自己用DELPHI中的控件编的媒体播放器播放的媒体文件(SWF。DAT)的视频文件的视频流保存为文件。
?(附源代码或详细的资料)
如何把几个DAT文件刻录成VCD光盘在VCD机中可播放(附源程序及资料和所用的控件)

如何把AVI转换成DAT文件
 
哗真是同路人,我刚好也正在找这方面的资料,如果你们有能给我一份吗,
当然,如果我先找到了,我也给你们发一份。在此先谢各位了。
 
想要的留下mail.程序还没写,明天开工。
Direct Show的头文件请自备
 
coolsoft@963.net俺要
 
我也正在找这东东呢
ebeggar@163.com

谢谢!
 
帮你up.
建议你用DShow写.
 
看MSDN,有这样的代码
 
我算一个:)
pihome@pihome.net
 
我算一个:) to journer在MSDN哪里

wh77@peoplemail.com.cn
 
呵呵,看来就楼主不急.
unit Main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;

type
TMainForm = class(TForm)
SourceEdit: TEdit;
DestEdit: TEdit;
SourceSpeedButton: TSpeedButton;
DestSpeedButton: TSpeedButton;
ActionButton: TButton;
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
procedure SourceSpeedButtonClick(Sender: TObject);
procedure DestSpeedButtonClick(Sender: TObject);
procedure ActionButtonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
function SameGUID(const a, b: TGuid): Boolean;
public
{ Public declarations }
procedure RewriteVideo(const SourceFileName, DestFileName: string);
end;


var
MainForm: TMainForm;

implementation

uses
DirectShow, ActiveX;

{$R *.dfm}

procedure TMainForm.FormCreate(Sender: TObject);
begin

CoInitialize(nil)
end;


procedure TMainForm.FormDestroy(Sender: TObject);
begin

CoUninitialize
end;


procedure TMainForm.SourceSpeedButtonClick(Sender: TObject);
begin

if OpenDialog.Execute then

SourceEdit.Text:=OpenDialog.FileName
end;


procedure TMainForm.DestSpeedButtonClick(Sender: TObject);
begin

if SaveDialog.Execute then

DestEdit.Text:=SaveDialog.FileName
end;


procedure TMainForm.ActionButtonClick(Sender: TObject);
begin

RewriteVideo(SourceEdit.Text, DestEdit.Text)
end;


procedure TMainForm.RewriteVideo(const SourceFileName,
DestFileName: string);
var
Builder: ICaptureGraphBuilder2;
Graph: IGraphBuilder;
Mux: IBaseFilter;
FileWriter: IFileSinkFilter;
MediaControl: IMediaControl;
MediaEvent: IMediaEvent;
PinEnum: IEnumPins;
Pin: IPin;
PinInfo: TPin_Info;
MediaType: TAM_Media_Type;

EVCode: Integer;
FileName: array [0..255] of WideChar;
Res: HResult;
begin

CoCreateInstance(CLSID_CaptureGraphBuilder2, nil, CLSCTX_INPROC,
IID_ICaptureGraphBuilder2, Builder);

StringToWideChar(DestFileName, FileName, 256);
Builder.SetOutputFileName(MEDIASUBTYPE_Avi, FileName, Mux, FileWriter);

Builder.GetFiltergraph(Graph);

StringToWideChar(SourceFileName, FileName, 256);
Graph.RenderFile(FileName, nil);

Mux.EnumPins(PinEnum);
Res:=PinEnum.Next(1, Pin, nil);
while Res=S_OKdo

begin

Pin.QueryPinInfo(PinInfo);
if PinInfo.dir=PINDIR_INPUT then

begin

Pin.ConnectionMediaType(MediaType);
if not SameGUID(MediaType.majortype, MediaType_Video) then

Pin.Disconnect
end;

Res:=PinEnum.Next(1, Pin, nil)
end;


Graph.QueryInterface(IID_IMediaControl, MediaControl);
Graph.QueryInterface(IID_IMediaEvent, MediaEvent);

MediaControl.Run;
MediaEvent.WaitForCompletion(INFINITE, EVCode);
MediaControl.Stop
end;


function TMainForm.SameGUID(const a, b: TGuid): Boolean;
var
i: Byte;
begin

Result:=True;
if a.D1<>b.D1 then

Result:=False
else
if a.D2<>b.D2 then

Result:=False
else
if a.D3<>b.D3 then

Result:=False
else

for i:=0 to 7do

if a.D4<>b.D4 then

begin

Result:=False;
Exit
end
end;


end.
 
DirectShow在哪儿有下载?
 
to LeeChange,

不行呀

可以发一分你的程序源码给我吗

skysondy@163.com
 
to sky2008:
贴的已经是源码了,你还要什么?
你总要把为什么不行说出来,才好帮你解决.
 
好!!!!!!!!!
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部