流媒体截屏(200分)

  • 主题发起人 主题发起人 lonelyghost317
  • 开始时间 开始时间
L

lonelyghost317

Unregistered / Unconfirmed
GUEST, unregistred user!
如何编写一个后台截屏程序。要求:能截取RealOne,金山影霸等播放器的播放画面(无论是不是全屏都能截取)。还要求能截取DirectX 游戏的画面。最好有源码。这是小弟的毕业设计,时间很紧,希望DFW上的高手们帮帮小弟。谁给出了满意的答案,我就将我的全部家当(200分)给他了。我知道这个问题比较有难度,200分是不够的。不过我就这么多了,各位高手,就当帮帮忙吧。谢拉。我的E-mail:lonelyghost317@yahoo.com.cn。
 
你去源码之家那里下载,我以前做过,后台的你用托盘编程就可以了
 
to:51last,谢谢你的参与。能否给个关键词,那上面的东西太多了,我没找到。谢谢。
 
怎么没人关注啊?请各位高手救救小弟.
 
(我这台机子没装delphi,我试着自己写出来吧,写得不好不要怪我哦)
procedure screencopy;
var
bmp:tbitmap;
canvas:tcanvas;
dc:hdc;
begin

dc:=getdc(0);
canvas:=tcanvas.create;
camvas.handle:=dc;
bmp:=tbitmap.create;
bmp.width:=screen.width;
bmp.height:=screen.height;
bmp.copyrect(rect(0,0,screen.width,screen.height),canvas,rect(0,0,screen,width,screen.height));
bmp.savetofile('文件名');
bmp.free;
releasedc(dc);
canvas.free;
end;

如果你想要监视的话。
做成托盘程序好了。用tnotifyicondata(不过要加上shellapi单元哦);
 
上面的代码好像截取的只是屏幕的画面.无法截取视频流!
 
刀剑如梦说得对,c45wy你的代码只能截取普通的画面,对于各种播放器的画面,截出来是黑屏.谢谢参与.请高手们赐教.
 
方法有2种,DirectX窗口只有一个。你先占用了DirectX窗口,那么其他的程序就不能再用DirectX窗口.然后用 c45wy 写的东东就可以捉取到你想要的图。
另外一种就是去读DirectX的缓冲区。我是听人讲的,不过我没做过。有兴趣的去看看资料。
 
to:edust,怎样可以占用DirectX窗口??
 
edust的说法我没听说过,但这很正常,我不会dx嘛,或许他说的是对的。
我听说过的在这里写的很清楚了:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=631406
当然不是说绝对不可能,只是那需要太多的精力,把ms藏起来的东西找出来,和ms玩捉迷藏的游戏我可不喜欢,太累了。
 
tt.t,你说的你原来做的我之前已经看到过,并且调试了,结果是失败。不知道是我的机子装了DirectX9的问题,还是其他问题。我对DirectX不了解,还望兄台多多赐教。小弟毕业设计急用。谢谢。
 
dx9没玩过,或许有了什么变化也说不定的。你可以试着在代码中调用PrimarySurface.Getdc的asm代码前加一个messagebeep之类的,看看那段是否运行了,如未运行,则有可能
iDD:=DWORD(Pointer(DWORD((@FD)^)+8)^);//得到前台程序建立的IDirectDrawInterface
iPs:=DWORD(Pointer(DWORD(Pointer(iDD+4)^)+44)^);

两句发生了access violation,也就是说我的方法可能在dx9下不再有效了:(
我这里没有dx9没有试过。
你可以把编译好exe拿到一个装了dx8的机器上看看运行是否正常,如正常,则很可能是方法失效了。
 
to:tt.t,你的建议很好.我试着调试过拉,你说的那两行代码能运行,但是还是不能截取RealOne,金山影霸等播放器的播放画面,只能截取CS,实况足球等游戏的画面,星际也不能截.
而对于CS,实况足球,我用普通的获取屏幕句柄也能截取出来.不知道还有没有其他方法??
 
用普通的获取屏幕句柄是能截取出来,但两者有本质区别的,这个程序是我在研究dx下弹出窗口时的副产品。至于视频接图涉及的是dx show,不是ddraw了。
 
To:tt.t,那对于视频的截取,有什么办法吗?
 
那有这么简单,说实话。涉及到的技术很多
 
我也觉得是这样.但是我们老师变态,叫我这个Delphi初学者来完成这样的功能.哎,没办法呀.就请知道这种技术的高手门指点指点.
 
http://www.hyperionics.com/hsdx/hs4faq.asp#DVD
http://www.hyperionics.com/forum/topic.asp?TOPIC_ID=1250

the key to the question, i think, is to get the overlay buffer.if you intend to try to grab screenshot form vidoe players, i suggest you bulid a test program that creates a overlay window and trace it using s-ice. May be you could find sth. fine.
 
老大,我知道有软件可以完成这个功能.但是我现在是想知道原理.或者说如何用Delphi实现.
你说的s-ice是什么东东??
 
后退
顶部