海康多路视频开发崩溃解决办法
-
出现问题描述:
在加载多路摄像头之后会在解码回调预览函数出现垃圾回收机制异常将 非托管代理对象回收; -
解决办法:
尝试过多种解决办法:
回调函数定义对象提升到全局,大多数都是说以这种方式解决,然而并没与什么用处;
用GC.keepAlive(对象),也没有用处;
在回调解码函数调用出处用多线程,无用;
回调函数声明成Static 类型,无用;
在回调函数中处理的业务用代理方式在外面处理,也没有解决;
//声明代理对象
DealVideoDelegate videoDlegate = null;
//声明委托
private delegate void DealVideoDelegate(Int32 lRealHandle, UInt32 dwDataType, IntPtr pBuffer, UInt32 dwBufSize, IntPtr pUser);
//解码回调函数
public void RealDataCallBack(Int32 lRealHandle, UInt32 dwDataType, IntPtr pBuffer, UInt32 dwBufSize, IntPtr pUser)
{
//视频数据使用委托方式处理,否则会出现内存回收异常
videoDlegate = new DealVideoDelegate(dealVideo);
videoDlegate(lRealHandle, dwDataType, pBuffer, dwBufSize, pUser);
}
private void dealVideo(Int32 lRealHandle, UInt32 dwDataType, IntPtr pBuffer, UInt32 dwBufSize, IntPtr pUser)
{
//此处处理码流解码
}
- 目前尝试解决办法:
将声明对象唯一化,不在多声明,或者加入到一个数组中;待测试;