首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > 多媒体 >

【新手】:加载并运行OCX控件,导致IE浏览器页面崩溃的有关问题

2013-01-23 
【新手紧急求助】:加载并运行OCX控件,导致IE浏览器页面崩溃的问题?用VC++6.0写了个有窗口的MFC OCX控件,实现

【新手紧急求助】:加载并运行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事件,所以,楼主想问题的出发点应该在这。
[解决办法]

引用:
我们的OCX没有做微软的数字签名认证,所以先要在IE浏览器的安全设置里把ActiveX控件那里的设置要"启用"或"提示",不要设置禁用就可以了.. 要不然,下载不了CAB包.
在IE的internet选项,安全里,自定义安全级别里然后有一个 ActiveX控件和插件,把下面的设置改为"启用"或"提示"就可以了.下载未签名和已签名的ActiveX控件,设置为"启用"或"提示",就OK了.……


楼主,你好,我想问下你们的cab怎么做才能自动下载安装,我搞了一个,在有些机器上(xp+sp2)无法安装,详细情况请看我的帖子:http://topic.csdn.net/u/20100709/15/8f48a386-adef-44e7-b71b-cfb589e801b3.html?78510
希望楼主可以帮忙下,我的控件是做摄像头拍摄的。
[解决办法]
你可以试试coreavc h264 decoder2.0, 网上有破解版。
我用它在普通双核PC上可以轻松解码720 50P。
[解决办法]
45ms,是长了点.
也许是参数设置的问题?
去掉异常处理试试.

另外,CoreAVC是只有FILTER版本,
不过你既然用过DSHOW,可以把CoreAVC
封装成DLL,这个并不难实现.


[解决办法]
3D API要比DDRAW API效率高。

参考
[解决办法]
./configure --prefix=`pwd`/mybuild --enable-memalign-hack --enable-shared --enable-static --disable-encoders --disable-muxers --disable-demuxers --disable-filters --disable-decoders --enable-decoder=h264 --enable-decoder=mjpeg --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-parsers --enable-parser=h264 --disable-protocols --disable-bsfs --disable-network --disable-indevs --disable-debug --enable-runtime-cpudetect --enable-gpl --enable-version3

支持mjpeg和h264

不用考虑硬件加速,主流机器上1080P 12M 25帧 每帧在30-35ms左右 ,显示方面direct draw 和d3d都可以,但是direct draw 垂直同步比较难搞,特别是在多路情况下。


祝好运。

[解决办法]
不要关注显示的效率(除非你的代码很烂),硬件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;
}
[解决办法]

引用:
谢谢楼上的朋友!

也非常感谢 dengzikun 大哥 :) 下载了你的代码,看了,也测试过了.

dengzikun 大哥,有个问题,再请教下你:
在用 D3D 做显示的时候,是不是RGB贴图比YUV贴图占用显卡的资源要大很多?测试用BGR24显示时,显卡温度上升得厉害,程序跑不到5分钟,显卡的温度就从37度升高到48度.不敢长时间用BGR24再测试了,怕显卡烧了!换成用YUV420……


写这个程序的时候,我的显卡不支持D3D RGB24直接渲染,所以在RGB24中也用shader了,
如果你的显卡支持RGB24,你可以修改代码试试看。

RGB24数据量比YUV420大,但是RGB的shader没有YUV420的计算量大。
[解决办法]
引用:
dengzikun 大哥,你那个 基于D3D的YV12视频渲染 源代码下载要 5 个积分啊?!好贵,小弟我已经穷得只剩个鸭蛋了。。。哎!老大,你能不能在QQ或MSN上发给我学习下呀? 到时候结贴,我多给你些分 :)

以前不是听说DDraw Overlay技术用来显示视频是速度最快的吗?直接操作显卡的显存?...呵呵

希望可以结交更多做H.264 1080P编解码的朋友,我的联系方式,M……


呵呵,今天才看到,你已经下载了。
[解决办法]
指针地址无效,
------解决方案--------------------


引用:
enum GEOMETRIC_TRANSFORMATION
{
Upper_Down_Flip = 1, // 图像上下翻转
Not_Upper_Down_Flip = 2,
Left_Right_Mirror = 3, // 图像左右镜像
Upper_Right_Mirror = 4 // 图像左右镜像并且上下翻转
};

呵呵,dengzikun 老大,在你原来代码的基础上加了……


所谓不支持全屏,是指D3D中的应用程序独占显卡的全屏模式。
这里实现的全屏,如你所说,是把窗口放大为全屏,和独占模式的全屏相比,是伪全屏。
[解决办法]
你的显卡跑1080P应该没问题。
主板应该也不差吧,我以前遇到过主板导致的撕裂问题。

你下载新的DX9 SDK试试。

D3DPRESENT_INTERVAL_ONE就是做垂直同步,防撕裂的。

也可以试着修改显卡的一些3D属性,如垂直同步,三缓冲等。

我的GeForce 9800 GT跑720P, 1080P没有问题。
[解决办法]
引用:
我的电脑配置,
CPU: 英特尔 Core i5 760 2.80GHz
主板: 华硕P7H55
内存: 海盗船 DDR3 1600MHz,4GB
显卡: 双敏Nvidia Geforce GTS450,显存1GB
硬盘: 日立,1TB
显示器:飞利浦 Philips 224E(21.7英寸)

不知道是不是我显卡有点问题,又或是NV显卡 260.63 驱动程序的问题?
我再在其……


win7下没有试过,有人也反应说有问题。

据说dx9在win7下是模拟执行。你可以编译后试试,别忘了告诉我结果。
[解决办法]
调试运行。报错后。看栈
[解决办法]
同样的问题,SPS求宽高,还有解码报错~

解码报错我判断基本上应该是P帧队列的问题,如果都使用I帧好像不报错,分辨率大了P帧队列内存容易满?

SPS求宽高我直接用p[6],p[7],p[8]就可以求,但是不完全对。

热点排行