web-dev-qa-db-fra.com

MPlayer: votre système est trop lent pour y jouer!

Je viens d'essayer de lire un fichier vidéo AVCHD 1080p enregistré à 60 FPS avec mon reflex Sony sur mon poste de travail Ubuntu 12.04 et, à ma grande surprise, MPlayer n'a pas été en mesure de lire la vidéo en douceur. J'ai copié le fichier sur un disque dur local.

La vidéo est lue plus lentement que prévu et la désynchronisation AV continue de croître régulièrement (environ 1 seconde de désynchronisation par 10 secondes de lecture). L'un des 8 threads de la CPU tire jusqu'à 100%.

Je me demandais si cela était à prévoir sur mon matériel. C'est un peu difficile à croire, étant donné que mon ordinateur portable T60 joue la vidéo très bien, alors je soupçonne des problèmes logiciels.

Spécifications du poste de travail:

  • CPU: Intel Quad Core i7-920 à 2,67 GHz
  • GPU: Nvidia GeForce 9600 GSO 512
  • RAM: 8 Go
  • Compiz si fonctionne bien, même si je l’ai éteint pour ce test (aucune amélioration de la lecture vidéo)
  • Le système est généralement rapide et réactif.
  • La lecture d’un MP4 avec un flux h264 1080p à 30 images par seconde donne de bons résultats.
  
 root @ boss: ~ # glxinfo | grep direct 
 rendu direct: Oui 
 
 racine @ boss: ~ # glxinfo | grep vendor 
 chaîne du fournisseur glx du serveur: NVIDIA Corporation 
 chaîne du fournisseur glx du client: NVIDIA Corporation 
 chaîne du fournisseur OpenGL: NVIDIA Corporation 


Sortie Mplayer:

 valprj @ boss: ~ $ mplayer 00006.MTS 
 MPlayer svn r34540 (Ubuntu), construit avec gcc-4.6 (C) 2000-2012 MPlayer Team 
 mplayer: impossible de se connecter sur le socket 
 mplayer: Aucun fichier ou répertoire de ce type 
 n'a pas pu ouvrir le support LIRC. Vous ne pourrez pas utiliser votre télécommande. 
 
 Lecture de 00006.MTS. 
 Libavformat version 53.21.1 (externe) 
 Disparité inadéquate version 53.19.0 
 Format de fichier TS détecté. 
 VIDÉO H264 (pid = 4113) AUDIO A52 (pid = 4352) SUB Télétexte (pid = 4608) PROGRAMME N. 1 
 FPS semble être: 59.940060 
 Charger les sous-titres dans ./
================================= ======================================= 
 Décodeur vidéo d'ouverture: [ ffmpeg] Famille de codecs libavcodec de FFmpeg 
 libavcodec version 53.35.0 (externe) 
 Mism Matching version 53.32.2 
 Codec vidéo sélectionné: [ffh264] vfm: ffmpeg (FFmpeg H.264 ) 
 ========================================== ============================= 
 ============== =============================================== ========= 
 Ouverture d'un décodeur audio: [ffmpeg] Décodeurs audio FFmpeg/libavcodec 
 AUDIO: 48000 Hz, 2 canaux, S16le, 256.0 kbit/16.67% (rapport: 32000 -> 192000) 
 Codec audio sélectionné: [ ffac3] afm: ffmpeg (FFmpeg AC-3) 
 ================================= ====================================== 
 AO: [alsa] 48000Hz 2ch s16le (2 octets par échantillon) 
 Commencer la lecture ... 
 PixelFormat non pris en charge 61 
 Non pris en charge PixelFormat 53 
 Non pris en charge PixelFormat 81 
 Movie- L'aspect est de 1,78: 1 - calage pour corriger l'aspect du film. 
 VO: [vdpau] 1920x1080 => 1920x1080 Planaire YV12 
 A: 6,6 V: 6,1 AV: 0,496 ct: -0,017 453/453 96 % 10% 0.6% 221 0 
 
 
 ************************** ******************** 
 **** Votre système est trop lent pour lire ceci! **** 
 **************************************** ******* 
 
 Causes possibles, problèmes, solutions de contournement: 
 - Le plus courant: pilote défectueux/défectueux _audio_ 
 - Essayez -ao sdl ou utilisez L'émulation OSS d'ALSA. 
 - Faites des essais avec différentes valeurs pour -autosync, c'est un bon début. 
 - Sortie vidéo lente 
 - Essayez un autre pilote -vo (-vo Aide pour une liste) ou essayez -framedrop! 
 - Processeur lent 
 - N'essayez pas de lire un gros DVD/DivX sur un processeur lent! Essayez certaines des lavdopts, 
 -vfm ffmpeg -lavdopts lowres = 1: rapide: skiploopfilter = all. 
 - Fichier brisé 
 - Essayez différentes combinaisons de -nobps -ni -forceidx -mc 0. 
 - Lent médias (montages NFS/SMB, DVD, VCD, etc.) 
 - Essayez -cache 8192. 
 - Utilisez-vous -cache pour lire un fichier AVI non entrelacé? 
 - Essayez-le -nocache. 
 Lisez DOCS/HTML/en/video.html pour des conseils de réglage/d'accélération. 
 Si rien de tout cela ne vous aide, lisez DOCS/HTML/en/bugreports.html. 
 
 A: 7,8 V: 7,2 AV: 0,602 ct: -0,017 520/520 97% 10% 0,6% 286 0 
 [H264 @ 0x7fe0a0468380] dissimulant 136 DC, 136 AC, 136 MV erreurs 
 A: 17,1 V: 15,6 AV: 1,495 ct: -0,017 1022/1022 97% 9% 0,6% 779 0 
 
 Sortie ... (Quitter) 


Choses que j'ai essayées

  • Jouer avec -vc ffh264vdpau a aidé un peu. Le rapport de désynchronisation est devenu 1 seconde de désynchronisation par 34 secondes de lecture, et la vitesse de la vidéo est de presque droite. L'utilisation du processeur a considérablement diminué (20% sur le thread le plus élevé du processeur). Pourtant, je reçois toujours le:

    Votre système est trop lent pour jouer ceci!

    message de MPlayer.

  • Jouer avec -lavdopts skiploopfilter=all fait jouer la vidéo correctement. La CPU oscille autour de 93% et la synchronisation A-0.2 autour de 0.263s.


Question

Ma question est donc la suivante: diriez-vous qu’il est raisonnable que mplayer rencontre autant de difficultés pour lire cette vidéo sur mon matériel, ou estimez-vous qu’il ya un problème de logiciel ici? Peut-être que le pilote nvidia?

Toute idée serait appréciée!

6
Val Blant

Je ne sais pas si vous avez toujours besoin d'assistance, mais je publierai pour les futurs utilisateurs ... Je pense que le problème que vous rencontrez est que la configuration par défaut de mplayer utilise un seul cœur de processeur ... Essayez de passer. l'option "-lavdopts threads = n" (où "n" est le nombre de threads à utiliser).

mplayer -lavdopts threads=4 00006.MTS
9
BuddyLuvve

TLDR? Assurez-vous que le gouverneur de fréquence de votre CPU n'est pas altéré par un démon ou un script déclenché par un événement (par exemple, un script de gestion de l'alimentation).

Histoire (ennuyeux)

J'ai eu ce problème sur deux systèmes Ubuntu différents, en particulier lors de la lecture de vidéos h264/x264. La lecture vidéo ralentit, tandis que l'audio continue normalement. Parfois, il se rattrape tout seul, mais parfois cela prend plus de 30 secondes avant que cela se produise!

En utilisant un graphique en temps réel de l'utilisation du processeur, j'ai remarqué que l'utilisation du processeur devenait beaucoup plus importante lorsque le problème se posait (au moins en proportion de la fréquence actuelle, ce que je ne suis malheureusement pas en train de suivre).

Une solution temporaire consiste à interagir avec MPlayer, ce qui lui permet de se rattraper assez rapidement, en utilisant l'une des méthodes suivantes:

  • Changez la vitesse de lecture en appuyant sur [ puis ]
  • Activer/désactiver le mode plein écran en appuyant deux fois sur F
  • Rembobinez et avancez le vent en appuyant sur Gauche puis Droite

Mais curieusement, lorsque j’ai écrit un script pour envoyer ces clés automatiquement, la solution de contournement n’a pas été à la hauteur des attentes! Il semble que l'interaction physique avec le clavier était nécessaire ...

La cause: gouverneur powersave!

Enfin, j'ai trouvé que le problème était lié au gouverneur. Il semble que le script /etc/pm/power.d/cpu_frequency (sur mon Ubuntu 12.04) règle de façon intermittente le régulateur de fréquence sur powersave, même si je reste branché sur le secteur. (Cela peut être dû à un bogue logiciel ou à du matériel, par exemple un câble d'alimentation louche.)

Peu de temps après (parfois quelques secondes, parfois quelques minutes), le script ramène le gouverneur à ondemand, il est donc difficile de détecter cela! (Je l'ai détecté en ajoutant une connexion au script: echo "[$(date)] $0 was run with args $*" >> /tmp/cpu_frequency.log)

Solution de contournement temporaire (bonne pour les tests)

Au départ, j'ai contourné le problème en exécutant ce petit script dans un terminal tout en visionnant une vidéo:

while true; do cpufreq-set -c 0 -g performance ; cpufreq-set -c 1 -g performance ; sleep 2; done  

Ce script nécessite que le package cpufrequtils soit installé: Sudo apt-get install cpufrequtils.

Cela garantit simplement que le processeur fonctionnera à pleine vitesse à tout moment, appliqué toutes les 2 secondes. (Très rarement, je peux voir A/V perdre la synchronisation pendant un moment, mais ensuite, il rattrape son retard.)

Comme vous pouvez le constater, ce script a été écrit pour deux cœurs. Mais j’ai adapté ce script pour fonctionner avec n’importe quel nombre de cœurs:

#!/bin/bash
while [[ 1 ]]
do
  for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
  do
    [ -f $CPUFREQ ] || continue
    echo -n performance > $CPUFREQ
  done
  sleep 2
done

Cela fait exactement la même chose et ne nécessite pas le paquetage cpufrequtils, mais ce n'est pas un one-liner.

Solution permanente

Plutôt que d'utiliser l'un des scripts ci-dessus, nous pouvons rendre la solution plus permanente en désactivant le script qui pose problème.

Une façon de le faire est de supprimer le script compliqué:

Sudo rm  /etc/pm/power.d/cpu_frequency

Mais une méthode moins destructive consisterait à modifier le script. Ajoutez simplement deux lignes quelque part près du haut du fichier:

# <date_here> Disabled by <your_name> to assist mplayer A/V sync
exit 0

Mais attention, cette solution permanente signifiera que le script ne passera pas à powersave lorsque vous êtes vraiment débranché du secteur, votre batterie risque donc de ne pas durer aussi longtemps que d'habitude!

(Bien que sur mon système, un Asus X453M, celui-ci ne soit pas passé en mode d'économie d'énergie jusqu'à ce que la charge de la batterie soit vraiment tombée à l'état bas.)

J'espère que ceci vous aide. Ce problème était très frustrant pour moi!

3
joeytwiddle