コンピューターは他のことをしながらどのようにビデオを再生しますか?


8

コンピューターでのビデオ再生はどのように行われますか?ユーザーがYouTubeコメントフィールドに入力するなどの別のアクティビティを実行すると、ビデオの再生が続行されるため、CPUだけに依存しているわけではありません。ストリーミングビデオの場合、このタスクはさらに複雑に思われますが、データはおそらくネットワークインターフェイスからビデオ/グラフィックスコントローラーに転送される必要があります。

編集:私は、CPUが常に複数のプロセスとスレッドを切り替えることを理解していることを明確にすべきでした。私の質問は、ビデオの再生についてより具体的にすることを意図していた。ビデオ処理はグラフィックチップセット/カードで行われますか?それらは通常バッファリングを提供していますか?または、すべてを他のタスクのために時間を割いてシングルコアCPUで処理できますか、またはローエンドCPUが(ネットワークではなく)遅延なしにビデオを再生できると思うのは間違っていますか?


2
どのコアでも、任意の離散時間ステップで1つの操作を実行できますが、非常に高速であるため、処理を非常に高速に切り替えることができるため、検出できません。ナノ秒の範囲の時間ステップで聞こえたり見たりできると、それは途切れ途切れのように見え/聞こえます。私にとっては、スケジューリングが大まかなトピックになると思います。トリックはおそらく、時間に敏感なもの(メディアの再生や画面コンテンツの変更など)を十分な頻度でスケジュールして、その間に何か他のことが行われたことを脳が理解できないようにすることです。(注:上記は大まかな当て推量ですが、それは私が見るところです。)
G.バッハ

1
最近のチップには複数のコア(読み取り:複数のCPU)があり、グラフィックプロセッサなどのワークロードを共有する他のプロセッサがあることを前のコメントに追加します。
バブー

ありがとう。でも、マルチコアについて考えて却下しました。ビデオを表示しているときに、古いローエンドコンピューターでも別のことができるようだったからです。
Ellen Spertus

回答:


3

最近のグラフィックスカードは、通常のCPUとほぼ同じように機能します。

グラフィックカードでは、複数のプロセッサが(場合によっては)複数のプロセッサを持ち、各プロセッサが(ときには)複数のマルチプロセッサを持ち、それぞれに複数のコアがあります。

ビデオがグラフィックスカードに読み込まれると、マルチプロセッサコアの特定の割り当てによって出力バッファにトランスコードされます。この出力バッファーは、一般的にグローバルにアクセス可能なメモリです。つまり、少なくとも1つのプロセッサー(多くの場合すべて)のマルチプロセッサーのコアは、直接R / Wアクセスできます。

通常、1つのマルチプロセッサは1つの命令セットに制限されます。つまり、グラフィックスカードは、カードにマルチプロセッサが存在する場合と同じ数の異なる「フレーバー」のスレッドしか同時に動作できません。「フレーバー」は、たとえば、物理シミュレーション、ビデオレンダー、OSレンダー、または暗号化機能です。当然、1つのマルチプロセッサが複数のスレッドタイプを断続的に実行するようにスケジュールできますが、これは通常は必要ありません。

ビデオのデコードは、通常はどのように圧縮され、時には暗号化されるかを考慮して、多くの作業を伴うため、ディスプレイバッファーが常にビジーであるとは限りません。したがって、ビデオカーソル上を移動するマウスカーソルをレンダリングするのは比較的簡単です。ただし、これがうまく機能しない場合もあり、一部のアプリケーションではカーソルが消える様子がわかります。これは必ずしもアプリケーションがOSの「上位」にあるからではなく、単に出力バッファの一部を占有しているためです。


3

これは、いくつかの異なる手法を使用して実装されます。アプリケーション(Webブラウザーなど)内で、プログラムはさまざまな実行スレッドを実行できます。1つのスレッドがビデオのストリーミング/再生を実行でき、別のスレッドがコメントフィールドへのユーザー入力を処理できます。

これらのスレッドは、他の多くのスレッドやプロセスとともに、オペレーティングシステムによって順番にスケジュールされます(Webブラウザーを開いているだけの場合でも、オペレーティングシステムでは、ウィンドウマネージャー、印刷スプーラー、 USBデバイスマネージャなど)。OSスケジューラの役割は、アクティブに実行できるスレッド、プロセッサコア、および実行時間を決定することです。典型的なシステムでは、スケジューラーが別のタスクの実行を許可する前に、スレッドはあるしきい値まで実行できます(100ミリ秒を想定)。

このタスクの切り替えは、すべての最新のオペレーティングシステム(Windows、Linux、UNIXなど)の基本であり、通常、学部のオペレーティングシステムコースの重要な部分です。


返信いただきありがとうございます。マルチスレッドとマルチプログラミングについて知っていることを明確にすべきだった。(実際、私は約10回、学部のオペレーティングシステムコースを教えています。)ビデオ再生のしくみを具体的に理解していません
Ellen Spertus

1
@espertus 継続的なメディアのスケジュールに関する論文を紹介します。これで懸念事項の一部が解消される可能性があります。読む必要があるのは、答えを出すだけの人よりもはるかに多くの作業ですが、関連する問題に精通しているこのフォーラムの誰かがいるかどうかわからないので、少なくともそれは出発点だと思いました。
G.バッハ

2

ビデオの再生はそれほど特別ではありません。確かに、最近ではGPUで高速化されたデコードが一般的で、CPUを他の作業に解放しますが、常にそうであるとは限りませんでした。圧縮アルゴリズムの解像度と複雑さのために十分なCPUが利用可能であり、他のタスクと一緒にそれを実行することは、両方に十分なCPUがある限り、単一のCPUだけでスムーズなビデオ再生が確実に可能です。そしてOSはうまくスケジュールします。30fpsビデオが一般的で、これにより33msで各フレームをデコードできます。かなり古いチップでもSD品質のMPEG-2の場合はそれを管理でき、最新のチップはHD MPEG-4の場合はそれを管理できます。これを入力しているラップトップでは、720pハイプロファイルAVCを再生するためにCPUの約20%が必要です。

バッファリングに関しては、限られた量しか利用できません。画面のティアリングを望まないものの最小値は「ダブルバッファリング」で、メモリに2つのフレームがあります。ビデオカードが1つを表示し、ソフトウェアが他を更新し、垂直の間に2つの役割が交換されます。リフレッシュ。「トリプルバッファリング」を使用すると、2つのオフスクリーンフレーム、nextおよびnext + 1が存在し、ジッターの量が減少します。大量のRAMを備えた最新のカードでは、シーク、再生の開始などのユーザーに見える遅延が他のアプリで自分のためにそのビデオRAMを必要とする可能性があるという事実だけで、それを超えてより多くのフレームに進むことができます。 。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.