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

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

背景

方案

以最新上市的小米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

相关文章
|
3月前
|
运维
【运维基础知识】用dos批处理批量替换文件中的某个字符串(本地单元测试通过,部分功能有待优化,欢迎指正)
该脚本用于将C盘test目录下所有以t开头的txt文件中的字符串“123”批量替换为“abc”。通过创建批处理文件并运行,可实现自动化文本替换,适合初学者学习批处理脚本的基础操作与逻辑控制。
225 56
|
3月前
|
人工智能 iOS开发 MacOS
ChatGPT编程—实现小工具软件(批量替换文本、批量处理图像文件)
ChatGPT编程—实现小工具软件(批量替换文本、批量处理图像文件)
64 0
|
4月前
|
运维 监控 Serverless
评测报告 - 函数计算驱动多媒体文件处理
官方文档为使用函数计算处理多媒体文件提供了详尽的指导,涵盖从创建函数到监控的全流程,并附有多种编程语言的代码示例。尽管文档对初学者友好,但在高级配置、故障排查及API应用等方面仍有提升空间。实际体验中,函数计算表现出色,尤其在高并发场景下,具备自动扩展能力,确保高性能和稳定性,且按使用付费模式有助于降低成本。然而,部署过程中仍需注意环境变量配置、超时设置及依赖管理等问题,部分高级功能需更多技术支持。
50 4
|
4月前
|
存储 运维 Serverless
《函数计算驱动多媒体文件处理的体验与反馈》
本次评测体验了《告别资源瓶颈,函数计算驱动多媒体文件处理》解决方案。整体引导和文档帮助较为完善,但部分进阶内容仍需优化。部署过程中,代码示例实用,便于修改应用,但依赖库版本兼容问题略有不便。函数计算在多媒体处理的性能与稳定性表现良好,尤其在处理大文件时,弹性扩展和按需计费模式有效降低成本,适合企业上云场景。云产品体验上,操作简便但文档有待增强,整体推荐企业使用该方案
|
8月前
|
存储 编解码 算法
【软件设计师备考 专题 】媒体系统基础知识,多媒体设备的性能特性,常用多媒体文件格式
【软件设计师备考 专题 】媒体系统基础知识,多媒体设备的性能特性,常用多媒体文件格式
157 0
|
7月前
|
JavaScript 程序员
老程序员分享:JS日期格式转换
老程序员分享:JS日期格式转换
93 0
|
8月前
|
存储 Shell Linux
Python 自动化指南(繁琐工作自动化)第二版:九、读取和写入文件
Python 自动化指南(繁琐工作自动化)第二版:九、读取和写入文件
102 0
|
8月前
|
存储 算法 数据处理
C# | 上位机开发新手指南(十一)压缩算法
流式压缩 流式压缩是一种能够实时处理数据流的压缩方式,例如音频、视频等实时传输的数据。 通过流式压缩算法,我们可以边读取边压缩数据,并能够随时输出已压缩的数据,以确保数据的实时性和减少存储和传输所需的带宽。 块压缩 块压缩则是将数据划分为固定大小的块,在每个块内进行独立的压缩处理。块压缩通常适用于文件、存储、传输等离线数据处理场景。 字典压缩 字典压缩是一种基于字典的压缩算法,通过建立一个字典来存储一组重复出现的字符串,并将这些字符串替换成字典中相应的索引,从而减少数据的存储和传输。字典压缩算法可以更好地处理数据中的重复模式,因为它们可以通过建立字典来存储和恢复重复出现的字符串。
132 0
C# | 上位机开发新手指南(十一)压缩算法
|
Shell Perl
Shell基础学习---4、文本处理工具、综合应用案例(归档文件、发送信息)
Shell基础学习---4、文本处理工具、综合应用案例(归档文件、发送信息)
|
运维 测试技术
嵌入式软件测试笔记12 | 什么是状态转换测试?如何开展?
嵌入式软件测试笔记12 | 什么是状态转换测试?如何开展?
166 0

热门文章

最新文章