我正在使用ADB的屏幕录制功能来录制我的应用程序的视频。它非常方便实用。我发现的唯一问题是最长时限为3分钟(180秒)。
我们是否可以通过任何方式或方法或方式来增加此时间限制?
答案 0 :(得分:12)
在Windows上我的诀窍是创建一个screenrecord.bat
文件并运行它。 9分钟:
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
应该归咎于不允许更长的视频...
答案 1 :(得分:10)
我遇到同样的问题。
这是我的解决方案。简而言之,它可以通过重新编译android源来解决。需要患者。
1,按照此处https://source.android.com/source/initializing.html的说明初始化构建环境。
2,从git下载源代码(用10 M带宽大约需要1小时)。
3,修改path_to_working_directory / frameworks / av / cmds / screenrecord / screenrecord.cpp,将kMaxTimeLimitSec
更改为7200(表示2小时)。
4,编译android(使用Core i5-2500k和8G RAM大约需要2个小时)
5,将你的android手机中的path_to_working_directory / out / target / product / flo / system / bin / screenrecord复制到/ system / bin(请记住备份原始屏幕记录以防万一!)
答案 2 :(得分:4)
另一种解决方案:
adb shell "screenrecord --time-limit 5 /sdcard/testRun1.mp4; screenrecord --time-limit 5 /sdcard/testRun2.mp4"
注意引号和分号。 shell命令在Android设备上作为shell脚本执行。上面的命令将创建两个每个5秒的mp4文件,一个接一个。
在我们的Jenkins测试项目中,我们使用如下命令执行exec步骤:
adb shell "screenrecord /sdcard/test1.mp4; screenrecord /sdcard/test2.mp4; screenrecord /sdcard/test3.mp4" &
&符号背景adb命令允许其余的测试脚本继续进行。上面的命令最多可记录9分钟。
答案 3 :(得分:3)
这是我解决的方式。 在弄乱屏幕录像机之前,请确保将其备份到某个位置。 。我知道最大时间为180秒,并以32位整数存储。用十六进制表示的是B4 00 0000。因此,我将screenrecorder加载到ghex(我的十六进制编辑器)中,然后搜索B4 00 0000。只有几个候选对象。在第6次尝试中,我找到了存储常量的位置。在我的版本中,它的偏移量为0001B008。我将B4更改为D4,这是十进制的212,并且screenrecorder运行了3分32秒。因此,然后我将其更改为10 02 00 00,即210进制,即528 dec,运行了8分48秒。所以我将其更改为10 00 01 00,即10010(十六进制),即65552,并且它运行了……嗯,它仍在运行。
我不想弄乱重新编译操作系统,我只想在screenrecorder程序中更改此常数。所以我做了。您必须具有root权限才能覆盖screenrecorder,并且我必须重新挂载系统文件夹,因为它已以只读方式挂载。我使用以下命令完成了此操作: mount -o rw,remount / system
如果开发人员将screenrecorder的默认设置为180秒,但允许您设置所需的最大超时时间,那真是太棒了。这是一个开源项目。我可能应该弄清楚如何提交补丁。
欢呼
答案 4 :(得分:2)
#!/bin/bash
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退出。
答案 5 :(得分:1)
在这里收集所有以前的答案到一个连贯的 BASH 脚本。
需要 ffmpeg (ffplay) (how to install 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 -
也可用作 gist