Bagikan melalui


Stempel waktu dan Durasi

Topik ini menjelaskan bagaimana Media Foundation Transforms harus menangani stempel waktu.

MFT harus mengatur stempel waktu dan durasi seakurat mungkin pada semua sampel output. Untuk MFT sederhana yang mengambil satu buffer input dan sepenuhnya memprosesnya menjadi buffer output, MFT hanya boleh menyalin stempel waktu dan durasi langsung dari sampel input ke sampel output. Namun, banyak transformasi yang lebih kompleks dari ini dan mungkin memerlukan perhitungan waktu output yang lebih kompleks. Semua MFTs harus mengamati aturan dasar berikut:

  • MFT harus mencoba menempatkan stempel waktu dan durasi pada semua sampel output video atau audio yang tidak dikompresi jika stempel waktu atau durasi yang akurat diberikan pada sampel input atau dapat dihitung. Interpolasi mungkin diperlukan untuk beberapa stempel waktu output, terutama untuk dekode.
  • Stempel waktu dan durasi sampel input harus dipertahankan pada sampel output sebanyak mungkin.
  • Stempel waktu output atau durasi mungkin tidak cocok dengan input karena MFT menahan data atau memecah output menjadi potongan berukuran berbeda dari input. Dalam hal ini, MFT harus menghitung stempel waktu output dari sampel input paling awal yang berisi data yang digunakan untuk membuat sampel output. Untuk menghitung stempel waktu output, tambahkan stempel waktu input dari sampel input yang sesuai ke durasi data yang telah diubah dari sampel tersebut. Contoh kedua di akhir bagian ini menggambarkan ide ini.
  • Jika sampel input memiliki durasi, durasi tersebut harus dipertahankan. Jika sampel input tidak memiliki durasi, MFT harus menghitung durasi jika memungkinkan dari ukuran buffer output atau laju data yang diberikan oleh jenis media.
  • Durasi terhitung harus dipotong (dibulatkan ke bawah), tidak dibulatkan ke kenaikan terdekat. Alur memiliki cukup kelonggaran untuk menangani durasi yang sedikit tidak akurat, tetapi lebih mudah bagi alur untuk menangani durasi yang 1% terlalu pendek daripada durasi yang 1% terlalu lama. Yang mengatakan, tidak ada alasan untuk sengaja mempersingkat durasi, selain dengan pembulatan.

Decoder

Decoder mengonversi paket terkompresi menjadi data yang tidak dikompresi. Karena output tidak dikompresi, dekode memiliki kewajiban khusus untuk mendapatkan stempel waktu dan durasi yang benar. Beberapa format terkompresi, terutama MPEG-2, tidak memiliki stempel waktu pada semua paket input dan sering tidak memiliki durasi pada paket apa pun. Untuk format ini, dekoder bertanggung jawab untuk menempatkan stempel waktu dan durasi yang valid pada setiap sampel output, dengan menjumlahkan durasi tersirat dari semua output sejak sampel input bertanda waktu terakhir.

Untuk video, jika durasi tidak tersedia dalam format terkompresi, dekoder harus menghitung durasi sebagai inversi kecepatan bingkai, dikonversi menjadi 100 unit nanodetik dan dibulatkan ke bawah.

Untuk audio, jika durasi tidak tersedia dalam format terkompresi, dekoder harus menghitung durasi sebagai inversi laju sampel audio dikalikan dengan jumlah sampel dalam buffer output, dikonversi ke unit 100 nanodetik dan dibulatkan ke bawah.

Satu-satunya waktu transformasi harus menghasilkan sampel tanpa stempel waktu adalah jika MFT belum pernah menerima stempel waktu pada sampel input, atau jika tidak ada cara untuk menghitung stempel waktu output yang akurat dari stempel waktu input sebelumnya.

Dekode Audio

Untuk decoder audio, durasi setiap sampel output dihitung dari laju pengambilan sampel audio dan jumlah sampel PCM per saluran dalam buffer output.

Cara yang benar untuk menghitung stempel waktu output tergantung pada apakah sampel input berisi stempel waktu.

Jika sampel input berisi stempel waktu, dekoder menghitung stempel waktu output dari stempel waktu input, sebagai berikut:

  • Jika setiap buffer input berisi satu atau beberapa bingkai terkompresi lengkap, tanpa bingkai parsial, stempel waktu output sama dengan stempel waktu input, dikurangi latensi dekoder yang diketahui. Misalnya, dekoder Dolby Digital (AC-3) memiliki latensi 256 sampel PCM. Misalnya, pada laju pengambilan sampel 48 kHz, latensinya adalah 5,33 milidetik (msec). Oleh karena itu, jika stempel waktu input adalah 1000 msec, stempel waktu output adalah 1000 – 5,33 = 994,66 msec. Jika buffer input menyertakan lebih dari satu bingkai terkompresi utuh, dekoder akan menghasilkan satu sampel output untuk setiap bingkai dalam sampel input. Semua sampel output akan diberi stempel waktu dengan benar sehingga tidak ada celah.
  • Bergantung pada format transportasi, buffer input mungkin berisi bingkai parsial. Misalnya, buffer mungkin berisi bagian dari bingkai dari buffer input sebelumnya, diikuti oleh satu atau beberapa bingkai lengkap, diikuti dengan awal bingkai berikutnya. Dalam hal ini, umumnya benar untuk mengasumsikan bahwa stempel waktu input sesuai dengan bingkai pertama yang dimulai dalam buffer. (Artinya, bingkai parsial yang dimulai di buffer sebelumnya tidak disertakan dalam stempel waktu untuk buffer saat ini.) Hitung stempel waktu output yang sesuai.

Jika sampel input tidak berisi stempel waktu apa pun:

  • Decoder harus menghasilkan stempel waktunya sendiri, mengatur stempel waktu output pertama ke nol.
  • Durasi sampel dihitung dari jumlah sampel output dalam buffer dan laju sampel.
  • Stempel waktu berikutnya dihitung dari stempel dan durasi waktu sebelumnya: Stempel waktu saat ini + durasi saat ini = stempel waktu berikutnya. Seharusnya tidak ada celah dalam stempel waktu output.

Jika aliran input awalnya berisi stempel waktu, tetapi karena alasan tertentu beralih ke tidak ada stempel waktu, dekoder harus terus menghasilkan stempel waktu outputnya sendiri, sehingga terus menerus dan tidak ada celah.

Jika aliran input berisi stempel waktu, tetapi ada celah dalam waktu, dekoder hanya akan menyebarkan celah ini. Dengan kata lain, dekoder tidak boleh mencoba memperbaiki stempel waktu yang tidak konsisten di aliran input.

Mixer

Nota

Di Windows Vista, alur Media Foundation tidak mendukung MFTs dengan lebih dari satu input. MFTs beberapa input didukung di Windows 7.

 

Mixer mengambil beberapa input dan mencampurnya ke dalam satu output. Jika aliran input tidak sepenuhnya terkunci laju, atau sedikit diimbangi satu sama lain dari satu sama lain, mungkin ada ambiguitas tentang waktu mana yang harus diatur pada output. Berikut adalah beberapa panduan, tergantung pada jenis media:

  • Audio. Saat startup atau segera setelah pengurasan atau pembilasan, mixer audio harus menunggu untuk menghasilkan sampel output hingga menerima sampel input pada semua aliran input yang diperlukan. Pada titik itu, ia harus memilih stempel waktu paling awal dari sampel awal untuk digunakan sebagai garis besar untuk stempel waktu output. Aliran lain harus diisi dengan keheningan untuk membentuk perbedaan waktu. Jika sampel diterima pada aliran input opsional, sampel juga harus diperhitungkan dalam perhitungan. Sejak saat itu, MFT harus berusaha untuk menghasilkan rantai stempel waktu output yang berkelanjutan dan tidak putus. Secara umum, MFT tidak boleh mencoba memperhitungkan satu aliran yang melayang relatif terhadap aliran lainnya. Sebaliknya, ia harus menghitung stempel waktu output dari stempel waktu garis besar, laju output, dan ukuran buffer. Ketika pengurasan atau pembuangan lain terjadi, MFT harus mengatur ulang stempel waktu garis besarnya.

  • Video. Saat startup atau segera setelah pengurasan atau pembilasan, mixer video harus menunggu untuk menghasilkan sampel output hingga menerima sampel input pada semua aliran input yang diperlukan. Pada titik itu, ia harus memilih stempel waktu paling awal dari sampel awal untuk digunakan sebagai garis besar untuk stempel waktu output. Secara umum, ia harus berusaha untuk menjaga stempel waktu output berkelanjutan dan reguler dan durasi tetap, bahkan jika input tidak sesering mungkin, jika perlu dengan mengulangi bingkai input.

Encoders

Encoder mengonversi audio atau video yang tidak dikompresi menjadi paket terkompresi. Encoder harus mengikuti panduan berikut:

  • Encoder harus mengikuti konvensi format output. Jika format biasanya tidak memberi stempel waktu setiap sampel, seperti dalam MPEG-2, tidak setiap sampel output perlu memiliki stempel waktu dan durasi.

  • Stempel waktu input harus dipertahankan dalam format output, jika format memiliki bidang untuk stempel waktu, kecuali informasi waktu yang lebih baik tersedia dari sumber lain, seperti aplikasi itu sendiri.

Multiplexer

Nota

Di Windows Vista, alur Media Foundation tidak mendukung MFTs dengan lebih dari satu input. MFTs beberapa input didukung di Windows 7.

 

Multiplexer menggabungkan dua aliran audio atau video yang berbeda ke dalam satu format yang saling berhubungan, seperti AVI atau MPEG-2 Transport Stream. Multiplexer harus mengikuti panduan berikut:

  • Multiplexer harus mengikuti konvensi format output. Jika format biasanya tidak memberi stempel waktu setiap sampel, seperti dalam MPEG-2, tidak setiap sampel output perlu memiliki stempel waktu dan durasi.

  • Stempel waktu harus mencerminkan waktu paling awal yang akan ditempatkan pada bingkai apa pun yang dimulai dalam paket itu, atau waktu sampel audio pertama yang akan didekode dari paket tersebut. Abaikan pedoman ini jika bertentangan dengan konvensi format output.

Demultiplexers

Demultiplexer membagi format yang saling terkait, seperti AVI atau MPEG-2 Transport Stream, ke dalam aliran audio dan video yang mendasar.

Jika format berisi informasi stempel waktu tertentu yang dapat digunakan untuk menghitung stempel waktu output yang akurat berdasarkan stempel waktu input, informasi tersebut harus digunakan. Namun, jika format berisi waktu dalam dasar yang sama sekali berbeda yang tidak berkaitan dengan stempel waktu input, dan offset yang akurat ke stempel waktu input tidak dapat dihitung, waktu format itu sendiri harus diabaikan.

Jika format tidak memiliki informasi stempel waktu yang dapat digunakan, demultiplexer harus mengikuti aturan berikut:

  • Aliran output yang tidak dikompresi harus memiliki stempel waktu dan durasi yang valid jika memungkinkan, dihitung dari stempel waktu input terdekat sebelumnya.

  • Aliran output terkompresi harus memiliki stempel waktu hanya pada sampel output pertama yang berasal dari sampel input dengan stempel waktu. Jika sampel input tidak memiliki stempel waktu, tidak ada sampel output yang berasal dari sampel input tersebut harus memiliki stempel waktu. Jika sampel input dipecah menjadi beberapa sampel output, hanya sampel output pertama yang harus memiliki stempel waktu, dan sisanya seharusnya tidak memiliki stempel waktu.

Contoh

Contoh 1. Misalkan efek video selalu mengambil bingkai input yang tidak dikompresi, menerapkan efek, dan menyalinnya ke output. Ini tidak pernah menahan bingkai atau buffer input apa pun. MFT ini hanya menyalin stempel waktu dan durasi dari sampel input ke sampel output, jika tersedia, dan tidak melakukan perhitungan waktu sama sekali.

Contoh 2. Misalkan efek audio mengubah semua kecuali 10 milidetik (mdtk) dari setiap buffer input, menghemat 10 ms tambahan untuk dikombinasikan dengan buffer berikutnya. Ini mendapatkan aliran sampel yang semuanya memiliki durasi 50 mdtk. Waktu input ditampilkan dalam tabel berikut.

Contoh Waktu input Durasi input Waktu output Durasi output
1 20 50 20 40
2 70 50 60 50
3 121 50 110 50
4 171 50 161 50

 

Perhatikan perbedaan 1 md antara durasi aktual sampel 2 dan durasi tersirat berdasarkan stempel waktu berikutnya (121 ? 70 = 51).

Karena MFT menahan 10 ms, MFT menghasilkan 40 ms sampel input pertama 1 sebagai sampel output 1, dengan stempel waktu 20 mdtk dan durasi 40 mdtk.

Sampel output 2 menggabungkan 10 md yang sebelumnya ditahan dengan 40 md sampel input 2. Sampel ini diberi stempel waktu 60 md (stempel waktu sampel input sebelumnya, 20ms, ditambah durasi data yang sudah diproses dari sampel tersebut, 40ms). Ini diberikan durasi 50ms.

Demikian pula, sampel berikutnya memiliki stempel waktu 110ms (70ms + 40ms) dengan durasi 50 ms.

Perhitungan berikutnya lebih menarik. Stempel waktu tersirat dari waktu output dan durasi sebelumnya adalah 160 ms (stempel waktu 110 md + durasi 50 md). Namun, stempel waktu output seharusnya dihitung dari stempel waktu input sampel input paling awal yang tumpang tindih dengan sampel output tepat waktu, ditambah panjang data apa pun yang sudah diproses dari sampel tersebut. Sampel input yang tumpang tindih terdekat adalah sampel 4 (stempel waktu = 171), tetapi ini bukan yang paling awal. Sampel tumpang tindih paling awal adalah sampel 3 (stempel waktu = 121). Menambahkan 40ms yang telah diproses dari sampel tersebut, hasilnya adalah 161.

Menulis MFT Kustom