白酒清茶无别事
我在等风也等你

OWT(WebRTC)的leaveWithOnSuccess耗时3s的解决

首先,OWT这个库是Inter基于谷歌开源的WebRTC封装来的,包含服务端和移动端,集成了一些功能模块,功能该有的都有,基本上可以替代声网了。但是这个官方文档还是太少了,官方的demo还是有很多坑。好多细节地方都没有,只能自己慢慢摸索来。

这个leaveWithOnSuccess是退出当前房间的方法,他是OWTConferenceClient的实例方法。但是执行的时候耗时太久了,基本上正常调用一次退出房间,需要2.5s左右,虽然方法是异步的方法,但是如果是同一个OWTConferenceClient对象,在退出房间的时候,是不能加入其它房间操作的。这就和业务需求不符合了,尤其是在各种多个主播房间切场景上,每次退出房间需要等待2.5s是不符合场景的。

这时候就想到每次加入房间的时候,都重新创建OWTConferenceClient对象,这样不就是解决问题了嘛?但问题根本没有这么简单。

/// 创建webRTC 客户端对象
OWTConferenceClientConfiguration* config = [[OWTConferenceClientConfiguration alloc] init];
OWTConferenceClient *conferenceClient = [[OWTConferenceClient alloc] initWithConfiguration:config];
conferenceClient.delegate = self;
self.currentClient = conferenceClient;

第一次加入,退出房间是正常的,但是当退出房间立刻加入的时候,就会报错

std::__1::system_error: mutex lock failed: Invalid argument

这就很烦了,错误在OWT内部,又不好定位,只能一句句代码排查,一步步打印。经过不懈的努力,终于定位到出错的代码就是这句

self.currentClient = conferenceClient

全局变量指向咋报错崩溃了呢?那不用全局变量也不行啊,发送消息,退出房间都得靠这个对象呢,咋办?

后面经过自己的揣摩,以及和同事讨论,大概定位到原因了。

因为在self.currentClient = conferenceClient这一句调用之前,此时的self.currentClient 指向的是上一次创建的OWTConferenceClient对象,当self.currentClient指向新的OWTConferenceClient对象时候,上一次OWTConferenceClient对象还在执行leave方法,如果执行完leaveWithOnSuccess方法时,他肯定需要回调,但这时候的旧的client已经释放了(因为没有强指针指向了),所以就出现坏内存访问问题。

那就想办法解决,在leaveWithOnSuccess之前我又创建一个lastClient指针指向旧的client,这样在执行完leaveWithOnSuccess之前,旧的client是不会被释放了。

每当调用leaveWithOnSuccess之前,我都将用lastClient指向旧的client,此时,由lastClient调用leaveWithOnSuccess方法,这时候在创建新的OWTConferenceClient对象赋值给self.currentClient也不会出现崩溃。

理论上,在lastClient释放之前,一直有强指针指向,就不会出现问题,也就是在2.5s之内,退出房间没超过3次,应该不会出现问题。

 

 

赞(1) 打赏
未经允许不得转载:努力努力再努力 » OWT(WebRTC)的leaveWithOnSuccess耗时3s的解决
分享到: 更多 (0)

评论 2

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    你好,我们最近也在处理这个.正好遇到和你一样的问题….我这边 退出会议室退不出来.造成下次进来的时候,进不去…必须退出app 过一会才能进来…..我的方法 是写在 单例里面的. 解决了好久. 还有,可否告知我一下.你那边如何编译OWT包的.我到git 上面,查了.不明白如何编译出合格的OWT包… 麻烦你有时间的话加一下QQ:779442053 或者 微信 :ZW779442053 邮箱:step_zhang@163.com

    张iOS开发者5个月前 (06-16)回复
  2. #2

    跟你一样的解决方案,而且leave不一定能正常回调,我会缓存个旧client数组,定时遍历调用leave知道能正常释放

    iOS_ZH3个月前 (09-08)回复

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏