web-dev-qa-db-ja.com

adb screenrecordコマンドを使用して、Android画面をUSB経由でPCにミラーリングします

fadden からの提案を試して、Android画面をPCにミラーリングしましたが、VLCプレーヤーの画面には何も表示されません。

enter image description here

この機能の正しいコマンド行は何でしょうか?ありがとう。

25
jason.chuang

最初のテストで使用した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で再生しようとするため、フレームレートとビットレートを同期させる以下のコマンドが原因で、余分なフレームのためにすべてが見た目/遅くなります。ビットレートは、ビデオのタイミングを可能な限り適切に保つのに役立ちます。 100-1000MSの遅延内で動作することがわかりました;ほとんどのBluetoothヘッドセットと同様です。 「プローブサイズを増やすことを検討してください」というエラーが表示され、ストリームがフリーズする場合があります。 screenrecordを再起動するか、_-probesize 16M_を追加することをお勧めします

注: ffplayを使用したこの構成は、事前にパイプされた次のadbコマンドで機能します。 GPUを集中的に使用するタスクを実行している場合、または古い携帯電話を使用している場合は、_1280x720_のサイズをお勧めします。お使いの携帯電話が60fpsをサポートしていない(または60fpsで記録していないようであれば)30または24などの値で適切になるまで変更します。

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

mplayer

コマンド_mplayer -demuxer h264es -_が最良の結果をもたらすようです。すぐに開始し、遅延はほとんどなく、vlcのように異常な動きはしません。

16
fadden

Vlcはadb std出力からh264ファイルを再生できないため、ffplayをストリームプレーヤーとして使用し、次のコマンドで動作します。

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

OS Xバイナリ ffplay およびストリーミング画面:

enter image description here

ありがとう!!

25
jason.chuang

上記の答えに基づいて、可能なすべての組み合わせを試しましたが、遅れがなく、停止せず、まともなビデオ品質を持っているものがffplayであります:

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

サイズパラメータは任意に変更できます。

これはまだ完全とはほど遠いことに注意してください。しかし、作業は完了し、WiFiでも試してみました十分に良いでした。

7
martinszy

mplayer

低遅延再生の場合、mplayerはこれまでで最高の結果を出しました。

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

注:上記はmplayerができるだけ早くフレームを消費するように設定します。ただし、その結果、新しいフレームを待機しているときに再生ウィンドウが遅くなる場合があります。

Screenrecordには、3分の時間制限「機能」があります。コードから再コンパイルすることに不安がない場合は、 good link をご覧ください。

Screenrecordを再コンパイルした後:

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

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 -
0