好久没这么兴奋了,解决了很长时间自己棘手的问题。
因为项目需要,最近自己着手了ios开发,主要业务是拿到苹果手机的共享原生屏幕流,因为我们的主项目是h5项目,所以我还需要把这个流发到h5上,这里面也涉及了很多跨平台交互的问题,但是这次文章先不谈这个难点。
这次主要谈谈ios上建立的广播扩展,如何优雅的结束这次广播
问题:
我正在使用自己的自定义SampleHandler
展RPBroadcastSampleHandler
在iOS中实现一个广播上传扩展。问题很简单--我需要一种在扩展中优雅地结束广播的方法。要求是当所有其他用户停止观看广播时,停止广播并关闭屏幕录制。我可以很容易地侦测到这种情况。然而,RPBroadcastSampleHandler
似乎没有提供一种完成它的方法,至少不是一种优雅的方法。基于apple的开发者文档,在广播结束时(当用户结束时)有一个[broadcastFinished()
]回调,并且有一种方法可以在出现错误时完成它- [finishBroadcastWithError(_:)
]。我可以提供一些很好的错误消息,并以错误结束它,但我更喜欢在结束它时根本不显示任何错误-我不想指出有任何错误,因为这是预期的行为。
解决方案:
Stack Overflow用户
发布于 2021-08-23 20:03:29
您应该使用Obj-C代码来完成此操作。正如您在[Telegram Official repository]上看到的,它们使用BroadcastUploadHelpers来优雅地停止sampleHandler。
void finishBroadcastGracefully(RPBroadcastSampleHandler * _Nonnull broadcastSampleHandler) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnonnull"
[broadcastSampleHandler finishBroadcastWithError:nil];
#pragma clang diagnostic pop
}
真的很厉害,这个方法,巧妙的运用了编译器的指令,让nil作为参数传进去也没有报错,也优雅的完成了我们停止广播的任务。