每次播放流的时候,第一次读取的数据为256K,请问有什么办法可以把第一次读取的数据修改为别的数据
解决方案 »
- 高分求助InnoSetup打包工具问题 卸载程序如何删除驻内存中的dll文件
- 为什么在新建的Mdi Application中主窗口放置的按钮在子窗口中也会出现,好像子窗口是透明的一样?
- 我的DELPHI出问题了,请求帮助!!
- 窗体上有二个DBGrid控件,想做成一个显示主表,一个显示辅表怎么实现?
- 把第一份工作辞了, 心情好轻松!
- MS Agent的问题
- 请问:如何在程序中模拟键盘输入组合键Shift+Insert?
- 如何控制已编译好的程序
- 使用ADO方式,如何连接Access数据库最快?
- Treeview中拖动节点的一个小问题
- ADO设置登录验证不起作用?
- DelPhi2010的CxGrid控件包
它的256K是在GetOutpin的时候读的,随后还会读一批64K的数据,后面64K的不需要更改,只需要把第一次的这个256K改掉就行了。因为如果只读256K,那么有些MV要么没视频,要么没音频。而《DirectShow开发指南》里的MPEG NetWork的例子是读了1M,它就能正常播放MV
function TBCAsyncOutputPin.SyncRead(APosition: Int64; ALength: Longint;
ABuffer: Pbyte): HResult;
这个函数,就上不去了,不知道是哪里调用了这个函数,并且赋值ALength=256K
C的代码里也只跟踪到
CAsyncOutputPin::SyncRead(
LONGLONG llPosition, // absolute Io position
LONG lLength, // nr bytes required
BYTE* pBuffer) // write data here
{
return m_pIo->SyncRead(llPosition, lLength, pBuffer);
}
它给lLength的赋值是1M我产生的问题就是因为这个值的不同,所以C的demo能播放的MV在delphi的demo里不能播放
这个ALength既然设计成函数参数,就是允许按需赋值的
试试搜一下256K这个数字,KB/Byte/bit单位都试一下
只有一个叫OLE_S_FIRST为16进制的40000符合要求,但是并没有调用到它
out Obj): HResult;
begin
//Result := Inherited NonDelegatingQueryInterface(IID, Obj);
//IID_IStreamBuilder
if IsEqualGUID(IID, IID_IAsyncReader) then
begin
FQueriedForAsyncReader := True;
if GetInterface(IID_IAsyncReader, Obj) then
Result := S_OK
else
Result := E_FAIL;
end
else
Result := Inherited NonDelegatingQueryInterface(IID, Obj);
end;
今天试出来,在delphi里,这个函数里的IID=IID_IAsyncReader
而在VC的demo里,IID=IID_IStreamBuilder
难道就是这里的问题?