Comment un ordinateur lit-il une vidéo tout en faisant autre chose?

8

Comment se fait la lecture vidéo sur un ordinateur? Cela ne dépend évidemment pas uniquement du processeur, car la lecture vidéo continue lorsqu'un utilisateur effectue une autre activité, telle que taper dans un champ de commentaire YouTube. Cette tâche semble encore plus compliquée dans le cas du streaming vidéo, où les données doivent probablement être transférées de l'interface réseau vers le contrôleur vidéo / graphique.

EDIT: J'aurais dû indiquer clairement que je comprends que le processeur bascule entre plusieurs processus et threads tout le temps. Ma question visait plus spécifiquement la lecture vidéo. Le traitement vidéo est-il effectué sur le chipset / la carte graphique? Est-ce que ceux-ci offrent généralement une mise en mémoire tampon? Ou tout cela peut-il être géré par un processeur monocœur avec du temps à consacrer à d'autres tâches, ou ai-je tort de penser que les processeurs bas de gamme peuvent lire la vidéo sans retards (hors réseau)?

Ellen Spertus
la source
2
N'importe quel cœur peut simplement exécuter une opération à n'importe quel pas de temps discret donné - mais comme c'est vraiment rapide, il peut basculer entre faire les choses si rapidement que nous ne pouvons pas le détecter. Si nous pouvions entendre ou voir par pas de temps dans la gamme des nanosecondes, cela ressemblerait / ressemblerait à du bégaiement. La planification serait le sujet approximatif pour cela, je suppose; l'astuce consiste probablement à planifier des événements sensibles au temps (comme jouer des médias ou changer le contenu de l'écran) assez fréquemment pour que notre cerveau ne puisse pas comprendre que quelque chose d'autre a été fait entre les deux. (Remarque: ce qui précède est une approximation approximative, mais c'est là que je regarderais.)
G. Bach
1
Ajoutez au commentaire précédent que les puces modernes ont plusieurs cœurs (lire: plusieurs CPU), et qu'il existe d'autres processeurs pour partager la charge de travail, comme le processeur graphique.
babou
Merci, mais j'ai pensé à plusieurs cœurs et je l'ai rejeté, car il semblait que même les vieux ordinateurs bas de gamme pouvaient faire autre chose tout en montrant des vidéos.
Ellen Spertus

Réponses:

3

Une carte graphique moderne fonctionne plus ou moins (un peu) comme un processeur ordinaire.

Sur une carte graphique, vous aurez (parfois) plusieurs processeurs, chaque processeur aura (parfois) plusieurs multiprocesseurs, chacun ayant plusieurs cœurs.

Lorsqu'une vidéo est chargée dans une carte graphique, elle est transcodée dans le tampon de sortie par une certaine allocation de cœurs multiprocesseurs. Ce tampon de sortie est généralement une mémoire accessible globalement, ce qui signifie que tout cœur de n'importe quel multiprocesseur d'au moins un processeur (mais souvent tous) y a un accès direct r / w.

Habituellement, un multiprocesseur est limité à un jeu d'instructions, ce qui signifie qu'une carte graphique ne peut fonctionner simultanément qu'autant de «saveurs» de threads différentes qu'il y a de multiprocesseurs sur la carte. Une "saveur" pourrait par exemple être une simulation physique, un rendu vidéo, un rendu OS ou une fonction cryptographique. Naturellement, un multiprocesseur peut planifier l'exécution de plusieurs types de threads par intermittence, mais cela n'est généralement pas nécessaire.

Le décodage d'une vidéo demande souvent beaucoup de travail, compte tenu de la façon dont elle est généralement compressée et parfois cryptée, de sorte que le tampon d'affichage n'est pas toujours occupé. Ainsi, il est relativement facile de rendre un curseur de souris se déplaçant sur une image vidéo. Cependant, parfois cela ne fonctionne pas tout à fait, et vous verrez comment dans certaines applications votre curseur disparaît. Ce n'est pas nécessairement parce que l'application est "au-dessus" du système d'exploitation, mais simplement parce qu'elle monopolise une partie du tampon de sortie.

client
la source
3

Ceci est mis en œuvre en utilisant plusieurs techniques différentes. Dans l'application (par exemple, le navigateur Web), le programme peut exécuter différents threads d'exécution. Un thread peut effectuer le streaming / lecture vidéo, tandis qu'un autre thread peut gérer la saisie de l'utilisateur dans le champ de commentaire.

Ces threads, ainsi que de nombreux autres threads et processus, sont à leur tour planifiés par le système d'exploitation (même si vous n'avez que le navigateur Web ouvert, le système d'exploitation a de nombreuses tâches d'arrière-plan en cours d'exécution, telles que le gestionnaire de fenêtrage, le spouleur d'impression, le Gestionnaire de périphériques USB, etc.). Il appartient au planificateur du système d'exploitation de déterminer quel thread peut s'exécuter activement, sur quel cœur de processeur et pendant combien de temps. Dans un système typique, un thread peut s'exécuter jusqu'à une certaine valeur seuil, supposons 100 millisecondes, avant que le planificateur autorise l'exécution d'une autre tâche.

Ce changement de tâche est fondamental pour tous les systèmes d'exploitation modernes (Windows, Linux, UNIX, etc.) et constitue généralement une partie importante d'un cours sur les systèmes d'exploitation de premier cycle.

Ken P
la source
Merci pour la réponse. J'aurais dû préciser que je connais le multi-threading et la multi-programmation. (En fait, j'enseigne un cours de premier cycle sur les systèmes d'exploitation pendant environ la dixième fois.) Je ne comprends tout simplement pas comment fonctionne la lecture vidéo
Ellen Spertus
1
@espertus Voici un document sur la planification de médias continus , qui peut peut-être éclaircir certaines de vos préoccupations. Bien que devoir lire soit beaucoup plus de travail que quelqu'un qui vient de fournir une réponse, je pensais au moins que c'était un point de départ car je ne suis pas sûr que nous ayons quelqu'un sur ce forum connaissant les questions pertinentes.
G. Bach
2

La lecture vidéo n'est pas si spéciale. Bien sûr, le décodage accéléré par GPU est courant de nos jours, ce qui libère le CPU pour d'autres travaux, mais il n'en a pas toujours été ainsi. Une lecture vidéo fluide avec un seul processeur est certainement possible, tant qu'il y a suffisamment de processeur disponible pour la résolution et la complexité de l'algorithme de compression, et le faire avec d'autres tâches est tout aussi possible, tant qu'il y a suffisamment de processeur pour les deux, et l'OS se programme bien. La vidéo à 30 ips est courante, ce qui permet à 33 ms de décoder chaque image. Même les puces assez anciennes peuvent gérer cela pour le MPEG-2 de qualité SD, et les puces modernes peuvent le gérer pour le MPEG-4 HD; l'ordinateur portable sur lequel je tape cela nécessite environ 20% du processeur pour lire l'AVC High Profile 720p.

Quant à la mise en mémoire tampon, il y a une quantité limitée disponible. Le minimum pour tout ce qui ne veut pas de déchirement d'écran est le "double tampon", où il y a deux images en mémoire: la carte vidéo en affiche une tandis que le logiciel met à jour l'autre, et les rôles des deux sont échangés pendant la verticale rafraîchir. Avec la "triple mise en mémoire tampon", il y a deux images hors écran, la suivante et la suivante + 1, ce qui réduit la quantité de gigue. Sur les cartes modernes avec de grandes quantités de RAM, il est possible d'aller au-delà pour un plus grand nombre d'images, avec les seuls inconvénients étant la latence visible par l'utilisateur dans la recherche, le démarrage de la lecture, etc. et le fait que d'autres applications pourraient vouloir cette RAM vidéo pour elles-mêmes. .

Hobbs
la source