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端口转发连接相关

三、解决

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

原文地址:https://www.cnblogs.com/doudouyoutang/p/9299514.html