簡體   English   中英

使用adb screenrecord命令將Android屏幕通過USB鏡像到PC

[英]Use adb screenrecord command to mirror Android screen to PC via USB

我試過 fadden 的建議,將Android屏幕鏡像到 PC,但 vlc 播放器屏幕什么都不顯示:

在此處輸入圖像描述

這個 function 的正確命令行是什么? 謝謝。

由於 vlc 無法從 adb std 輸出播放 h264 文件,我轉而使用 ffplay 作為流播放器,它通過以下命令工作:

adb shell screenrecord --output-format=h264 - | ffplay -

OS X 二進制ffplay和流屏幕:

在此處輸入圖片說明

謝謝!!

我不記得我用於初始測試的 vlc 命令行。 我最近在桌面 Linux (Ubuntu 15.10) 上嘗試了一些不同的東西。

VLC

如果您只是將輸出通過管道vlc --demux h264 -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 -為您提供持續很ffplay -framerate 60 -framedrop -bufsize 16M -的體面質量。 這是由於以下命令同步了幀速率和比特率,否則視頻將嘗試以 30fps 播放,由於額外的幀,隨着時間的推移,一切看起來/變慢。 然后,比特率將有助於盡可能保持視頻正確定時。 我發現它可以在 100-1000 毫秒的延遲內工作 與大多數藍牙耳機類似。 您可能會收到“考慮增加探針大小”錯誤,這可能會凍結流。 最好重啟-probesize 16M或者嘗試追加-probesize 16M

注意:此 ffplay 配置適用於預先通過管道傳輸的以下 adb 命令。 如果您正在運行 GPU 密集型任務或使用較舊的手機,則建議使用1280x720大小。 如果您的手機不支持 60fps(或似乎沒有以 60fps 錄制),請更改為適當的值,例如 30 或 24。

adb exec-out screenrecord --bit-rate=16m --output-format=h264 --size 1920x1080 -

播放器

命令mplayer -demuxer h264es -似乎產生了最好的結果。 立即開始,幾乎沒有延遲,並且不會像 vlc 那樣驚慌失措。

根據上面的答案,我嘗試了所有可能的組合,只有一個不會滯后很多,不會停止並且具有不錯的視頻質量,帶有 ffplay:

adb shell screenrecord --bit-rate=16m --output-format=h264 --size 800x600 - | ffplay -framerate 60 -framedrop -bufsize 16M -

大小參數可以更改為任何內容。

請注意,這仍然遠非完美,但完成了工作,我也通過 WiFi 進行了嘗試,並且已經足夠好了

播放器

對於低延遲播放,mplayer 迄今為止效果最好。

adb shell screenrecord --output-format=h264 - | mplayer -framedrop -fps 6000 -cache 512 -demuxer h264es -

注意:以上設置mplayer盡快消耗幀。 盡管如此,在等待新幀時,播放窗口可能會很慢。

屏幕記錄有 3 分鍾的時間限制“功能”。 如果您覺得從代碼重新編譯它很舒服,這里有一個很好的鏈接

重新編譯屏幕記錄后:

adb shell screenrecord --time-limit=31000  --output-format=h264 - | mplayer -framedrop -fps 6000 -cache 512 -demuxer h264es -

使用任何adb shell命令都會為我生成損壞的數據。 正如lord-ralf-adolf在對已接受答案的評論中所指出的,使用adb exec-out解決了該問題。

我使用這個確切的命令從 Galaxy S6 獲得最佳視頻質量和最小延遲:

adb exec-out screenrecord --output-format=h264 --size 540x960 - | ffplay -framerate 60 -framedrop -bufsize 16M -

我發現最低延遲播放可以通過以下方式實現:

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 delay in a live streaming with ffmpeg

我找到了這個軟件(適用於 linux、windows 和 mac),它允許您鏡像和控制通過 adb 連接的設備:

https://github.com/Genymobile/scrcpy

它救了我!

使用mpv對我來說最好的結果:

adb shell screenrecord --bit-rate=16m --size 540x1140 --output-format=h264 - | mpv --profile=low-latency --no-correct-pts --fps=60 -

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM