我正在使用ADB的屏幕录制功能来录制我的应用程序的视频。它非常方便和有用。我发现的唯一问题是最大时间限制为3分钟(180秒)。是否有任何方法或变通办法或方式,我们可以增加这一时限?
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(记得备份原始屏幕记录以防万一!)
kMaxTimeLimitSec
cyej8jka2#
在windows上,我的诀窍是创建一个screenrecord.bat文件并运行它。
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是不允许更长的视频长度的罪魁祸首。
adb screenrecord
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秒,但允许你设置任何你想要的最大超时,那就太棒了。这是一个开源项目。我可能应该弄清楚如何提交一个补丁。干杯
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分钟。
xriantvc5#
#!/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
ar7v8xwq6#
在此将所有以前的答案收集到一个连贯的BASH脚本中。需要ffmpeg(ffplay)(how to install ffmpeg)capture-screen.sh
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
z9gpfhce7#
下面是一个将屏幕录像录制到本地文件中的在线链接,没有时间限制:
adb shell "while true; do screenrecord --output-format=h264 -; done" | ffmpeg -i - screencast.mp4
注意:运行此命令需要ffmpeg实用程序
ffmpeg
此命令递归运行adb shell screenrecord命令,将输出通过管道传输到ffmpeg实用程序,并使用h264编码将结果流传输到名为"screencast.mp4"的文件中:
adb shell screenrecord
7条答案
按热度按时间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(记得备份原始屏幕记录以防万一!)
cyej8jka2#
在windows上,我的诀窍是创建一个
screenrecord.bat
文件并运行它。然后您可以使用任何视频编辑软件合并文件。
我知道这是一个蹩脚的解决方案,但
adb screenrecord
是不允许更长的视频长度的罪魁祸首。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秒,但允许你设置任何你想要的最大超时,那就太棒了。这是一个开源项目。我可能应该弄清楚如何提交一个补丁。
干杯
v8wbuo2f4#
替代解决方案:
注意引号和分号。shell命令在Android设备上作为shell脚本执行。上面的命令将创建两个mp4文件,每个文件5秒,一个接一个。
在我们的Jenkins测试项目中,我们使用如下命令执行exec步骤:
和号是adb命令的背景,允许测试脚本的其余部分继续。上面的命令将记录最多9分钟。
xriantvc5#
3分钟后保持流继续运行的功能
唯一文件名变量
显示到屏幕
保存到文件
Ctrl+C退出。
ar7v8xwq6#
在此将所有以前的答案收集到一个连贯的BASH脚本中。
需要ffmpeg(ffplay)(how to install ffmpeg)
capture-screen.sh
还提供gist
z9gpfhce7#
使用ffmpeg的优雅解决方案
下面是一个将屏幕录像录制到本地文件中的在线链接,没有时间限制:
注意:运行此命令需要
ffmpeg
实用程序解释
此命令递归运行
adb shell screenrecord
命令,将输出通过管道传输到ffmpeg实用程序,并使用h264编码将结果流传输到名为"screencast.mp4"的文件中: