Waktu Presentasi Urutan
Topik ini menjelaskan bagaimana Sumber Sequencer menangani waktu presentasi selama pemutaran.
Gambaran Umum
Sumber pengurut mendukung dua mode berbeda: urutan daftar putar dan urutan pengeditan.
Dalam urutan pengeditan, aplikasi menentukan durasi setiap segmen terlebih dahulu, sebelum memulai pemutaran. Dalam urutan daftar putar, aplikasi tidak menentukan durasi terlebih dahulu. (Bahkan, durasinya mungkin tidak diketahui.)
Dalam kedua kasus, Anda dapat menentukan mulai media segmen dan waktu henti media. Waktu-waktu ini menentukan posisi dalam file sumber tempat segmen dimulai dan berakhir. Misalnya, misalkan file sumber berdurasi 90 detik. Jika Anda ingin memangkas 10 detik pertama dan 10 detik terakhir, Anda akan menentukan nilai berikut:
- Mulai media: 10 detik
- Perhentian media: 80 detik
Untuk menentukan waktu mulai media, atur atribut MF_TOPONODE_MEDIASTART pada simpul sumber. Untuk menentukan waktu henti media, atur atribut MF_TOPONODE_MEDIASTOP pada simpul sumber.
Untuk membuat urutan pengeditan, atur atribut MF_SESSION_GLOBAL_TIME saat Anda membuat Sesi Media. Jika tidak, Sesi Media mengharapkan urutan daftar putar. Dalam urutan pengeditan, setiap topologi segmen harus memiliki atribut MF_TOPOLOGY_PROJECTSTART dan atribut MF_TOPOLOGY_PROJECTSTOP .
Urutan Daftar Putar
Dalam urutan daftar putar, jam presentasi dimulai pada nol dan berlanjut di seluruh batas segmen. Sumber asli memberikan sampel dengan stempel waktu yang sama dengan waktu media. Alur mengonversi stempel waktu ke waktu presentasi yang benar sebagai berikut:
- Stempel waktu baru = waktu media + offset − mulai media
Nilai offset adalah waktu presentasi di mana segmen sebelumnya berakhir. Untuk segmen pertama, offset adalah nol. Berikut adalah dua contoh bagaimana konversi stempel waktu ini dihitung:
- Contoh 1: Misalkan segmen pertama (S1) panjangnya 10 detik, dan segmen kedua (S2) memiliki waktu mulai media nol. Sumber asli menggunakan waktu media untuk stempel waktunya, sehingga sampel pertama dari S2 memiliki stempel waktu nol. Offset adalah 10 detik (durasi S1), sehingga stempel waktu yang disesuaikan adalah:0 + 10 − 0 = 10 detik.
- Contoh 2: Misalkan segmen S1 panjangnya 10 detik, dan S2 memiliki waktu mulai media 5 detik. Sampel pertama dari S2 memiliki stempel waktu 5 detik (waktu media). Offset adalah 10 detik, sehingga stempel waktu yang disesuaikan adalah:5 + 10 − 5 = 10 detik.
Semua komponen alur di hilir dari simpul sumber menerima sampel dengan stempel waktu yang disesuaikan. Simpul sumber dalam topologi dapat memiliki waktu mulai media yang berbeda, sehingga penyesuaian dihitung secara terpisah untuk setiap cabang topologi.
Saat presentasi beralih ke segmen berikutnya, jam presentasi tidak berhenti atau direset, dan waktu presentasi meningkat secara monoton. Sebelum segmen baru dimulai, Sesi Media mengirimkan aplikasi peristiwa MESessionNotifyPresentationTime . Acara menentukan waktu mulai segmen, relatif terhadap jam presentasi, dan nilai offset. Saat segmen baru dimulai, alur memanggil Mulai pada sumber pengurut dengan nilai VT_EMPTY. Sumber pengurut mengirimkan peristiwa MESourceStarted tanpa waktu mulai.
Untuk mencari, aplikasi menentukan pengidentifikasi segmen ditambah offset waktu dalam segmen. Setelah pencarian, jam presentasi dimulai pada offset segmen . Berikut adalah contoh cara kerja proses tersebut:
- Contoh 3: Aplikasi berusaha untuk segmen S3, dengan offset segmen 10 detik. Jam presentasi dimulai pada 10 detik (offset segmen). Offset tidak termasuk durasi segmen S1 dan S2. Sumber pengurut mengirimkan peristiwa MESourceStarted dengan waktu mulai yang sama dengan offset segmen, 10 detik.
Setelah pencarian, jika pemutaran berlanjut ke segmen berikutnya, transisi berfungsi seperti contoh sebelumnya, kecuali bahwa offset tidak menyertakan segmen yang dilewati.
Berikut adalah beberapa detail lebih lanjut yang memengaruhi bagaimana sampel diberi stempel waktu:
- Dekode mungkin memerlukan data di luar waktu berhenti media. Alur menarik sebanyak mungkin data dari sumber seperti yang dibutuhkan dekoder, lalu memangkas sampel output dekoder.
- Transformasi mungkin data buffer. Misalnya, efek audio mungkin perlu melakukan ini. Ketika segmen berakhir, stempel waktu pada sampel terakhir dari transformasi lebih awal dari akhir segmen, karena transformasi menahan beberapa data. Ketika segmen berikutnya dimulai, stempel waktu pada sampel pertama sedikit lebih awal dari awal segmen. Tidak ada celah dalam stempel waktu, sehingga data yang mencapai sink media terus menerus. Ketika segmen akhir berakhir, alur menguras transformasi, sehingga tidak ada data yang hilang.
- Sumber mungkin perlu dimulai sedikit lebih awal dari waktu mulai media, untuk mengambil bingkai kunci sebelumnya. Oleh karena itu, setelah penyesuaian, sampel pertama mungkin memiliki waktu presentasi negatif.
Urutan Pengeditan
Dalam urutan pengeditan, aplikasi menentukan batas segmen terlebih dahulu, dengan mengatur atribut MF_TOPOLOGY_PROJECTSTART dan MF_TOPOLOGY_PROJECTSTOP . Alur menghitung penyesuaian untuk stempel waktu dengan cara yang hampir sama seperti untuk urutan daftar putar:
Untuk offset, ia menggunakan nilai MF_TOPOLOGY_PROJECTSTART, alih-alih menggunakan akhir segmen yang diamati.
Untuk mencari, offset menggunakan nilai yang sama dengan nilai MF_TOPOLOGY_PROJECTSTART segmen ditambah offset segmen.
Oleh karena itu, waktu presentasi dalam urutan pengeditan selalu relatif terhadap awal presentasi, bahkan jika aplikasi mencari ke segmen lain.
Topik terkait