基于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年远程办公和在线教育的强势发展,都离不开音视频的身影,视频会议.在线教学.娱乐直播等都是音视频的典型应用场景. 更加丰富的使用场景更需要我们 ...
随机推荐
- mysql5.1升级到mysql5.6
这么大跨度的升级,本身不推荐.升级应该是循序渐进的,以防止不兼容.如果确实要这么做,你先要确保你的客户端管理工具要能兼容,比如phpmyadmin,此次升级依然存在一个问题,mysql server和 ...
- JetBrains注册码计算(IntelliJ IDEA 15.0注册码激活)
安装前修改时间为2099年等很多年后的时间点,安装后选择免费试用30天,然后退出idea,把时间修改回来,这样就可以成功注册了 如果之前使用过授权服务器等激活方式,不弹出试用界面,请到C:\Users ...
- Android--Intent(意图)
Intent(意图)是安卓系统中最重要的概念, 它是一种消息传递机制, 用于系统与应用程序组件之间的交互, 意图可以分为3类, 分别是: 活动意图, 广播意图和服务意图 1. Activity Int ...
- centos 下pip 安装snappy 系列问题记录
试用sud o pip提示找不到pip命令,不加sudo可以找到,这时候需要使用whereis 去看pip命令的路径 sudo + pip完整路径即可 安装python snappy 失败提示: s ...
- Linux-002-执行命令时,提示: -bash: {命令}: command not found
首先,此文不适应未安装的命令. 起因: 进行系统环境变量配置时,路径分割符配置错误,错将":"配置为";". 现象: 任意用户执行命令时,提示:command ...
- ACM集训的1B。。。。黑色星期五。。。。2333333
题目: 印象中有好多个13号是星期五,13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数.给出N年的一个周期,要求计算1900年1月1日至1900 ...
- [CC]平面拟合
常见的平面拟合方法一般是最小二乘法.当误差服从正态分布时,最小二乘方法的拟合效果还是很好的,可以转化成PCA问题. 当观测值的误差大于2倍中误差时,认为误差较大.采用最小二乘拟合时精度降低,不够稳健. ...
- 初识Redis(1)
Redis 是一款依据BSD开源协议发行的高性能Key-Value存储系统(cache and store). 它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希( ...
- RabbitMq中的交换机
Rabbitmq的核心概念(如下图所示):有虚拟主机.交换机.队列.绑定: 交换机可以理解成具有路由表的路由程序,仅此而已.每个消息都有一个称为路由键 ...
- SCRUM 流程的步骤2: Spring 计划
1. product backlog. 2. 把故事进一步拆分成任务. 5. 形成Sprint backlog. Scrum master隆重登场,组织大家按照SCRUM流程,步步为营顺利开展工作 ...