在一个页面上,同时使用多个activex控件的问题?

ouyh12345 2007-06-21 03:09:45
我用atl生成一个activex控件,用来播放流媒体,用directshow做的。
然后做了一个对话框程序,来测试这个控件,在对话框中,放了4个控件。
问题处来了,当播放其中一个或俩个控件时,没什么问题。
而当同时播放三个或四个控件时,问题比较大,主要表现为:
1、有些事件没显示处来
2、图像有跳跃现象,这时接收和播放数据都正常,只是隔一秒多,停顿一下,然后突然前进。说明,我在源filter里对sample打了时间戳。
3、在同时播放四个控件时,其中一个控件在运行一段时间后,会停住,不动了,过比较长的时间后,才动。

谢谢参与。
...全文
451 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyg_zy 2007-06-29
  • 打赏
  • 举报
回复
谢谢ouyh12345(五岭散人)
UDX协议 2007-06-27
  • 打赏
  • 举报
回复
时间戳不对。
ouyh12345 2007-06-27
  • 打赏
  • 举报
回复
卡的原因解决了。
谢谢wwwllg(野蛮人)。
解决方法:
long ltime = _frame_per_time;
int video_count;
while ((video_count = _pbufferpool->GetVideoPoolCount()) == 0)
{
Sleep(ltime);
if ((long)m_rtSampleTime > 0)
{
m_rtSampleTime += ltime;
}
}
CRefTime rtStart = m_rtSampleTime;
.....
m_rtSampleTime += ltime;
pms->SetTime((REFERENCE_TIME *)&rtStart, (REFERENCE_TIME *)&m_rtSampleTime);
ouyh12345 2007-06-27
  • 打赏
  • 举报
回复
找到原因了。
我的FillBuffer是这样处理的:
if (缓存池的数量为0)
{
Sleep(40);
}
问题就出现在这。
因为在收数据时,网络状况不好,经常会出现缓存池里没数据的情况,这时就会Sleep。
这样在收到数据后,再打上的时间戳就落后于Render的期望,当这个落后的时间比较多时,在xvid端就会抛弃这个帧。
ouyh12345 2007-06-27
  • 打赏
  • 举报
回复
在《directshoe开发指南》里80页有句话:
CVideoTransformFilter通过输入Pin上的Receive函数接收Sample时,能够根据质量消息决定是否丢帧。

该怎样理解这句话?
ouyh12345 2007-06-27
  • 打赏
  • 举报
回复
以下是输出的一些片断:
No.:30, P, current-frame-time:48, start:13840000, end:14320000
CXvidDecoder::Transform : No.:30 start:13840000, end:0, size:14320000
No.:31, P, current-frame-time:48, start:14320000, end:14800000
CXvidDecoder::Transform : No.:31 start:14320000, end:0, size:14800000
No.:32, P, current-frame-time:48, start:14800000, end:15280000
CXvidDecoder::Transform : No.:32 start:14800000, end:0, size:15280000
No.:33, I, current-frame-time:48, start:15280000, end:15760000
No.:34, P, current-frame-time:40, start:15760000, end:16160000
......
No.:240, P, current-frame-time:48, start:107480000, end:107960000
No.:241, I, current-frame-time:48, start:107960000, end:108440000
CXvidDecoder::Transform : No.:33 start:107960000, end:0, size:108440000
No.:242, P, current-frame-time:48, start:108440000, end:108920000
No.:243, P, current-frame-time:48, start:108920000, end:109400000
.......
ouyh12345 2007-06-27
  • 打赏
  • 举报
回复
我在source filter和xvid里分别输出了帧的时间戳,
在source filter里时间戳是对的
ouyh12345 2007-06-27
  • 打赏
  • 举报
回复
时间戳就是本帧播放的开始时间和结束时间。
如果开始时间没到,就阻塞。如果过了结束时间,就抛弃。
lyg_zy 2007-06-27
  • 打赏
  • 举报
回复
请问什么是时间戳?
ouyh12345 2007-06-26
  • 打赏
  • 举报
回复
我用GraphEdit播放文件,decoder和render都与我的程序一致,也要20%的cpu
ouyh12345 2007-06-26
  • 打赏
  • 举报
回复
测试了一段时间,发现,cpu高的时候,会有一顿一顿的现象。
另外,有个控件的图像很卡,我在decoder filter里输出Transform函数里的一些数据,
REFERENCE_TIME llstart = 0;
REFERENCE_TIME llend = 0;
pIn->GetTime(&llstart, &llend);
DPRINTFRELEASE("CXvidDecoder::Transform : start:%d, end:%d, size:%d\n", llstart, llend, pIn->GetSize());
在卡的时候,有以下一些输出:
CXvidDecoder::Transform : start:48720000, end:0, size:49200000
CXvidDecoder::Transform : start:49200000, end:0, size:49680000
CXvidDecoder::Transform : start:57440000, end:0, size:57920000
CXvidDecoder::Transform : start:67520000, end:0, size:68000000
CXvidDecoder::Transform : start:86560000, end:0, size:87040000
CXvidDecoder::Transform : start:120400000, end:0, size:120880000
其中,一帧应该播放40毫秒。
可以看见,在相临的两帧间,少了很多帧。
为什么?死锁了?
ouyh12345 2007-06-25
  • 打赏
  • 举报
回复
谢谢wwwllg(野蛮人)的意见。
CathySun118 2007-06-25
  • 打赏
  • 举报
回复
学习
UDX协议 2007-06-24
  • 打赏
  • 举报
回复
另一方面,我认为,和你的时间戳也很有关系。因为,时间戳不对,一般表现就是画面停蹲。
UDX协议 2007-06-24
  • 打赏
  • 举报
回复
在播放一个控件时,平均占CPU约20%
-----------
修改控件吧,我认为是cpu吃不消的源因。

初步认为,你的控件中有不必要的空循环。
大熊猫侯佩 2007-06-22
  • 打赏
  • 举报
回复
能不能我来测试下,如果方便的话。
ouyh12345 2007-06-22
  • 打赏
  • 举报
回复
在播放一个控件时,平均占CPU约20%。
播放两时,约45%
播放三时,猛增到约80%
播放四时,略有下降,不到80%,约76%的样子

可以猜测,在播放三个控件时,由于cpu占有率猛增,造成了一系列的问题
ouyh12345 2007-06-22
  • 打赏
  • 举报
回复
好象不是死锁的问题。
在播放三个或四个控件时,接收和播放的线程都运行正常,不正常的是显示。
大熊猫侯佩 2007-06-21
  • 打赏
  • 举报
回复
因为你单个控件运行没有问题,少数也没问题。超过2个就有问题
大熊猫侯佩 2007-06-21
  • 打赏
  • 举报
回复
3 是没收到消息还是收到后因为死锁或busy导致反应迟钝或无法响应?因为你是多个
控件放在一起导致的问题,所以资源冲突或死锁可能性大些。
加载更多回复(4)

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧