Bagaimana cara komputer memutar video saat melakukan sesuatu yang lain?

8

Bagaimana pemutaran video dilakukan di komputer? Ini jelas tidak bergantung sepenuhnya pada CPU, karena pemutaran video berlanjut ketika pengguna melakukan aktivitas lain, seperti mengetik di kolom komentar YouTube. Tugas ini tampaknya lebih rumit dalam hal streaming video, di mana data mungkin perlu ditransfer dari antarmuka jaringan ke pengontrol video / grafik.

EDIT: Saya seharusnya menjelaskan bahwa saya mengerti bahwa CPU berganti-ganti di antara banyak proses dan utas sepanjang waktu. Pertanyaan saya seharusnya lebih spesifik tentang pemutaran video. Apakah pemrosesan video dilakukan pada chipset grafis / kartu? Apakah itu biasanya menawarkan buffering? Atau dapatkah semuanya ditangani oleh CPU single-core dengan waktu luang untuk tugas-tugas lain, atau apakah saya salah berpikir bahwa CPU low-end dapat memutar video tanpa penundaan (bukan jaringan)?

Ellen Spertus
sumber
2
Inti apa pun dapat menjalankan satu operasi pada setiap langkah waktu tertentu - tetapi karena sangat cepat, ia dapat beralih di antara melakukan berbagai hal dengan sangat cepat sehingga kami tidak dapat mendeteksinya. Jika kita bisa mendengar atau melihat dalam langkah waktu dalam kisaran nanodetik, itu akan terlihat / terdengar seperti gagap. Penjadwalan akan menjadi topik kasar untuk ini, saya kira; triknya mungkin cukup sering menjadwalkan hal-hal sensitif waktu (seperti bermain media atau mengubah konten layar) sehingga otak kita tidak dapat mengetahui bahwa ada sesuatu yang dilakukan di antaranya. (Catatan: di atas adalah dugaan kasar, tetapi di situlah saya melihat.)
G. Bach
1
Tambahkan ke komentar sebelumnya bahwa chip modern memiliki beberapa core (baca: beberapa CPU), dan bahwa ada prosesor lain untuk berbagi beban kerja, seperti prosesor grafis.
babou
Terima kasih, tetapi saya memikirkan beberapa core dan mengabaikannya, karena sepertinya bahkan komputer kelas bawah yang lama dapat melakukan sesuatu yang lain sambil menunjukkan video.
Ellen Spertus

Jawaban:

3

Kartu grafis modern berfungsi kurang lebih (agak) sama dengan cpu biasa.

Pada kartu grafis, Anda akan memiliki (kadang-kadang) beberapa prosesor, setiap prosesor akan memiliki (kadang-kadang) beberapa multiprosesor, yang masing-masing memiliki beberapa inti.

Ketika video dimuat ke dalam kartu grafis, ia akan ditranskode ke buffer output dengan alokasi inti multiprosesor tertentu. Buffer output ini umumnya adalah memori yang dapat diakses secara global, yang berarti bahwa setiap inti dari multi-prosesor dari setidaknya satu prosesor (tetapi seringkali semua) memiliki akses r / w langsung ke sana.

Biasanya satu multiprosesor terbatas pada satu set instruksi, yang berarti bahwa kartu grafis hanya dapat secara bersamaan mengoperasikan banyak "rasa" benang yang berbeda karena ada multiprosesor pada kartu. "Rasa" misalnya dapat berupa simulasi fisika, render video, render OS, atau fungsi kriptografi. Secara alami satu multiprosesor dapat menjadwalkan beberapa jenis utas untuk berjalan sebentar-sebentar, tetapi ini biasanya tidak perlu.

Mendekodekan sebuah video sering kali banyak pekerjaan, mengingat bagaimana biasanya dikompresi dan kadang-kadang dienkripsi, sehingga pembuat tampilan tidak selalu sibuk. Dengan demikian, relatif mudah untuk membuat kursor mouse yang bergerak di atas bingkai video. Namun, terkadang ini tidak cukup berhasil, dan Anda akan melihat bagaimana dalam beberapa aplikasi kursor Anda menghilang. Ini belum tentu karena aplikasi "di atas" dari os, tetapi hanya karena memonopoli bagian dari buffer output.

tamu
sumber
3

Ini diimplementasikan menggunakan beberapa teknik yang berbeda. Di dalam aplikasi (misalnya, browser web), program dapat mengeksekusi berbagai utas eksekusi. Satu utas dapat melakukan streaming / pemutaran video, sementara utas lain dapat menangani pengguna mengetik di kolom komentar.

Utas ini, bersama dengan banyak utas dan proses lainnya, pada gilirannya dijadwalkan oleh sistem operasi (bahkan jika Anda hanya memiliki browser web terbuka, sistem operasi memiliki banyak tugas latar belakang berjalan, seperti manajer windowing, spooler cetak, Manajer perangkat USB, dll). Ini adalah tugas penjadwal OS untuk menentukan utas mana yang dapat berjalan aktif, pada inti prosesor mana, dan untuk berapa lama. Dalam sistem tipikal, utas dapat berjalan hingga beberapa nilai ambang, misalkan 100 milidetik, sebelum penjadwal memungkinkan tugas lain dijalankan.

Peralihan tugas ini penting untuk semua sistem operasi modern (Windows, Linux, UNIX, dll), dan biasanya merupakan bagian penting dari kursus sistem operasi sarjana.

Ken P
sumber
Terima kasih balasannya. Saya seharusnya menjelaskan bahwa saya tahu tentang multi-threading dan multi-pemrograman. (Sebenarnya saya sedang mengajar kursus sistem operasi sarjana untuk kesepuluh kalinya.) Saya hanya tidak mengerti secara khusus bagaimana pemutaran video bekerja
Ellen Spertus
1
@ espertus Inilah makalah tentang penjadwalan media berkelanjutan , mungkin itu dapat menjernihkan beberapa masalah Anda. Walaupun harus membaca jauh lebih berhasil daripada seseorang yang hanya memberikan jawaban, saya pikir setidaknya ini adalah titik awal karena saya tidak yakin kita memiliki seseorang di forum ini yang berpengalaman dalam masalah yang relevan.
G. Bach
2

Pemutaran video tidak spesial. Tentu saja, decoding akselerasi GPU adalah umum akhir-akhir ini, yang membebaskan CPU untuk pekerjaan lain, tetapi tidak selalu demikian. Pemutaran video yang lancar dengan hanya satu CPU pasti dimungkinkan, selama ada cukup CPU yang tersedia untuk resolusi dan kompleksitas algoritma kompresi, dan melakukannya bersama dengan tugas-tugas lain adalah sama mungkin, selama ada cukup CPU untuk keduanya, dan jadwal OS dengan baik. Video 30fps adalah umum, yang memungkinkan 33ms untuk memecahkan kode setiap frame. Bahkan chip yang cukup lama dapat mengaturnya untuk MPEG-2 berkualitas SD, dan chip modern dapat mengaturnya untuk HD MPEG-4; laptop yang saya ketikkan ini membutuhkan sekitar 20% dari CPU untuk pemutaran 720p High Profile AVC.

Adapun buffering, ada jumlah terbatas yang tersedia. Minimum untuk apa pun yang tidak ingin merobek layar adalah "penyangga ganda", di mana ada dua frame dalam memori: kartu video menampilkan satu sementara perangkat lunak memperbarui yang lain, dan peran keduanya dipertukarkan selama vertikal menyegarkan. Dengan "triple buffering", ada dua bingkai layar, + 1 berikutnya dan berikutnya, yang mengurangi jumlah jitter. Pada kartu modern dengan RAM dalam jumlah besar, dimungkinkan untuk melampaui jumlah frame yang lebih besar, dengan satu-satunya kelemahan adalah latensi yang terlihat oleh pengguna dalam mencari, memulai pemutaran, dll. Dan kenyataan bahwa aplikasi lain mungkin menginginkan RAM video itu sendiri .

hobbs
sumber