首页 > 其他分享 >从几个开源项目浅谈IOS视频流输出方案

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

时间:2022-09-28 16:04:37浏览次数:47  
标签:WDA 浅谈 视频流 IOS break 开源 延迟

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

方案分析

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

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

实践和对比

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

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

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

流程图

1. WebDriverAgent MJPEG 图片服务器

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

结果示意图如下:

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

2. 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;
}
}

结果示意图如下:

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

3. Qvh视频流

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

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

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

结果示意图如下:

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

结论

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

参考文献

WebDriverAgent服务:

​github.com/facebookarc…​

STF开源项目:

​github.com/DeviceFarme…​

replay kit 接口:

​developer.apple.com/documentati…​

qvh开源项目:

​github.com/danielpaulu…​

标签:WDA,浅谈,视频流,IOS,break,开源,延迟
From: https://blog.51cto.com/u_15649298/5719641

相关文章

  • iOS小技能:金额格式处理 (货币符号本地化)
    引言iOS系统自带格式化NSFormatter的常用子类有:NSNumberFormatter(数字格式化)、NSDateFormatter(NSISO8601DateFormatter日期格式化)、NSPersonNameComponentsFormatter(名片格......
  • [iOS]遇到了一个问题:“XXXX”中无法使用Apple Pay ,检查此应用的设置并确定其设计可使
     在钥匙串里查看,发现当时申请的MerchantIDXXXX证书过期1.到apple开发者: https://developer.apple.com/account/#/overview/ 查看 Certificates,Identifiers......
  • ios(siri)控制windows的一种思路
    通过siri控制Windows可以解决一些远程控制场景。比如:睡觉前远程关闭电脑;语音(siri)控制电脑音量,控制应用运行等;具体实现:1.需要电脑开启sshserver,可以在Windows【设置】......
  • 使用iOS手势UIGestureRecognizer(转)
    UIKit中包含了UIGestureRecognizer类,用于检测发生在设备中的手势。UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,它有下面一些子类用于处理具体的手势:1、......
  • ios开发之app内起动用户评价 (转)
    ios开发之app内启动用户评价恰当的指引用户去给app评分是获得用户反馈的一种不错的途径。“通过customurlscheme启动应用程序”这篇文章里讲了通过url启动地图、邮件等程......
  • 39、使用NCNN+YOLOFast/YOLOV5,实现视频流/图片的自动化的labelme标注数据
    基本思想:首先使用c++调用了腾讯的开源框架NCNN,然后使用腾讯的rapidjson实现自动化的labelme格式化json生成,实现了自动化识别和标注数据,人工稍微修正存在错误的数据集即可;(可以p......
  • ios游戏发布流程
    这里假设你已经有苹果的开发者帐号了。其实早在两年前我就已经用过这个了,现在再回忆一下。因为苹果现在为开发者增加了macos的appstore发布权限,也增加了tvOS发布应用权限,......
  • vue3+vant+vue-router+axios+pinia+vite框架搭建
    vue3的官网地址:https://cn.vuejs.org/;这里要说一下,vue3不支持IE11,如果要兼容IE11及其一下,不建议使用vue3。创建vue脚手架,如果你需要使用ts,则需要node版本>=16。本文按照......
  • axios学习笔记
     一.  安装json-server 01安装npminstall-gjson-serverhttps://github.com/typicode/json-server 02,新建一个db.json文件,把上面链接文档的数据放上去......
  • 浅谈软件工程
    首先,软件工程是应用计算机科学、数学、逻辑学及管理科学等原理,研究和应用如何以系统规范、可定量的过程化方法去开发和维护软件的学科,具有适用性、有效性、可修改性、可靠......