ReplayKit2采用端口转发数据时不能终止的问题

Posted doudouyoutang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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采用端口转发数据时不能终止的问题的主要内容,如果未能解决你的问题,请参考以下文章

ReplayKit2 有线投屏项目-反向Socket实现

Nginx做转发

端口转发器

服务器访问如何配置防火墙实现端口转发

linux ssh 端口转发

数据库不能直连,用端口转发工具啊