一、现象描述

  测试发现在进行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采用端口转发数据时不能终止的问题的更多相关文章

  1. SSH的端口转发:本地转发Local Forward和远程转发Remote Forward

    关于使用ssh portforwarding来进行FQ的操作,网络上已经有很多很好的文章,我在这里只是画两个图解释一下. 首先要记住一件事情就是: SSH 端口转发自然需要 SSH 连接,而 SSH ...

  2. SSH的端口转发

    这里是一篇很好的介绍SSH PortForwarding的文章http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 可以将远端服务器一 ...

  3. [转载]详解ssh端口转发(二)

    关于使用ssh portforwarding来进行FQ的操作,网络上已经有很多很好的文章,我在这里只是画两个图解释一下. 首先要记住一件事情就是: SSH 端口转发自然需要 SSH 连接,而 SSH ...

  4. SSH隧道:端口转发功能详解

    SSH系列文章: SSH基础:SSH和SSH服务 SSH转发代理:ssh-agent用法详解 SSH隧道:端口转发功能详解 1.1 ssh安全隧道(一):本地端口转发 如下图,假如host3和host ...

  5. http80端口转发(实现微信公众号接口绑定IP时,同时支持多个公众号)

    http80端口转发 背景 微信公众平台接口绑定服务器时,如果使用IP需要使用80端口,此组件可实现一个IP上绑定多个公众平台接口 使用方法 http://(IP)/WeixinMP/(转发的地址Ba ...

  6. firewall 实现数据的端口转发

    端口转发:firewall-cmd --add-port=80/tcp firewall-cmd --add-port=10050/tcp firewall-cmd --add-forward-por ...

  7. 把www.domain.com均衡到本机不同的端口 反向代理 隐藏端口 Nginx做非80端口转发 搭建nginx反向代理用做内网域名转发 location 规则

    负载均衡-Nginx中文文档 http://www.nginx.cn/doc/example/loadbanlance.html 负载均衡 一个简单的负载均衡的示例,把www.domain.com均衡 ...

  8. 端口被占用通过域名的处理 把www.domain.com均衡到本机不同的端口 反向代理 隐藏端口 Nginx做非80端口转发 搭建nginx反向代理用做内网域名转发 location 规则

    负载均衡-Nginx中文文档 http://www.nginx.cn/doc/example/loadbanlance.html 负载均衡 一个简单的负载均衡的示例,把www.domain.com均衡 ...

  9. 【linux】ftp使用端口转发问题

    相关资料: 1.[ssh]端口转发 2.[ftp]主动模式和被动模式 先说结论:用端口转发无法解决ftp客户端与服务器的连接问题,原因是ftp的data端口不固定,不能把所有>1024的端口都做 ...

  10. SSH远程登录和端口转发详解

     SSH远程登录和端口转发详解   介绍 SSH 是创建在应用层和传输层基础上的安全协议,为计算机上的 Shell(壳层)提供安全的传输和使用环境. SSH 只是协议,有多种实现方式,本文基于其开源实 ...

随机推荐

  1. 抓包整理————wireshark DNS 演练[三]

    前言 简单整理一些wireshark dns 演练. 正文 简单介绍一下什么是dns. 这个其实可以百度一下哈,其实就是将域名转换为ip. 然后查询过程是这样的: 根域名服务器 权威服务器 dns 被 ...

  2. 重新整理 .net core 实践篇—————Entity的定义[二十五]

    前言 简单介绍一下实体模型的设计. 正文 前文提及了我们的应用分为: 共享层 基础设施层 领域层 应用层 今天来介绍领域模型层. 前文提及到领域模型在共享层有一个领域模型抽象类库. 里面有这些类: 先 ...

  3. python抽帧及生成高质量的GIF图

    python抽帧及生成高质量的GIF图 对视频进行抽帧只需要两个模块即可: opencv-python (cv2) opencv-contrib-python 我们都知道视频有分辨率,即视频的宽度与高 ...

  4. 《c#高级编程》第4章C#4.0中的更改(九)——协变和逆变

    动态字典(Dynamic Dictionary)是指一个键值对集合,其中键和值的类型都可以在运行时确定并且可以动态变化.在C#中,可以使用 dynamic 关键字来实现这一功能. 例如,下面的代码演示 ...

  5. KubeVela:标准化的云原生平台构建引擎

    简介: 本文由"GO 开源说"第三期 KubeVela 直播内容修改整理而成,视频内容较长,本文内容有所删减和重构. KubeVela 的背景 KubeVela 是一个基于 Go ...

  6. 技术实践第二期|Flutter异常捕获

    ​简介:应用性能稳定是良好用户体验中非常关键的一环,为了更好保障应用性能稳定,异常捕获在保证线上产品稳定中扮演着至关重要的角色.我们团队在推出了U-APM移动应用性能监控的产品后,帮助开发者定位并解决 ...

  7. dotnet 在析构函数调用 ThreadLocal 也许会抛出对方已释放

    我在不自量力做一个数组池,就是为了减少使用 System.Buffers.dll 程序集,然而在数组池里面,所用的 ThreadLocal 类型,在我对象析构函数进行归还数组时,抛出了无法访问已释放对 ...

  8. ruby http请求组件

    github地址 https://github.com/rest-client/rest-client gemfile里添加 gem 'rest-client', '~> 2.0' 执行 bun ...

  9. Threading Programming Guide:One

    苹果支持的产生线程的方式 Operation Object 使用OperationQueue,具体可以参考:Concurrency Programming Guide GCD 使用诸如dispatch ...

  10. PPO近端策略优化玩cartpole游戏

    这个难度有些大,有两个policy,一个负责更新策略,另一个负责提供数据,实际这两个policy是一个东西,用policy1跑出一组数据给新的policy2训练,然后policy2跑数据给新的poli ...