TSINGSEE青犀视频编译WebRTC使用VideoTrackInterface类析构崩溃报“引发了异常:读取访问权限冲突”问题

在TSINGSEE青犀视频开发WebRTC时,使用了VideoTrackInterface类,WebRTC创建了一个VideoTrack实现VideoTrackInterface接口,VideoTrack新建了一个VideoTrackRenderers对象来完成VideoRendererInterface接口到VideoRenderer接口的适配工作。VideoTrackRenderers一方面从VideoRenderer接口派生,这样就可以将自己通过VideoSourceInterface的AddSink方法挂接进去来接收视频帧数据,另一方面将接收到的视频帧数据分发给外部挂接给VideoTrackInterface的VideoRendererInterface接口。

我们实例化一个VideoTrackInterface类对象;进行析构时,触发一个端点崩溃;出现“引发了异常:读取访问权限冲突,this->ptr_->是0xDDDDDDDD”原因。

这类问题好多都是指针的初始化所造成的,所以当报这个错误的时候,先检查一下自己的指针是否初始化。

内存冲突问题经常发生在malloc和new xxx[xxxx]等进行分配后指针的使用上。C和C++中的指针其优势很明显,灵活和方便,这样使用起来简单;但是劣势当然也很明显,就是容易导致系统崩溃。指针操作不当、来不及释放、没有判断指针是否越界和没有及时置空,都会导致系统崩溃。

我们在使用VideoTrackInterface类中,使用的是WebRTC中计数函数来实例化的,如下图:

所以释放资源使用videoTrack=nullptr能更好释放资源;并且创建的音视频工厂也要随着释放资源,否则也会导致访问冲突。

音视频工厂创建如下:

Factory = webrtc::CreatePeerConnectionFactory(
		nullptr, nullptr, SignalingThread, nullptr,
		webrtc::CreateBuiltinAudioEncoderFactory(),       
	  webrtc::CreateBuiltinAudioDecoderFactory(),
	  webrtc::CreateBuiltinVideoEncoderFactory(),
	  webrtc::CreateBuiltinVideoDecoderFactory(),
	  nullptr /*audio_mixer*/,
	  nullptr /*audio_processing*/);

释放音视频工厂如下:

Factory.release();
原文地址:https://www.cnblogs.com/TSINGSEE/p/14268148.html