Come fa un computer a riprodurre un video mentre fa qualcos'altro?


8

Come viene eseguita la riproduzione video su un computer? Ovviamente non si basa esclusivamente sulla CPU, poiché la riproduzione del video continua quando un utente esegue un'altra attività, ad esempio digitando in un campo di commento di YouTube. Questo compito sembra ulteriormente complicato nel caso dello streaming video, dove presumibilmente i dati devono essere trasferiti dall'interfaccia di rete al controller video / grafico.

EDIT: avrei dovuto chiarire che ho capito che la CPU cambia continuamente tra più processi e thread. La mia domanda doveva essere più specifica sulla riproduzione di video. L'elaborazione video viene eseguita sul chipset / scheda grafica? Generalmente offrono buffering? O può essere tutto gestito da una CPU single-core con il tempo di risparmiare per altre attività, o sbaglio a pensare che le CPU di fascia bassa possano riprodurre video senza ritardi (non di rete)?


2
Qualsiasi core può semplicemente eseguire una sola operazione in un dato passaggio di tempo discreto, ma poiché è veramente veloce, può passare dal fare le cose così rapidamente che non possiamo rilevarlo. Se potessimo ascoltare o vedere a intervalli di tempo nell'intervallo di nanosecondi, sembrerebbe / sembrerebbe balbettare. La pianificazione sarebbe l'argomento di massima per questo, presumo; il trucco è probabilmente programmare cose sensibili al tempo (come la riproduzione di contenuti multimediali o la modifica del contenuto dello schermo) abbastanza frequentemente in modo che il nostro cervello non riesca a capire che è stato fatto qualcos'altro nel mezzo. (Nota: quanto sopra è un'ipotesi approssimativa, ma è lì che guarderei.)
G. Bach,

1
Aggiungi al commento precedente che i chip moderni hanno diversi core (leggi: diverse CPU) e che ci sono altri processori per condividere il carico di lavoro, come il processore grafico.
babou,

Grazie, ma ho pensato a più core e l'ho scartato, poiché sembrava che anche i vecchi computer di fascia bassa possano fare qualcos'altro durante la visualizzazione di video.
Ellen Spertus,

Risposte:


3

Una moderna scheda grafica funziona più o meno (in qualche modo) come una normale CPU.

Su una scheda grafica, avrai (a volte) più processori, ogni processore avrà (a volte) più multiprocessori, ognuno con più core.

Quando un video viene caricato in una scheda grafica, viene transcodificato nel buffer di output da una determinata allocazione di core multiprocessore. Questo buffer di output è generalmente una memoria accessibile a livello globale, il che significa che qualsiasi core di qualsiasi multiprocessore di almeno un processore (ma spesso tutti) ha accesso diretto in r / w ad esso.

Di solito un multiprocessore è limitato a un solo set di istruzioni, il che significa che una scheda grafica può operare contemporaneamente solo su diversi "sapori" di thread quanti sono i multiprocessori sulla scheda. Un "sapore" potrebbe ad esempio essere una simulazione fisica, un rendering video, un rendering del sistema operativo o una funzione crittografica. Naturalmente un multiprocessore può programmare l'esecuzione di più tipi di thread in modo intermittente, ma di solito non è necessario.

La decodifica di un video spesso richiede molto lavoro, considerando il modo in cui è generalmente compresso e talvolta crittografato, quindi il displaybuffer non è sempre occupato. Pertanto è relativamente facile rendere un cursore del mouse che si sposta su un fotogramma video. Tuttavia, a volte questo non funziona del tutto e vedrai come in alcune applicazioni il tuo cursore scompare. Questo non è necessariamente perché l'applicazione è "in cima" al sistema operativo, ma semplicemente perché sta eseguendo il hogging parte del buffer di output.


3

Questo è implementato usando diverse tecniche diverse. All'interno dell'applicazione (ad esempio il browser Web), il programma può eseguire diversi thread di esecuzione. Un thread può eseguire lo streaming / riproduzione video, mentre un thread diverso può gestire l'utente digitando nel campo dei commenti.

Questi thread, insieme a molti altri thread e processi, sono a loro volta programmati dal sistema operativo (anche se hai solo il browser web aperto, il sistema operativo ha molte attività in background in esecuzione, come il gestore di finestre, lo spooler di stampa, il Gestione dispositivi USB, ecc.). È compito dello scheduler del sistema operativo determinare quale thread può essere eseguito attivamente, su quale core del processore e per quanto tempo. In un sistema tipico, un thread può essere eseguito fino a un certo valore di soglia, supponiamo 100 millisecondi, prima che lo scheduler consenta l'esecuzione di un'altra attività.

Questo passaggio di attività è fondamentale per tutti i sistemi operativi moderni (Windows, Linux, UNIX, ecc.) Ed è di solito una parte significativa di un corso di sistemi operativi universitari.


Grazie per la risposta. Avrei dovuto chiarire di conoscere il multi-threading e la multi-programmazione. (In effetti sto insegnando un corso di laurea sui sistemi operativi per circa la decima volta.) Non capisco esattamente come funzioni la riproduzione video
Ellen Spertus,

1
@espertus Ecco un documento sulla pianificazione di supporti continui , forse questo può chiarire alcune delle tue preoccupazioni. Sebbene dover leggere sia molto più lavoro di qualcuno che sta semplicemente fornendo una risposta, ho pensato che almeno fosse un punto di partenza, dal momento che non sono sicuro di avere qualcuno su questo forum esperto nei problemi pertinenti.
G. Bach,

2

La riproduzione video non è così speciale. Certo, la decodifica con accelerazione GPU è comune in questi giorni, che libera la CPU per altri lavori, ma non è sempre stato così. La riproduzione regolare del video con una sola CPU è sicuramente possibile, purché ci sia abbastanza CPU disponibile per la risoluzione e la complessità dell'algoritmo di compressione, e farlo insieme ad altre attività è altrettanto possibile, purché ci sia abbastanza CPU per entrambi, e il sistema operativo pianifica bene. Il video a 30 fps è comune, che consente a 33 ms di decodificare ciascun fotogramma. Anche i chip abbastanza vecchi possono gestirlo per MPEG-2 di qualità SD e i chip moderni possono gestirlo per MPEG-4 HD; il laptop su cui sto scrivendo richiede circa il 20% della CPU per riprodurre AVC ad alto profilo a 720p.

Per quanto riguarda il buffering, è disponibile una quantità limitata. Il minimo per tutto ciò che non vuole avere la lacerazione dello schermo è il "doppio buffering", in cui ci sono due frame in memoria: la scheda video ne mostra uno mentre il software aggiorna l'altro, e i ruoli dei due vengono scambiati durante la verticale ricaricare. Con "triple buffering", ci sono due frame offscreen, il successivo e il successivo + 1, che riducono la quantità di jitter. Su schede moderne con grandi quantità di RAM è possibile andare oltre a un numero maggiore di fotogrammi, con l'unico lato negativo è la latenza visibile dall'utente nella ricerca, l'avvio della riproduzione, ecc. E il fatto che altre app potrebbero volere quella RAM video per se stessi .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.