基于webrtc的资源释放问题(二)
基于webrtc的资源释放问题(二)
——建立连接的过程中意外中断
应用背景:
我们在打电话的时候会不会遇到这种情况?打电话的时候未接通之前挂掉了电话,或者在接通之后建立的连接的过程中挂掉电话?
特别是视频电话的时候,由于需要启动摄像头,所以不像语音电话那样启动的速度很快,以我的经验来看,启动摄像头分为两步:1、检查摄像头是否可用,2启动。这个过程大概需要3s。时间不可忽略不计,因此我的描述的场景一定会发生。
问题:
在建立基于webrtc的视频通信的连接过程中,有一方终止(挂断电话),会出现程序崩溃泵(crash)。
解决办法:
我仔细的追查过这个问题,这个崩溃主要是来自于native C++层 libjingle_peerconnection.so,顺便也找到了问题所在有一个指针的空引用的问题。
我们遇到bug不能采取“头疼医头,脚疼医脚”的办法,这样会带来很多潜在的问题,出了问题更难找。
我的方法如下:
在建立连接的过程中遇到有一方挂断电话的情况,并不终止连接的建立,等到连接建立成功之后再终端连接。(经过我的测试,发现微信和qq都是采用这种策略)
如何判断双方是否建立了连接?
我的方法是当PeerConnection.IceConnectionState 变成CONNECTED的时候 就表示双方已经建立连接了(或许实际上并没有建立连接),这样释放webrtc的相关资源就不会遇到程序崩溃的情况。
有问题:576487833
基于webrtc的资源释放问题(二)的更多相关文章
- 基于webrtc的资源释放问题(一)
基于webrtc的资源释放问题(一) ——重复释放webrtc的相关资源 背景: 视频通讯大都只是作为一个功能存在于各种应用中,比如微信,qq .既然只是应用的一部分,这样就涉及反复的开启和关闭视频通 ...
- 基于Quick-cocos2d-x的资源更新方案 二
写在前面 又是12点半了,对于一个程序员来说,这是一个黄金时间,精力旺盛,我想,是最适合整理和分享一些思路的时候了. 自从上次写了 基于Quick-cocos2d-x的资源更新方案 同样可见quick ...
- Android IOS WebRTC 音视频开发总结(二五)-- webrtc优秀资源汇总
本文主要整理一些webrtc相关资料供学习(会持续更新),转载请说明出处,文章来自博客园RTC.Blacker,欢迎关注微信公众号:blackerteam ---------------------- ...
- 基于 Android NDK 的学习之旅-----资源释放
做上一个项目的时候因为与C引擎交互频繁,有时候会突然莫名其妙的的整个应用程序直接挂掉.因为我是学Java 开始的,所以对主动释放内存没多大概念(GC直接帮忙回收),后查询原因才知道是因为JNI 有些对 ...
- 基于 WebRTC 技术的实时通信服务开发实践
随着直播的发展,直播实时互动性变得日益重要.又拍云在 WebRTC 的基础上,凭借多年的开发经验,结合当下实际情况,开发 UPRTC 系统,解决了网络延时.并发量大.客户端解码能力差等问题. WebR ...
- .net 资源释放(托管资源和非托管资源)
1.托管资源 像int.float.DateTime等都是托管资源:net中80%的资源都是托管资源: 托管资源的回收通过GC(垃圾回收器)自动释放分配给该对象的内存,但无法预测进行垃圾回收的时间,我 ...
- C#资源释放及Dispose、Close和析构方法
https://www.cnblogs.com/luminji/archive/2011/01/05/1926468.html C#资源释放及Dispose.Close和析构方法 备注:此文的部分 ...
- C#内存泄露与资源释放 经验总结
本文链接:http://blog.csdn.net/yokeqi/article/details/41083939 C#相比其他语言,拥有强大的垃圾回收机制,但并不是这样,你就可以对内存管理放任不管, ...
- 基于 WebRTC 实现自定义编码分辨率发送
2020年如果问什么技术领域最火?毫无疑问:音视频.2020年远程办公和在线教育的强势发展,都离不开音视频的身影,视频会议.在线教学.娱乐直播等都是音视频的典型应用场景. 更加丰富的使用场景更需要我们 ...
随机推荐
- git学习手册
#git学习手册 git: Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.[2] Git 是 Linus Torvalds 为了帮助管理 Linux内核开发而 ...
- Android LayoutInflater详解
在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且 ...
- mac os 下的sublime --- 快捷键
mac os 下的sublime ---列模式 http://www.oschina.net/question/249672_161413 触控板也可以的:左手同时按住 Option 和触控板左下角 ...
- ios导航器跳转动画
出栈或压栈简单实现动画 CATransition *animation1=[CATransition animation];//类方法创建一个切换对象 animation1.duratio ...
- OpenStack学习参考
预备知识 Python 调试手段.日志:pdb 开源框架 Django 面向对象:类.继承.多态 编码规范 搭建环境 安装docker,下载openstack镜像,关于docker参考 使用fuel来 ...
- sql server 删除表及表的相关视图、存储过程、方法
注意:进行此操作前需先备份数据库,免得删错无法恢复 1.查询 SELECT Name ,type FROM SysObjects WHERE name LIKE '%cases%' 2.拼接语句 SE ...
- 查看apache、linux、kernel、nginx等版本
查看apache版本 /usr/sbin/apachectl -v httpd -v 安装目录,使用apachectl -v 查看mysql版本 mysql –help | grep Distri ...
- 用java 代码下载Samba服务器上的文件到本地目录以及上传本地文件到Samba服务器
引入: 在我们昨天架设好了Samba服务器上并且创建了一个 Samba 账户后,我们就迫不及待的想用JAVA去操作Samba服务器了,我们找到了一个框架叫 jcifs,可以高效的完成我们工作. 实践: ...
- Error : An error occurred while creating the WebJob schedule: Response status code does not indicate success: 409 (Conflict).
How to fix the error? the answer is simple switch from Free to Standard...
- [转]spring_bean的属性
1.parent 表示继承的父类 如果有很多继承同一个父类的BEAN 那么在配置文件中实例那些BEAN时候可以省略掉父类已经注入的属性 bean定义继承父bean定义,它可以覆盖父bean的一些值,或 ...