web-dev-qa-db-fra.com

Utilisez la commande adb screenrecord pour refléter l'écran Android sur un PC via USB

J'ai essayé la suggestion de fadden de refléter l'écran Android sur un PC, mais l'écran du lecteur VLC ne montre rien:

enter image description here

Quelles seraient les lignes de commandes correctes pour cette fonction? Merci.

23
jason.chuang

Je ne me souviens pas de la ligne de commande vlc que j'ai utilisée pour les tests initiaux. J'ai récemment essayé différentes choses sur un ordinateur de bureau Linux (Ubuntu 15.10).

VLC

Si vous dirigez simplement la sortie dans vlc --demux h264 -, cela semble fonctionner, mais vous prenez de plus en plus de retard. Ajouter --h264-fps=60 semble aider, mais vous commencez à recevoir des erreurs ("ES_OUT_SET_(GROUP_)PCR is called too late"). Ajouter --clock-jitter=0 semble rendre les erreurs moins traumatisantes, mais c'est quand même assez gâché.

ffplay

Un simple ffplay - fonctionne, mais il semble prendre quelques secondes pour décider de commencer et finit par prendre du retard sur tout le temps.

Mise à jour - janvier 2018

Utiliser ffplay -framerate 60 -framedrop -bufsize 16M - vous donne une qualité décente qui dure assez longtemps. Ceci est dû à la commande ci-dessous qui synchronise le débit d'image et le débit car dans le cas contraire, la vidéo tentera de jouer à 30 images par seconde, ce qui rend tout/ralentit avec le temps en raison des images supplémentaires. Le débit binaire aidera alors à garder la vidéo correctement cadencée le mieux possible. J'ai trouvé que cela fonctionnait dans un délai de 100-1000 MS; similaire à la plupart des casques Bluetooth. Vous pourriez recevoir une erreur "envisager d'augmenter le nombre de tests" qui risque de geler le flux. Il est préférable de redémarrer screenrecord ou d'essayer d'ajouter -probesize 16M.

Remarque: Cette configuration avec ffplay fonctionne avec la commande adb suivante canalisée au préalable. Si vous exécutez des tâches gourmandes en ressources GPU ou utilisez un téléphone plus ancien, une taille de 1280x720 est une meilleure recommandation. Si votre téléphone ne supporte pas 60fps (ou ne semble pas enregistrer dans 60fps), changez-le jusqu'à ce que cela soit approprié avec des valeurs telles que 30 ou 24.

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

mplayer

La commande mplayer -demuxer h264es - semble donner les meilleurs résultats. Commence immédiatement, très peu de retard, et ne panique pas comme vlc.

13
fadden

Puisque vlc ne peut pas lire le fichier h264 à partir de la sortie d’adb std, j’utilise maintenant ffplay comme lecteur de flux et cela fonctionne via la commande suivante:

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

OS X binaire ffplay et écrans de streaming:

enter image description here

Merci!!

22
jason.chuang

Sur la base des réponses ci-dessus, j'ai essayé toutes les combinaisons possibles et il n'y en a qu'une qui ne traîne pas beaucoup, ne s'arrête pas et a une qualité vidéo décente, avec ffplay:

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

Le paramètre de taille peut être changé en n'importe quoi. 

Notez que ceci est encore loin d’être parfait, mais le travail est fait et j’ai également essayé par WiFi et c’était assez bon .

4
martinszy

mplayer

Pour la lecture à faible latence, le mplayer a fonctionné le mieux jusqu'à présent.

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

Remarque: ce qui précède permet au lecteur de consommer des images dès que possible. En conséquence, la fenêtre de lecture risque d’être lente en attendant de nouvelles images.

Le compte d’écran a une "fonctionnalité" limitée à 3 minutes. Si vous êtes à l'aise avec la recompilation à partir du code, voici un lien bon lien .

Après recompilation du compte d’écran:

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

L'utilisation de l'une des commandes adb Shell a généré des données corrompues pour moi. Utiliser adb exec-out, comme noté par lord-ralf-adolf dans un commentaire sur la réponse acceptée , a résolu le problème.

J'ai utilisé cette commande exacte pour obtenir une qualité vidéo optimale et un décalage minimal d'un Galaxy S6:

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