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

bfhwhh0e  于 2023-01-24  发布在  Android
关注(0)|答案(7)|浏览(361)

我正在使用ADB的屏幕录制功能来录制我的应用程序的视频。它非常方便和有用。我发现的唯一问题是最大时间限制为3分钟(180秒)。
是否有任何方法或变通办法或方式,我们可以增加这一时限?

9q78igpj

9q78igpj1#

我遇到了同样的问题。
下面是我的解决方案,简单地说,可以通过重新编译android源代码来解决,需要患者。
1,按照https://source.android.com/source/initializing.html中的说明初始化构建环境。
2、从git下载源代码(10M带宽,大约需要1小时)。
3,通过将kMaxTimeLimitSec更改为7200(表示2小时),修改工作目录/框架/av/cmds/屏幕记录/屏幕记录. cpp的路径。
4,编译Android(需要大约2小时与核心i5 - 2500k和8G内存)
5,将path_to_working_directory/out/target/product/flo/system/bin/屏幕记录复制到安卓手机中的/system/bin(记得备份原始屏幕记录以防万一!)

cyej8jka

cyej8jka2#

在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是不允许更长的视频长度的罪魁祸首。

zsohkypk

zsohkypk3#

下面是我解决这个问题的方法。***确保在你弄乱它之前备份屏幕记录器。***我知道最大时间是180秒,并且存储在一个32位整数中。在十六进制中,这将是B4 00 00 00。所以我把屏幕记录器加载到ghex中,(我的十六进制编辑器),然后搜索B4 00 00 00。只有几个候选项。在第6次尝试时,我找到了常量的存储位置。在我的版本中,它位于偏移量0001 B 008。我将B4更改为D4,即十进制212。屏幕录制器运行了3分32秒。然后我将其更改为10 02 00 00,即210 hex,即528 dec,它运行了8分48秒。然后我将其更改为10 00 01 00,即10010 hex,即65552,它运行了...嗯,它仍在运行。
我不想再重新编译我的操作系统,我只想改变屏幕录制程序中的一个常量。所以我就这么做了。你必须有root权限才能覆盖屏幕录制程序,而且我必须重新挂载我的系统文件夹,因为它是只读的。我用下面的命令做到了这一点:装载-o rw,重新装载/系统
如果开发人员编写的screenrecorder默认为180秒,但允许你设置任何你想要的最大超时,那就太棒了。这是一个开源项目。我可能应该弄清楚如何提交一个补丁。
干杯

v8wbuo2f

v8wbuo2f4#

替代解决方案:

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

注意引号和分号。shell命令在Android设备上作为shell脚本执行。上面的命令将创建两个mp4文件,每个文件5秒,一个接一个。
在我们的Jenkins测试项目中,我们使用如下命令执行exec步骤:

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

和号是adb命令的背景,允许测试脚本的其余部分继续。上面的命令将记录最多9分钟。

xriantvc

xriantvc5#

#!/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退出。

ar7v8xwq

ar7v8xwq6#

在此将所有以前的答案收集到一个连贯的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

z9gpfhce

z9gpfhce7#

使用ffmpeg的优雅解决方案

下面是一个将屏幕录像录制到本地文件中的在线链接,没有时间限制:

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

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

解释

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

相关问题