zoukankan      html  css  js  c++  java
  • 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端口转发连接相关

    三、解决

      在投屏模式下面走正常结束的逻辑即可。

  • 相关阅读:
    8.【原创】使用Java8中的Stream特性筛选数据
    27.【转载】如何避免回表查询,什么是索引覆盖
    17.【转载】广东省2020学位英语考试报考须知
    Java 正则?:?=?!的理解
    集合的优化操作
    ArrayList中remove方法和set(null)的区别
    POI 导入、导出Excel
    JS 跳转到新页面并用post传参
    win 10 如何关闭自动更新
    JSON定义及应用
  • 原文地址:https://www.cnblogs.com/doudouyoutang/p/9299514.html
Copyright © 2011-2022 走看看