写点什么

从几个开源项目浅谈 IOS 视频流输出方案

  • 2022 年 9 月 28 日
    北京
  • 本文字数:1552 字

    阅读完需:约 5 分钟

IOS 远程控制技术当中,最重要的环节是视频的输出,本文就目前出现的几种 IOS 视频流技术做一个实践和对比,重点会放在比较这几个方案在性能上的优缺点。


方案分析


IOS 视频流方案,目前可以想到的有以下三种:


通过截屏获取图片,转换成视频流的形式,这种方法可见于 facebook 研发的 WebDriverAgent(WDA)[1]技术,后由 Appium 进行维护,通过 WDA 的 MJPEG 服务接口获取屏幕截图,再用 web-socket 发送到浏览器端,就可以视觉上形成视频的效果。Apple 自带的开发组件,获取视频流,比如屏幕音视频录制可以使用 Apple 开发组件:AirPlay、ReplayKit 框架等。使用 MAC 本身的 QUICKTIME 对 IOS 设备进行录制,这种方式需要通过程序来启用 QUICKTIME。实践和对比


这里根据几个开源项目,做一个不同技术方案的视频流效果对比。


为方便比较,展示视频流的应用架构基本一致,不同之处在于使用哪种方式去获取视频流,程序架构图如下:



流程图


  1. WebDriverAgent MJPEG 图片服务器


这里我们用开源项目 STF[2] 来观察 WDA 图片服务视频流的效果。我们部署了一套 STF 在机器上,通过手机的秒表来记录视频流的延迟,结果是大概延迟 200 毫秒左右,点击有肉眼可见的卡顿。缺点是 WDA 服务启动过程略长,同时功能上不支持音频服务。


结果示意图如下:



  1. Replay kit 视频流


Apple 开发组件 replay kit[3] 经常用于直播当中,可以实时的获取视频流,它是通过 IOS 内置的录制视频组件,在苹果手机上启动一个视频输出的服务,再从此端口获取视频流。优点是传输快,缺点是由于使用了本身的录屏功能,因此对苹果硬件损耗大,手机容易发热,使用它做 IOS 视频流输出时,无法再使用直播 APP。我们使用将 replay kit 录屏方式,服务端使用 python 的 socket 方法接收视频流,展示在前端,做了个简单的程序,验证了下效果,延迟大概 100-200ms 之间。

- (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType {
@synchronized(self) { switch (sampleBufferType) { case RPSampleBufferTypeVideo: // Handle video sample buffer if (!CMSampleBufferIsValid(sampleBuffer)) { return; }
if (tempVideoTimeStamp && (CFAbsoluteTimeGetCurrent() - tempVideoTimeStamp < 0.01)) { NSLog(@"load frame..."); } else{ [imageHandler pushOneFrame:sampleBuffer]; tempVideoTimeStamp = CFAbsoluteTimeGetCurrent(); }
break; case RPSampleBufferTypeAudioApp: // Handle audio sample buffer for app audio break; case RPSampleBufferTypeAudioMic: // Handle audio sample buffer for mic audio break;
default: break; } }
复制代码

结果示意图如下:

3. Qvh 视频流

QVH[4]通过使用 MAC QUICKTIME 组件,进行屏幕录制视频,是目前 github 上的开源项目,这款技术理论上可以用在 MAC,LINUX 上,可以独立实现录制屏幕。该技术可以继续加入音频。我们使用 web-socket 技术,把 qvh 输出的视频流展示出来,得到的结果是延迟略高,我们再来看下 qvh 本身的延迟,大概有 200 毫秒,如下图:

通过 web-socket 转到前端后,延迟在 200-700ms 之间,假如用于 IOS 真机远程控制,用户体验上面可能会遇到一些瓶颈。

结果示意图如下:

结论

更多学习资料戳下方!!!

https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=infoQ&timestamp=1662366626&author=xueqi

用户头像

社区:ceshiren.com 2022.08.29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
从几个开源项目浅谈IOS视频流输出方案_测试_测吧(北京)科技有限公司_InfoQ写作社区