用Asynchronous Pluggable Protocols读网页,遇到object(如flash、rm)就不行了,怎么解决 ( 积分: 200 )

  • 主题发起人 主题发起人 club
  • 开始时间 开始时间
C

club

Unregistered / Unconfirmed
GUEST, unregistred user!
用ie&delphi里的NameSpaceHandler下的示例程序读网页,普通的都没问题。担遇到网页中包含flash、rm之类的文件就不行了。想知道是源程序中读取数据到内存的函数写的不好,还是用Asynchronous Pluggable Protocols这种方式就不能处理flash、rm之类的东西。想知道有什么办法解决没有?分不够可以再加。
 
用ie&delphi里的NameSpaceHandler下的示例程序读网页,普通的都没问题。担遇到网页中包含flash、rm之类的文件就不行了。想知道是源程序中读取数据到内存的函数写的不好,还是用Asynchronous Pluggable Protocols这种方式就不能处理flash、rm之类的东西。想知道有什么办法解决没有?分不够可以再加。
 
是太难了,还是太偏了?
 
可以处理,你具体遇到什么问题。
 
就是用ie&delphi网站的示例程序,读包含flash的网页就死掉了。flash文件不大,也就几百K。看源程序,应该是所有文件都读到内存里,再返回给TWebbrowser。想知道是例子程序里的读文件到内存那段程序写的不好,还是怎么着
 
一直都以为是读文件到内存那段程序的问题,仔细跟踪了一下才发现对于flash、avi等内嵌的文件,传过来的是地址是codebase的地址,而不是embed src的地址。请问satanmonkey,这个怎么解决?
 
object是自己负责读数据的,不通过app,也有的通过。不过至少我能确定flash是通过app读到,reayplay就是自己读了。
 
把你取url那段放上来看看,我觉得是这里有问题。
 
1.
我试了一下,flash确实是通过app,而rm和avi、asf就不通过app。不知这个有方法解决没有?还有我用ie&delphi上的示例程序(http://www.euromind.com/iedelphi/download/namespace.zip),发现对于flash文件,每次只读8096字节就结束了。
示例上的这段函数如下:
function TOurNSHandler.Read(pv: Pointer; cb: ULONG; out cbRead:
ULONG): HResult;
begin
(*Read Data from DataStream to Browser/URLMON *)
DataStream.Read(pv, cb, @cbRead);
Inc(written, cbread);
if (written = totalSize) then result := S_FALSE else Result :=
E_PENDING;
end;

2.
想知道rm、avi、asf是不是通过urlmon解析地址,有没有办法监听urlmon?
 
通过不通过要看ActiveX插件是怎么实现的,比如flash就是调用了urlmon去读数据,所以可以拦截下来real play是自己开socket去读,就不能拦截。

你出这个毛病,你那太机器上安播放flash的active插件没有?
 
不走urlmon就没办法了,放弃。
 
接受答案了.
 
后退
顶部