ReplayKit2采用端口转发数据时不能终止的问题
一、现象描述
测试发现在进行USB连接数据投屏中,如果点击屏幕红条进行结束ReplayKit2投屏或者通知栏点击停止录制按钮,大概率出现已经停止录屏,但是通知栏中的录屏按钮还在继续录制的问题
这个现象在iOS11.2系统之前经常出现,但是后续苹果进行了修复,不再出现。
并且只有在进行USB连接的状态下面进行投屏才会出现
二、程序逻辑描述
ReplayKit2的Upload进程在收到系统的结束回调之后,需要向直播业务服务器报告直播停止的信息,因为Upload进程是一个后台进程,如果直接结束,会导致来不及发送请求
因此在结束回调的时候增加了一个延时,避免Upload进程的主线程立即结束,让 结束请求成功发往业务服务器
逻辑如下:
- (void)innerFinish
{
if(判断是投屏的话)
{
//fix USB 投屏延时之后无法正常结束,原因未知
return;
} NSDate *start = [NSDate date];
NSTimeInterval waitTime = 1.0;
while ( [[NSDate date] timeIntervalSinceDate:start] <= waitTime ) {
[[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode
beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
}
}
就是这个延时是导致这个问题的原因,去掉延时就不会产生上面的问题。目前不清楚为什么跟USB端口转发连接相关
三、解决
在投屏模式下面走正常结束的逻辑即可。
ReplayKit2采用端口转发数据时不能终止的问题的更多相关文章
- SSH的端口转发:本地转发Local Forward和远程转发Remote Forward
关于使用ssh portforwarding来进行FQ的操作,网络上已经有很多很好的文章,我在这里只是画两个图解释一下. 首先要记住一件事情就是: SSH 端口转发自然需要 SSH 连接,而 SSH ...
- SSH的端口转发
这里是一篇很好的介绍SSH PortForwarding的文章http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 可以将远端服务器一 ...
- [转载]详解ssh端口转发(二)
关于使用ssh portforwarding来进行FQ的操作,网络上已经有很多很好的文章,我在这里只是画两个图解释一下. 首先要记住一件事情就是: SSH 端口转发自然需要 SSH 连接,而 SSH ...
- SSH隧道:端口转发功能详解
SSH系列文章: SSH基础:SSH和SSH服务 SSH转发代理:ssh-agent用法详解 SSH隧道:端口转发功能详解 1.1 ssh安全隧道(一):本地端口转发 如下图,假如host3和host ...
- http80端口转发(实现微信公众号接口绑定IP时,同时支持多个公众号)
http80端口转发 背景 微信公众平台接口绑定服务器时,如果使用IP需要使用80端口,此组件可实现一个IP上绑定多个公众平台接口 使用方法 http://(IP)/WeixinMP/(转发的地址Ba ...
- firewall 实现数据的端口转发
端口转发:firewall-cmd --add-port=80/tcp firewall-cmd --add-port=10050/tcp firewall-cmd --add-forward-por ...
- 把www.domain.com均衡到本机不同的端口 反向代理 隐藏端口 Nginx做非80端口转发 搭建nginx反向代理用做内网域名转发 location 规则
负载均衡-Nginx中文文档 http://www.nginx.cn/doc/example/loadbanlance.html 负载均衡 一个简单的负载均衡的示例,把www.domain.com均衡 ...
- 端口被占用通过域名的处理 把www.domain.com均衡到本机不同的端口 反向代理 隐藏端口 Nginx做非80端口转发 搭建nginx反向代理用做内网域名转发 location 规则
负载均衡-Nginx中文文档 http://www.nginx.cn/doc/example/loadbanlance.html 负载均衡 一个简单的负载均衡的示例,把www.domain.com均衡 ...
- 【linux】ftp使用端口转发问题
相关资料: 1.[ssh]端口转发 2.[ftp]主动模式和被动模式 先说结论:用端口转发无法解决ftp客户端与服务器的连接问题,原因是ftp的data端口不固定,不能把所有>1024的端口都做 ...
- SSH远程登录和端口转发详解
SSH远程登录和端口转发详解 介绍 SSH 是创建在应用层和传输层基础上的安全协议,为计算机上的 Shell(壳层)提供安全的传输和使用环境. SSH 只是协议,有多种实现方式,本文基于其开源实 ...
随机推荐
- 抓包整理————wireshark DNS 演练[三]
前言 简单整理一些wireshark dns 演练. 正文 简单介绍一下什么是dns. 这个其实可以百度一下哈,其实就是将域名转换为ip. 然后查询过程是这样的: 根域名服务器 权威服务器 dns 被 ...
- 重新整理 .net core 实践篇—————Entity的定义[二十五]
前言 简单介绍一下实体模型的设计. 正文 前文提及了我们的应用分为: 共享层 基础设施层 领域层 应用层 今天来介绍领域模型层. 前文提及到领域模型在共享层有一个领域模型抽象类库. 里面有这些类: 先 ...
- python抽帧及生成高质量的GIF图
python抽帧及生成高质量的GIF图 对视频进行抽帧只需要两个模块即可: opencv-python (cv2) opencv-contrib-python 我们都知道视频有分辨率,即视频的宽度与高 ...
- 《c#高级编程》第4章C#4.0中的更改(九)——协变和逆变
动态字典(Dynamic Dictionary)是指一个键值对集合,其中键和值的类型都可以在运行时确定并且可以动态变化.在C#中,可以使用 dynamic 关键字来实现这一功能. 例如,下面的代码演示 ...
- KubeVela:标准化的云原生平台构建引擎
简介: 本文由"GO 开源说"第三期 KubeVela 直播内容修改整理而成,视频内容较长,本文内容有所删减和重构. KubeVela 的背景 KubeVela 是一个基于 Go ...
- 技术实践第二期|Flutter异常捕获
简介:应用性能稳定是良好用户体验中非常关键的一环,为了更好保障应用性能稳定,异常捕获在保证线上产品稳定中扮演着至关重要的角色.我们团队在推出了U-APM移动应用性能监控的产品后,帮助开发者定位并解决 ...
- dotnet 在析构函数调用 ThreadLocal 也许会抛出对方已释放
我在不自量力做一个数组池,就是为了减少使用 System.Buffers.dll 程序集,然而在数组池里面,所用的 ThreadLocal 类型,在我对象析构函数进行归还数组时,抛出了无法访问已释放对 ...
- ruby http请求组件
github地址 https://github.com/rest-client/rest-client gemfile里添加 gem 'rest-client', '~> 2.0' 执行 bun ...
- Threading Programming Guide:One
苹果支持的产生线程的方式 Operation Object 使用OperationQueue,具体可以参考:Concurrency Programming Guide GCD 使用诸如dispatch ...
- PPO近端策略优化玩cartpole游戏
这个难度有些大,有两个policy,一个负责更新策略,另一个负责提供数据,实际这两个policy是一个东西,用policy1跑出一组数据给新的policy2训练,然后policy2跑数据给新的poli ...