软件测试|Scrcpy工具码流格式化

举报
霍格沃兹测试开发 发表于 2022/12/30 10:14:20 2022/12/30
【摘要】 背景方案以最新上市的小米9为例子,小米9是Android 9.0手机,虽然STF的minicap工具已经对Android 9.0进行了适配,但是采用scrcpy工具时出现获取的H264数据无法利用前端插件Broadway播放,这是因为Broadway插件不支持H264 baseline以外的码流。H264格式数据的码流通过profile_idc字段标识,小米9获取到的H264格式数据如图所示...

背景
方案
以最新上市的小米9为例子,小米9是Android 9.0手机,虽然STF的minicap工具已经对Android 9.0进行了适配,但是采用scrcpy工具时出现获取的H264数据无法利用前端插件Broadway播放,这是因为Broadway插件不支持H264 baseline以外的码流。H264格式数据的码流通过profile_idc字段标识,小米9获取到的H264格式数据如图所示:

添加描述
其中profile_idc等于100表示码流是High档次,profile_idc等于66表示码流是baseline档次。码流的取值是由手机硬件决定的。通过阅读scrcpy源码发现ScreenEncoder文件中有个createFormat私有方法可以指定视频流数据的格式,因此我们修改该方法的代码,人为的将视频流数据格式化为baseline,具体代码如图2所示。

添加描述
修改完源码之后实时投屏实现主要包括以下几个步骤:
将scrcpy源码重新编译成jar包,将jar包push到手机中。
在手机中执行命令
CLASSPATH=/data/local/tmp/scrcpy-server.jar app_process / --nice-name=scrcpy_servercom.genymobile.scrcpy.Server 0 8000000 true weight:height:0:0 false,其中weight和height是手机的宽度和高度。(需要注意的是每次执行命令后,之前push到手机中的jar包会被清除,所以每次启动命令都需要pushjar包)
执行adb forward命令确保pc可以通过forward端口和手机进行socket通信。获取视频流数据。
将获取的视频流数据解析成单条H264数据发送给web端,web端通过Broadway插件播放视频流实现实时投屏。
修改后scrcpy.jar获取得到的视频流解析数据如图所示,可以看到H264格式的数据profile_idc变成了66,码流变成baseline格式。

添加描述
效果展示

添加描述
参考文献
https://github.com/Genymobile/scrcpy

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。