【新手紧急求助】:加载并运行OCX控件,导致IE浏览器页面崩溃的问题?
用VC++6.0写了个有窗口的MFC OCX控件,实现实时网络音视频流的解码和播放,在IE6.0(IE7或IE8也会存在同样的问题)中加载该控件并运行后,可以正常的解码\播放音视频.但发现按F5刷新显示页面一次或多次后,出现IE页面崩溃! 晕啊...
错误提示如下:
iexplore.exe--应用程序错误
"0x77c1840c" 指令引用的"0x00000000"内存.该内存不能为"read"
要终止程序,请点击"确定".
要调试程序,请点击"取消".
请高手过来帮帮忙!谢了
[解决办法]
MFC,OpenGL高手请进: http://topic.csdn.net/u/20100531/20/fe55580f-977b-4e59-83d9-c5261ad44568.html
[解决办法]
debugger attach进去看看就清楚了
[解决办法]
指针地址越界了吧
可能是内存泄露
[解决办法]
老兄 尝试使用debugview 跟踪打印消息
比较好用的
[解决办法]
试了一下,ie直接就崩溃退出了,其他基于ie内核的浏览器进入页面之后就卡死了,不知是网速慢下载视频还是怎么回事,长时间没反应。
[解决办法]
刚试过,网页可以打开,但不能看到视频图像喔。另外请教下,我也是在做264视频监控,而且在网页中中嵌入ocx控件的,请问下,为什么我的html页面能用360的浏览器打开,但IE就不能打开呢?他们用的都是一样的内核的喔,楼主你知道这是怎么回事吗?
[解决办法]
这样测试有啥用,让大家看看IE怎么崩溃的?只有跟踪源码才能找到错误是在什么地方。
[解决办法]
难道说的就是我? 呵呵
[解决办法]
难道说的就是我? 呵呵
[解决办法]
mark
[解决办法]
既然是刷心导致的问题。我想还是你在ocx中析构和收回资源的时候没有收回完全造成的。造成两次加载ocx冲突。楼主可以从这方面找找原因。
因为刷心页面触发page_close与page_init事件,page_paint事件,所以,楼主想问题的出发点应该在这。
[解决办法]
祝好运。
[解决办法]
不要关注显示的效率(除非你的代码很烂),硬件blt的效率都很高,你应该关注的是解码效率。
如果对视频撕裂不那么在意(在1080P的视频大运动量情况下,很容易出现)你可以考虑direct draw,简单高效。
如果你对视频质量要求较高,且希望实现多路视频播放,可以参考d3d 的swapchain。
[解决办法]
我的解码函数,希望对你有帮助
bool ffmpeg_dec::dec_one_frame(char* buf,int len,long systime,unsigned long long time_stamp,yuv_data_ptr& yuv_ptr)
{
//time_interval_check tm_check("dec check");
if(buf == NULL
[解决办法]
m_err)
{
return false;
}
m_avpkt.size = len;
m_avpkt.data = (uint8_t*)buf;
int got_picture;
while(m_avpkt.size > 0)
{
int ret = ::avcodec_decode_video2(m_context,m_picture,&got_picture,&m_avpkt);
if(ret < 0)
{
return false;
}
if(got_picture)
{
yuv_ptr = yuv_data_ptr(new yuv_data(m_context->width,
m_context->height,
m_picture->linesize[0],
m_picture->linesize[1]));
yuv_ptr->assign(m_picture->data[0],
m_picture->data[1],
m_picture->data[2],
m_picture->linesize[0],
m_picture->linesize[1],
m_context->width,
m_context->height,
time_stamp,
systime);
return true;
}
m_avpkt.data += ret;
m_avpkt.size -= ret;
}
//下面代码会在Udp丢包时产生永远无法解码的现象,还有待解决???
///*有时候第一个i帧必须将m_avpkt.data设为NULL,才能解出来,*/
m_avpkt.size = 0;
m_avpkt.data = NULL;
int ret = ::avcodec_decode_video2(m_context,m_picture,&got_picture,&m_avpkt);
if(ret < 0)
{
return false;
}
if(got_picture)
{
yuv_ptr = yuv_data_ptr(new yuv_data(m_context->width,
m_context->height,
m_picture->linesize[0],
m_picture->linesize[1]));
yuv_ptr->assign(m_picture->data[0],
m_picture->data[1],
m_picture->data[2],
m_picture->linesize[0],
m_picture->linesize[1],
m_context->width,
m_context->height,
time_stamp,
systime);
return true;
}
return false;
}
[解决办法]