Tanda Waktu

[Fitur yang terkait dengan halaman ini, DirectShow, adalah fitur warisan. Ini telah digantikan oleh MediaPlayer, IMFMediaEngine, dan Tangkapan Audio/Video di Media Foundation. Fitur-fitur tersebut telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan MediaPlayer, IMFMediaEngine dan Audio/Video Capture di Media Foundation alih-alih DirectShow, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]

Stempel waktu menentukan waktu mulai dan selesai sampel media, diukur dalam waktu streaming. Stempel waktu terkadang disebut waktu presentasi. Saat membaca sisa artikel ini, penting untuk diingat bahwa tidak semua format menggunakan stempel waktu dengan cara yang sama. Misalnya, tidak semua sampel MPEG diberi stempel waktu. Dalam grafik filter MPEG, stempel waktu tidak diterapkan ke setiap bingkai hingga output dari dekoder.

Saat filter perender menerima sampel, filter akan menjadwalkan penyajian berdasarkan stempel waktu. Jika sampel datang terlambat, atau tidak memiliki stempel waktu, filter akan segera merender sampel. Jika tidak, filter menunggu hingga waktu mulai sampel sebelum merender sampel. (Ini menunggu waktu mulai dengan memanggil metode IReferenceClock::AdviseTime .)

Filter sumber dan filter pengurai bertanggung jawab untuk mengatur stempel waktu yang benar pada sampel yang diproses. Gunakan panduan berikut.

  • Pemutaran file: Sampel pertama adalah waktu yang dicap dengan waktu mulai nol. Stempel waktu berikutnya ditentukan oleh panjang sampel dan laju pemutaran, yang sendiri ditentukan oleh format file. Filter yang mengurai file bertanggung jawab untuk menghitung stempel waktu yang benar (misalnya, Pemisah AVI).
  • Pengambilan video dan audio: Setiap sampel diberi stempel waktu dengan waktu mulai yang sama dengan waktu streaming saat diambil, dengan peringatan berikut:
    • Bingkai video dari pin pratinjau (dibandingkan dengan pin pengambilan) tidak diberi stempel waktu. Karena latensi grafik, bingkai video yang dicap dengan waktu pengambilan akan selalu terlambat di perender video. Ini dapat menyebabkan perender menghilangkan bingkai, dalam upaya kontrol kualitas. Untuk informasi tentang kontrol kualitas, lihat Manajemen Kontrol Kualitas.
    • Pengambilan audio: Filter pengambilan audio menggunakan sekumpulan buffernya sendiri, yang terpisah dari yang digunakan oleh driver audio. Driver audio mengisi buffer filter pengambilan pada interval tetap. Interval tergantung pada driver, tetapi umumnya tidak lebih dari 10 milidetik. Stempel waktu pada sampel audio mencerminkan waktu ketika driver mengisi buffer filter tangkapan audio. Waktu-waktu ini bisa sedikit tidak akurat, terutama jika aplikasi menggunakan ukuran buffer yang sangat kecil. Namun, waktu media akan secara akurat mencerminkan jumlah sampel audio di buffer.
  • Filter mux: Tergantung pada format output, filter mux mungkin perlu menghasilkan stempel waktu, atau mungkin tidak. Misalnya, format file AVI menggunakan kecepatan bingkai tetap tanpa stempel waktu, sehingga filter AVI Mux mengasumsikan bahwa sampel tiba pada waktu yang kira-kira tepat. Jika stempel waktu masuk menunjukkan celah yang lebih besar dari satu bingkai, namun, AVI Mux menulis entri indeks dengan ukuran nol, untuk menunjukkan bingkai yang dijatuhkan. Pada pemutaran file, stempel waktu baru dihasilkan pada durasi, seperti yang dijelaskan sebelumnya.

Untuk mengatur stempel waktu pada sampel, panggil metode IMediaSample::SetTime .

Waktu Media

Secara opsional, filter juga dapat menentukan waktu media untuk sampel. Dalam aliran video, waktu media mewakili nomor bingkai. Dalam aliran audio, waktu media mewakili nomor sampel dalam paket. Misalnya, jika setiap paket berisi satu detik audio 44,1 kilohertz (kHz), paket pertama memiliki waktu mulai media nol dan waktu berhenti media 44100. Dalam aliran yang dapat dicari, waktu media selalu relatif terhadap waktu mulai streaming. Misalnya, Anda mencari hingga 2 detik dari awal aliran video 15 fps. Sampel media pertama setelah pencarian memiliki stempel waktu nol tetapi waktu media 30.

Filter perender dan mux dapat menggunakan waktu media untuk menentukan apakah bingkai atau sampel telah dihilangkan, dengan memeriksa celah. Namun, filter tidak diperlukan untuk mengatur waktu media. Untuk mengatur waktu media pada sampel, panggil metode IMediaSample::SetMediaTime .

Waktu dan Jam di DirectShow