Bagikan melalui


Media Foundation: Konsep Penting

Jika Anda baru mengenal media digital, topik ini memperkenalkan beberapa konsep yang perlu Anda pahami sebelum menulis aplikasi Media Foundation.

Sungai

Aliran media adalah serangkaian data media dengan jenis yang seragam. Jenis yang paling umum adalah audio dan video, tetapi aliran dapat berisi hampir semua jenis data, termasuk teks, perintah skrip, dan gambar diam. Istilah "stream " dalam dokumentasi ini tidak menyiratkan pengiriman melalui jaringan. File media yang ditujukan untuk pemutaran lokal juga berisi konten streaming.

Biasanya, file media berisi satu aliran audio, atau tepat satu aliran video dan satu aliran audio. Namun, file media mungkin berisi beberapa aliran dengan jenis yang sama. Misalnya, file video mungkin berisi aliran audio dalam beberapa bahasa yang berbeda. Pada waktu proses, aplikasi akan memilih aliran mana yang akan digunakan.

Kompresi

Kompresi mengacu pada proses apa pun yang mengurangi ukuran aliran data dengan menghapus informasi yang berlebihan. Algoritma kompresi termasuk dalam dua kategori luas:

  • kompresi tanpa kehilangan Menggunakan algoritma lossless, data yang direkonstruksi identik dengan yang asli.
  • kompresi Lossy. Menggunakan algoritma lossy, data yang direkonstruksi adalah perkiraan dari aslinya, tetapi bukan kecocokan yang tepat.

Di sebagian besar domain lain, kompresi lossy tidak dapat diterima. (Bayangkan menerima kembali "perkiraan" dari sebuah spreadsheet!) Tetapi skema kompresi lossy sangat cocok untuk audio dan video karena beberapa alasan.

Alasan pertama ada hubungannya dengan fisika persepsi manusia. Ketika kita mendengarkan suara yang kompleks, seperti rekaman musik, beberapa informasi yang terkandung dalam suara itu tidak terlihat oleh telinga. Dengan bantuan teori pemrosesan sinyal, dimungkinkan untuk menganalisis dan memisahkan frekuensi yang tidak dapat dirasakan. Frekuensi ini dapat dihapus tanpa efek persepsi. Meskipun audio yang direkonstruksi tidak akan persis sama dengan aslinya, audio tersebut akan terdengar sama bagi pendengar. Prinsip serupa berlaku untuk video.

Kedua, beberapa degradasi dalam kualitas suara atau gambar mungkin dapat diterima, tergantung pada tujuan yang dimaksudkan. Dalam telepon, misalnya, audio sering kali sangat terkompresi. Hasilnya cukup baik untuk percakapan telepon—tetapi Anda tidak ingin mendengarkan orkestra simfoni melalui telepon.

Kompresi juga disebut pengodean , dan perangkat yang mengodekan disebut pengode . Proses terbalik adalah mendekode, dan perangkat ini disebut secara alami sebagai dekoder . Istilah umum untuk encoder dan dekoder adalah codec. Codec dapat diimplementasikan dalam perangkat keras atau perangkat lunak.

Teknologi kompresi telah berubah dengan cepat sejak munculnya media digital, dan sejumlah besar skema kompresi digunakan saat ini. Fakta ini adalah salah satu tantangan utama untuk pemrograman media digital.

Kontainer Media

Jarang menyimpan aliran audio atau video mentah sebagai file komputer, atau untuk mengirimnya langsung melalui jaringan. Untuk satu hal, tidak mungkin untuk mendekode aliran seperti itu, tanpa mengetahui terlebih dahulu codec mana yang akan digunakan. Oleh karena itu, file media biasanya berisi setidaknya beberapa elemen berikut:

  • Tajuk berkas yang menjelaskan jumlah aliran, format setiap aliran, dan sebagainya.
  • Indeks yang memungkinkan akses acak ke konten.
  • Metadata yang menjelaskan konten (misalnya, artis atau judul).
  • Header paket, untuk mengaktifkan transmisi jaringan atau akses acak.

Dokumentasi ini menggunakan istilah kontainer untuk menjelaskan seluruh paket aliran, header, indeks, metadata, dan sebagainya. Alasan untuk menggunakan istilah kontainer daripada file adalah bahwa beberapa format kontainer dirancang untuk siaran langsung. Aplikasi dapat menghasilkan kontainer secara real time, tidak pernah menyimpannya ke file.

Contoh awal kontainer media adalah format file AVI. Contoh lain termasuk MP4 dan Advanced Systems Format (ASF). Kontainer dapat diidentifikasi dengan ekstensi nama file (misalnya, .mp4) atau berdasarkan jenis MIME.

Diagram berikut menunjukkan struktur umum untuk kontainer media. Diagram tidak mewakili format tertentu; detail setiap format sangat bervariasi.

diagram memperlihatkan kontainer media yang umum

Perhatikan bahwa struktur yang ditunjukkan dalam diagram bersifat hierarkis, dengan informasi header muncul di awal kontainer. Struktur ini khas dari banyak format kontainer (tetapi tidak semua). Perhatikan juga bahwa bagian data berisi paket audio dan video yang terjalin. Jenis interleaving ini umum dalam kontainer media.

Istilah multiplexing mengacu pada proses pengemasan aliran audio dan video dan menyisipkan paket ke dalam kontainer. Proses terbalik, menyusun kembali aliran dari data yang dikemas, disebut demultiplexing.

Format

Di media digital, istilah format ambigu. Format dapat merupakan jenis pengodean , seperti video H.264, atau kontainer , seperti MP4. Perbedaan ini sering membingungkan bagi pengguna biasa. Nama yang diberikan pada format media tidak selalu membantu. Misalnya, MP3 mengacu pada format pengodean (MPEG-1 Audio Layer 3) dan format file.

Perbedaannya penting, bagaimanapun, karena membaca file media benar-benar melibatkan dua tahap:

  1. Pertama, kontainer harus diurai. Dalam kebanyakan kasus, jumlah aliran dan format setiap aliran tidak dapat diketahui sampai langkah ini selesai.
  2. Selanjutnya, jika aliran dikompresi, aliran harus didekode menggunakan dekode yang sesuai.

Fakta ini mengarah cukup alami ke desain perangkat lunak di mana komponen terpisah digunakan untuk mengurai kontainer dan mendekode aliran. Selanjutnya, pendekatan ini mendukung model plug-in, sehingga pihak ketiga dapat menyediakan parser dan codec mereka sendiri. Di Windows, Model Objek Komponen (COM) menyediakan cara standar untuk memisahkan API dari implementasinya, yang merupakan persyaratan untuk model plug-in apa pun. Untuk alasan ini (antara lain), Media Foundation menggunakan antarmuka COM.

Diagram berikut menunjukkan komponen yang digunakan untuk membaca file media:

diagram memperlihatkan komponen untuk membaca file media

Menulis file media juga memerlukan dua langkah:

  1. Mengodekan data audio/video yang tidak dikompresi.
  2. Menempatkan data terkompresi ke dalam format kontainer tertentu.

Diagram berikut menunjukkan komponen yang digunakan untuk menulis file media:

diagram memperlihatkan komponen untuk menulis file media.

Panduan Pemrograman Media Foundation