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端口转发连接相关
三、解决
在投屏模式下面走正常结束的逻辑即可。