一、背景
公司对视频的转换,除了格式转换外,对时长、声音等都要求一致。我们对比了模拟器方案,相比之下,三星平板p200的内置录屏更好地解决了声音内置。这一点很重要,因为我们是把一排排地平板放在支架上,几乎堆在一起了。
所以任务调度服务依赖平板上的apk应用,这里会安装一个录屏应用,由它来调用视频播放组件,从而实现格式转换。
二、总体设计
- 任务平台
业务方会将视频转换、pdf转换等作为任务,下发到该平台。
- 任务调度服务
和任务平台的交互,刚开始是由任务平台推送给任务调度服务,后面修改为由任务平台向任务平台定期拉取。待任务执行完成,再回调给任务平台,最后更新本地任务的状态。
- 截屏服务
定期对连接上的所有平台进行截屏,保存到Minio。
- platform tools
java服务调用adb命令的必须应用
- 任务监控web
image.png方便远程查看各个平板的实时运行情况,也就不用每次去机房人工察看。它会按约定的路径,展示Minio的文件全路径。
- minio
存储各个平板的截图
- 录屏apk(应用包名:com.xh.cwprecorder)
录屏apk会包装一个视频播放组件,开始播放的时候,开始录屏;但是结束播放的时候,并不会自动结束录屏,而是要由任务调度平台去触发。
第一步、任务平台在分配任务到指定平板后,并把文件推送给平板。每次都会做一些基本工作:唤醒设备、解锁屏幕、录屏应用是否已安装、杀掉录屏应用、检查原视频文件是否准备好。
第二步、任务调度平台一直循环读取开始标识的文件(文件的内容是视频的时长),如果读取到了,则调用录屏apk,去启动播放器并开始录屏。【我们是先去尝试读取文件,可能这时候录屏apk还没启动播放器,需要循环,我们采用的是redis的订阅机制redisTemplate.convertAndSend()】
第三步、录屏apk收到开始录屏的指令后,会去调用视频播放组件,读取原视频的时长,并写入到指定文件里。
待视频播放结束,写入完成标识到指定文件里。【注意:这里是视频播放结束,不是录制结束,后者得由任务调度平台来触发】
第四步、任务调度平台一直循环读取完成标识的文件,如果读取到了,则停止录制和录屏应用。【循环的间隔为1秒,为保证各个视频任务的阻塞,我们是使用多线程去监听】
第五步、录屏apk停止录屏,视频文件另存为新的视频格式,等待任务调度平台来拉取。
第六步、延迟五秒,等待上一步的完成。开始回收任务,拉取新的视频文件到任务调度平台,删除掉平板上的文件,然后上传新的视频文件到OSS,最后更新任务的信息。【这一步会比较耗时,我们是使用多线程,保证各个视频任务互不影响】
三、流程图
image.png四、任务监控web
展示总的设备数、录制中设备;未开始任务数、进行中任务数、失败任务数。
- 每个卡片会展示设备名称、设备状态、设备ID、任务ID、任务进度(任务的耗时 / 任务的时长)
- 截图的路径示例:http://192.168.80.224:9005/images/R22M801515M.png
网友评论