如何增加Android Kitkat的ADB屏幕记录的时间限制



我使用ADB的屏幕录制功能录制应用程序的视频。它非常方便和有用。我发现的唯一问题是最长时间限制为3分钟(180秒)。

我们有什么办法或变通办法可以增加这个时间限制吗?

在windows上,我的诀窍是创建一个screenrecord.bat文件并运行它

adb shell screenrecord --bit-rate 8000000 /sdcard/sr1.mp4
adb shell screenrecord --bit-rate 8000000 /sdcard/sr2.mp4
adb shell screenrecord --bit-rate 8000000 /sdcard/sr3.mp4

然后,您可以将这些文件与任何视频编辑软件合并。

我知道这是一个蹩脚的解决方案,但adb screenrecord不允许更长的视频长度。。。

我遇到了同样的问题。

这是我的解决方案。简单地说,它可以通过重新编译android源代码来解决。病人是需要的。

1、按照这里的说明https://source.android.com/source/initializing.html以初始化生成环境。

2、从git下载源代码(使用10M带宽大约需要1小时)。

3、修改path_to_working_directory/frameworks/av/cmds/screenrecord/screenrecord.cpp,将kMaxTimeLimitSec更改为7200(表示2小时)。

4、编译android(使用酷睿i5-2500k和8G RAM大约需要2小时)

5、将path_to_working_directory/out/target/product/flo/system/bin/screenrecord复制到你的安卓手机中的/system/bin(记得备份原始屏幕记录以备不时之需!)

以下是我解决它的方法。在你破坏它之前,请确保将屏幕记录器备份到某个位置。我知道最长时间是180秒,并且存储在一个32位整数中。在十六进制中,这将是B4 00 00 00。所以我把screenrecorder加载到ghex(我的十六进制编辑器)中,并搜索B4 00 00 00。只有几个候选人。在第6次尝试时,我找到了常数的存储位置。在我的版本中,偏移量为0001B008。我把B4改为D4,这是212十进制,屏幕记录器运行了3分32秒。然后我把它改为10 02 00 00,这将是210十六进制,这是528十进制,它运行了8分48秒。所以我把它更改为10 00 01 00,这是10010十六进制,也就是65552,它运行。。。嗯,它还在运行。

我不想重新编译操作系统,我只想在屏幕录制程序中更改这个常量。我照做了。你必须有root权限才能覆盖屏幕记录器,我不得不重新安装我的系统文件夹,因为它是以只读方式安装的。我用命令做到了这一点:mount-o rw,remount/system

如果开发人员将screenrecorder写为默认180秒,但允许您设置任何您想要的最大超时,那将是非常棒的。这是一个开源项目。我可能应该想办法提交一个补丁。

干杯

替代解决方案:

adb shell "screenrecord --time-limit 5 /sdcard/testRun1.mp4; screenrecord --time-limit 5 /sdcard/testRun2.mp4"

注意引号和分号。shell命令在Android设备上作为shell脚本执行。上面的命令将创建两个mp4文件,每个文件5秒,一个接一个。

在我们的Jenkins测试项目中,我们使用如下命令执行步骤:

adb shell "screenrecord /sdcard/test1.mp4; screenrecord /sdcard/test2.mp4; screenrecord /sdcard/test3.mp4" & 

"与"符号将adb命令设置为背景,以便继续执行测试脚本的其余部分。上面的命令最多可记录9分钟。

#!/bin/bash 

3分钟后保持流量的功能

screenStream() {
while true
do
adb exec-out screenrecord --output-format=h264 --size 1024x768 - 
done
}

唯一文件名变量

SecondString=$(date +%s)

显示到屏幕

screenStream | ffplay -framerate 30 -framedrop -bufsize 16M -

保存到文件

screenStream | ffmpeg -i - -s 1024x768 -framerate 30 -bufsize 16M $SecondString.mp4

#Ctrl+C退出。

使用ffmpeg的优雅解决方案

这里有一个无时间限制的将屏幕截图记录到本地文件的oneliner:

adb shell "while true; do screenrecord --output-format=h264 -; done" | ffmpeg -i - screencast.mp4

注意:运行此命令需要ffmpeg实用程序

解释

该命令递归地运行adb shell screenrecord命令,将输出管道传输到ffmpeg实用程序,并将结果流式传输到名为"的文件;screencast.mp4";使用h264编码:

在此处收集单个连贯BASH脚本的所有先前答案
需要ffmpeg(ffplay)(如何安装ffmpeg)

capture-screen.sh

#!/bin/bash
set -e
# Usage:
# bash ./capture-screen.sh
# bash ./capture-screen.sh -s 192.168.1.10
ADB_FLAGS="$@"
CAPTURE_BITRATE=2000000
CAPTURE_HEIGHT=720
CAPTURE_WIDTH="$((($CAPTURE_HEIGHT / 9 * 16)))" # automatically calculate width
# this call will fail if no single device could be selected
adb ${ADB_FLAGS} shell uptime
screenStream() {
while true; do
adb ${ADB_FLAGS} exec-out screenrecord --output-format=h264 --bit-rate ${CAPTURE_BITRATE} --size "${CAPTURE_WIDTH}x${CAPTURE_HEIGHT}" -
done
}
screenStream | ffplay -hide_banner -framerate 60 -framedrop -f h264 -i -

也可用作要点

最新更新