使用 adb screenrecord 命令通过 USB 将 Android 屏幕镜像到 PC
Use adb screenrecord command to mirror Android screen to PC via USB
我尝试了 fadden 的建议,将 Android 屏幕镜像到 PC,但是 vlc 播放器屏幕没有任何显示:
此功能的正确命令行是什么?谢谢
由于 vlc 无法从 adb std 输出播放 h264 文件,我转而使用 ffplay 作为流播放器,它通过以下命令工作:
adb shell screenrecord --output-format=h264 - | ffplay -
OS X 二进制 ffplay 和流式屏幕:
谢谢!!
我不记得我用于初始测试的 vlc 命令行。我最近在桌面上尝试了一些不同的东西 Linux (Ubuntu 15.10).
VLC
如果您只是将输出通过管道传输到 vlc --demux h264 -
,它似乎可以工作,但您会逐渐落后。添加 --h264-fps=60
似乎有所帮助,但您开始收到错误 ("ES_OUT_SET_(GROUP_)PCR is called too late
")。添加 --clock-jitter=0
似乎可以减少错误带来的创伤,但它仍然很混乱。
ffplay
一个简单的 ffplay -
工作,但似乎需要几秒钟才能决定开始,并最终完全落后于整个时间。
更新 - 2018 年 1 月
使用 ffplay -framerate 60 -framedrop -bufsize 16M -
可以为您提供持续相当长一段时间的体面品质。这是由于下面的命令同步了帧率和比特率,否则视频将尝试以 30fps 的速度播放,由于额外的帧,随着时间的推移,一切 look/get 都会变慢。比特率将有助于尽可能保持视频的正确时间。 我发现它在 100-1000 毫秒的延迟内有效;类似于大多数蓝牙耳机。 您可能会遇到 "consider increasing probesize" 错误,该错误可能会冻结流。最好重启录屏或者尝试追加-probesize 16M
注意: 此配置与 ffplay 一起使用预先通过管道传输的以下 adb 命令。如果您是 运行 GPU 密集型任务或使用较旧的 phone,1280x720
大小是更好的建议。如果您的 phone 不支持 60fps(或似乎不以 60fps 记录),请更改直到适当的值,例如 30 或 24。
adb exec-out screenrecord --bit-rate=16m --output-format=h264 --size 1920x1080 -
mplayer
命令mplayer -demuxer h264es -
似乎产生了最好的结果。立即开始,很少延迟,并且不会像 vlc 那样惊慌失措。
根据上面的答案,我尝试了所有可能的组合,只有一个不会滞后很多,不会停止并且视频质量不错,带有 ffplay:
adb shell screenrecord --bit-rate=16m --output-format=h264 --size 800x600 - | ffplay -framerate 60 -framedrop -bufsize 16M -
大小参数可以更改为任何内容。
请注意,这还远非完美,但已经完成了工作,我也通过 WiFi 进行了尝试,足够好。
使用任何 adb shell
命令都为我生成了损坏的数据。如 lord-ralf-adolf in a comment on the 所述,使用 adb exec-out
解决了问题。
我使用这个确切的命令从 Galaxy S6 获得最佳视频质量和最小延迟:
adb exec-out screenrecord --output-format=h264 --size 540x960 - | ffplay -framerate 60 -framedrop -bufsize 16M -
mplayer
对于低延迟播放,mplayer 迄今为止表现最好。
adb shell screenrecord --output-format=h264 - | mplayer -framedrop -fps 6000 -cache 512 -demuxer h264es -
注意:上面设置了 mplayer 尽快消耗帧。不过,因此,在等待新帧时播放 window 可能会变慢。
录屏时间限制为 3 分钟"feature"。如果您愿意从代码重新编译它,这里有一个 good link.
重新编译录屏后:
adb shell screenrecord --time-limit=31000 --output-format=h264 - | mplayer -framedrop -fps 6000 -cache 512 -demuxer h264es -
我发现这个软件(适用于 linux、windows 和 mac)允许您镜像和控制通过 adb 连接的设备:
https://github.com/Genymobile/scrcpy
它救了我!
我发现可以通过以下方式实现最低延迟播放:
adb exec-out screenrecord --bit-rate=64m --output-format=h264 --size=1080x680 - | ffplay -framerate 60 -framedrop -fflags nobuffer -flags low_delay -strict experimental -analyzeduration 100000 -probesize 64 -sync ext -vf setpts=0 -fflags discardcorrupt -
根据How to minimize the delay in a live streaming with ffmpeg
我尝试了 fadden 的建议,将 Android 屏幕镜像到 PC,但是 vlc 播放器屏幕没有任何显示:
此功能的正确命令行是什么?谢谢
由于 vlc 无法从 adb std 输出播放 h264 文件,我转而使用 ffplay 作为流播放器,它通过以下命令工作:
adb shell screenrecord --output-format=h264 - | ffplay -
OS X 二进制 ffplay 和流式屏幕:
谢谢!!
我不记得我用于初始测试的 vlc 命令行。我最近在桌面上尝试了一些不同的东西 Linux (Ubuntu 15.10).
VLC
如果您只是将输出通过管道传输到 vlc --demux h264 -
,它似乎可以工作,但您会逐渐落后。添加 --h264-fps=60
似乎有所帮助,但您开始收到错误 ("ES_OUT_SET_(GROUP_)PCR is called too late
")。添加 --clock-jitter=0
似乎可以减少错误带来的创伤,但它仍然很混乱。
ffplay
一个简单的 ffplay -
工作,但似乎需要几秒钟才能决定开始,并最终完全落后于整个时间。
更新 - 2018 年 1 月
使用 ffplay -framerate 60 -framedrop -bufsize 16M -
可以为您提供持续相当长一段时间的体面品质。这是由于下面的命令同步了帧率和比特率,否则视频将尝试以 30fps 的速度播放,由于额外的帧,随着时间的推移,一切 look/get 都会变慢。比特率将有助于尽可能保持视频的正确时间。 我发现它在 100-1000 毫秒的延迟内有效;类似于大多数蓝牙耳机。 您可能会遇到 "consider increasing probesize" 错误,该错误可能会冻结流。最好重启录屏或者尝试追加-probesize 16M
注意: 此配置与 ffplay 一起使用预先通过管道传输的以下 adb 命令。如果您是 运行 GPU 密集型任务或使用较旧的 phone,1280x720
大小是更好的建议。如果您的 phone 不支持 60fps(或似乎不以 60fps 记录),请更改直到适当的值,例如 30 或 24。
adb exec-out screenrecord --bit-rate=16m --output-format=h264 --size 1920x1080 -
mplayer
命令mplayer -demuxer h264es -
似乎产生了最好的结果。立即开始,很少延迟,并且不会像 vlc 那样惊慌失措。
根据上面的答案,我尝试了所有可能的组合,只有一个不会滞后很多,不会停止并且视频质量不错,带有 ffplay:
adb shell screenrecord --bit-rate=16m --output-format=h264 --size 800x600 - | ffplay -framerate 60 -framedrop -bufsize 16M -
大小参数可以更改为任何内容。
请注意,这还远非完美,但已经完成了工作,我也通过 WiFi 进行了尝试,足够好。
使用任何 adb shell
命令都为我生成了损坏的数据。如 lord-ralf-adolf in a comment on the adb exec-out
解决了问题。
我使用这个确切的命令从 Galaxy S6 获得最佳视频质量和最小延迟:
adb exec-out screenrecord --output-format=h264 --size 540x960 - | ffplay -framerate 60 -framedrop -bufsize 16M -
mplayer
对于低延迟播放,mplayer 迄今为止表现最好。
adb shell screenrecord --output-format=h264 - | mplayer -framedrop -fps 6000 -cache 512 -demuxer h264es -
注意:上面设置了 mplayer 尽快消耗帧。不过,因此,在等待新帧时播放 window 可能会变慢。
录屏时间限制为 3 分钟"feature"。如果您愿意从代码重新编译它,这里有一个 good link.
重新编译录屏后:
adb shell screenrecord --time-limit=31000 --output-format=h264 - | mplayer -framedrop -fps 6000 -cache 512 -demuxer h264es -
我发现这个软件(适用于 linux、windows 和 mac)允许您镜像和控制通过 adb 连接的设备:
https://github.com/Genymobile/scrcpy
它救了我!
我发现可以通过以下方式实现最低延迟播放:
adb exec-out screenrecord --bit-rate=64m --output-format=h264 --size=1080x680 - | ffplay -framerate 60 -framedrop -fflags nobuffer -flags low_delay -strict experimental -analyzeduration 100000 -probesize 64 -sync ext -vf setpts=0 -fflags discardcorrupt -
根据How to minimize the delay in a live streaming with ffmpeg