最近在做自动化方案, 需要使用到录屏, 调研到Android端的录屏工具(Scrcpy), 直接brew install 之后脚本调试过程中发现, 保存下来的文件无法被正常打开, 以下为踩坑过程
直接进入主题, 命令行使用Scrcpy, 通过Ctrl + C的方式终止录制, 保存的视频是正常的, 并且可以正常播放。当Scrcpy在线程或进程中运行时, 通过终止进程(terminate)的方式停止录屏会导致录屏的文件损坏, 无法正常播放, 推测可能是 v1.21版本改动了代码, 当录制的程序被意外终止时没有捕获异常, 保存视频, 所以导致了文件损坏
翻查Scrcpy 历史的commit发现, 很久之前的版本也出现过类似的问题, 只有通过Ctrl+C的方式终止录制才能正常保存视频文件, 找到问题原因之后就好办了, 找之前的 Scrcpy 版本
通过brew search 发现, brew 上并没有上传历史版本的源, 所以只能通过Git下载历史版本的源代码, 自行编译了
在Scrcpy 源码仓库中找到了历史版本 v1.18 版本的 commit(60c4e886d409ec8a0688e2fd43d8d12c06ebd8df) , 接下来的操作就简单了, git clone 把源码clone 到本地仓库, git log | grep 60c4e886d409ec8a0688e2fd43d8d12c06ebd8df, 确认能找到这次的 commit
接下来git reset 60c4e886d409ec8a0688e2fd43d8d12c06ebd8df 到这个分支, 这样就切换到 v1.18 的分支了
再接下来就是编译了, 编译过程按照官方提供的文档一步一步操作就好了(https://github.com/Genymobile/scrcpy/blob/master/BUILD.mdhttps://github.com/Genymobile/scrcpy/blob/master/BUILD.md)
经过以上的一套骚操作, 之后本地再次查看, scrcpy 已经切换到了 v1.18了; 再次尝试使用终止进程或者线程的方式保存的视频就能正常播放了