谁用过videocap呀(up有分)(100分)

  • 主题发起人 主题发起人 小虫子:P
  • 开始时间 开始时间

小虫子:P

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么把videocap捕获的视频用流发送出去,
不是存成文件再发,而是直接把它在内存里面的东西弄出来
它有个onvideostream但是我不知道怎么用。

 
我晚上把代码贴上来,你就知道了,不复杂的
 
找到video的句柄,根据句柄找到其结构体中一个指向缓冲区的指针,就可以捕获内存流了
 
用VideoCap太占系统资源了,最好不用
 
我胡乱说的,你可别信,学习!!!!
 
我在等待中。。。。。
 
rockjie:
我等着你的代码呢。。。。。。。。。。。。。。。。。。。。。。。。。[:(]
 
function FrameCallBack(hWnd:HWND;
lpVHdr:LongInt):LongInt;
stdcall;
var
DataPoint: ^byte;
//结构指针指向形式
DibLen: Cardinal;
begin

//转换从回调函数中得到的指针
VideoStr:=PVIDEOHDR(lpVHdr);
//得到视频数据的地址指针
//得到返回的数据大小
DibLen:=VideoStr^.dwBufferLength;
GetMem(DataPoint, DibLen);
//将帧数据COPY到一个内存中,注意DATAPOINT要先分配空间
CopyMemory(DataPoint, VideoStr^.lpData, Diblen);
//一些其他处理
FreeMem(DataPoint, DibLen);
result:= S_OK;
end;

这是调用Api和Dll来完成的
 
如果要把它从内存中区出来发到网上还得压缩,和socket编程,
不过微软的MediaServer已经可以把这套方案较好的解决了。
onvideostream的代码可以和我上面的代码一样,因为videocap也是调用
capCreateCaptureWindowA API函数的
 
微软的解决办法你可以直接这么写
{-----------------------------------------------------------------------------
Unit Name: EncodeUnit
Author: Administrator
Purpose: 视频压缩,可以是Avi文件也可以是实时的视频,前提是要有MediaServer
和Media编码器。asd文件是网上媒体流ASF文件的表述文件,用Media编码器
软件可以编辑此文件,来说明ASF文件的传播方式等。
History:
-----------------------------------------------------------------------------}


unit EncodeUnit;

interface

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

type
TMediaEncodeFrm = class(TForm)
BtnStart: TButton;
BtnStop: TButton;
BtnUseASD: TButton;
procedure BtnStartClick(Sender: TObject);
procedure BtnStopClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;


var
MediaEncodeFrm: TMediaEncodeFrm;
MSVod: Variant;

implementation

{$R *.dfm}

procedure TMediaEncodeFrm.BtnStartClick(Sender: TObject);
begin

MSVod := CreateOleObject('Asf.RealTimeEncoder');
MSVod.LoadASD('C:/EncoderASD.asd');
MSVod.Start;
end;


procedure TMediaEncodeFrm.BtnStopClick(Sender: TObject);
begin

MSVod.Stop;
MSVod := Unassigned;
end;


end.

MediaServer和Media编码器在2000Server里面都有
 
to rockjie:
谢谢,分数分分就太少了,剩下的分你到
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1433371
去拿吧。[:D]
 
多人接受答案了。
 
后退
顶部