IMFMediaSource::Metode mulai (mfidl.h)
Memulai, mencari, atau memulai ulang sumber media dengan menentukan tempat untuk memulai pemutaran.
Sintaks
HRESULT Start(
[in] IMFPresentationDescriptor *pPresentationDescriptor,
[in] const GUID *pguidTimeFormat,
[in] const PROPVARIANT *pvarStartPosition
);
Parameter
[in] pPresentationDescriptor
Arahkan ke antarmuka IMFPresentationDescriptor dari deskriptor presentasi sumber media. Untuk mendapatkan deskriptor presentasi, panggil IMFMediaSource::CreatePresentationDescriptor. Anda dapat mengubah pendeskripsi presentasi sebelum memanggil Mulai, untuk memilih atau membatalkan pilihan aliran atau mengubah jenis media.
[in] pguidTimeFormat
Penunjuk ke GUID yang menentukan format waktu. Format waktu menentukan unit untuk parameter pvarStartPosition . Jika nilainya GUID_NULL, format waktunya adalah 100 unit nanodetik. Beberapa sumber media mungkin mendukung GUID format waktu tambahan. Parameter ini bisa NULL. Jika nilainya NULL, nilainya setara dengan GUID_NULL.
[in] pvarStartPosition
Menentukan tempat untuk memulai pemutaran. Unit parameter ini ditunjukkan oleh format waktu yang diberikan dalam pguidTimeFormat. Jika format waktu GUID_NULL, jenis varian harus VT_I8 atau VT_EMPTY. Gunakan VT_I8 untuk menentukan posisi awal baru, dalam unit 100 nanodetik. Gunakan VT_EMPTY untuk memulai dari posisi saat ini. Format waktu lain mungkin menggunakan jenis PROPVARIANT lainnya.
Nilai kembali
Metode mengembalikan HRESULT. Nilai yang mungkin termasuk, tetapi tidak terbatas pada, yang ada dalam tabel berikut.
Menampilkan kode | Deskripsi |
---|---|
|
Metode berhasil. |
|
Posisi mulai melewati akhir presentasi (sumber media ASF). |
|
Perangkat keras tak bisa memulai streaming. Kode galat ini dapat dikembalikan oleh sumber media yang mewakili perangkat keras, seperti kamera. Misalnya, jika kamera sudah digunakan oleh aplikasi lain, metode mungkin mengembalikan kode kesalahan ini. |
|
Permintaan mulai tidak valid. Misalnya, posisi mulai melewati akhir presentasi. |
|
Metode Matikan sumber media telah dipanggil. |
|
Sumber media tidak mendukung format waktu yang ditentukan dalam pguidTimeFormat. |
Keterangan
Metode ini asinkron. Jika operasi berhasil, sumber media akan mengirimkan peristiwa berikut:
- Untuk setiap aliran baru, sumber mengirimkan peristiwa MENewStream . Kejadian ini dikirim untuk panggilan Mulai pertama tempat aliran muncul. Data peristiwa adalah penunjuk ke antarmuka IMFMediaStream aliran.
- Untuk setiap aliran yang diperbarui , sumber mengirimkan peristiwa MEUpdatedStream . Aliran diperbarui jika aliran sudah ada saat Mulai dipanggil (misalnya, jika aplikasi mencari selama pemutaran). Data peristiwa adalah penunjuk ke antarmuka IMFMediaStream aliran.
- Jika status sebelumnya dihentikan, sumber akan mengirimkan peristiwa MESourceStarted .
- Jika status sebelumnya dimulai atau dijeda dan posisi awal adalah posisi saat ini (VT_EMPTY), sumber mengirim peristiwa MESourceStarted .
- Jika status sebelumnya dimulai atau dijeda, dan posisi awal baru ditentukan, sumber mengirimkan peristiwa MESourceSeeked .
- Jika sumber mengirim peristiwa MESourceStarted , setiap aliran media mengirimkan peristiwa MEStreamStarted . Jika sumber mengirim peristiwa MESourceSeeked , setiap aliran mengirimkan peristiwa MEStreamSeeked .
Panggilan ke Mulai menghasilkan pencarian jika status sebelumnya dimulai atau dijeda, dan posisi awal baru tidak VT_EMPTY. Tidak semua sumber media dapat mencari. Jika sumber media dapat mencari, metode IMFMediaSource::GetCharacteristics mengembalikan bendera MFMEDIASOURCE_CAN_SEEK .
Peristiwa dari sumber media tidak disinkronkan dengan peristiwa dari aliran media. Oleh karena itu, jika Anda mencari sumber media, Anda masih dapat menerima sampel dari posisi sebelumnya setelah mendapatkan peristiwa MESourceSeeked . Jika Anda perlu menyinkronkan operasi, tunggu peristiwa streaming, MEStreamSeeked, yang menandai titik tepat dalam aliran tempat pencarian terjadi.
Akhir Stream
Saat streaming diputar ke akhir, streaming mengirimkan peristiwa MEEndOfStream . Ketika semua aliran yang dipilih telah mencapai akhir, sumber media mengirimkan peristiwa MEEndOfPresentation .Jika posisi awal melewati akhir aliran yang dipilih (tetapi sebelum akhir presentasi), aliran harus mengirim MEEndOfStream segera setelah MEStreamStarted/MEStreamSeeked. Jika pemutaran mencapai akhir presentasi dan Mulai dipanggil lagi dari posisi saat ini, aliran mengirim kembali peristiwa MEEndOfStream dan sumber media mengirim ulang peristiwa MEEndOfPresentation . Peristiwa ini menginformasikan alur untuk tidak meminta data lagi.
Selama pemutaran terbalik, awal file dianggap sebagai akhir aliran. Untuk informasi selengkapnya, lihat Menerapkan Kontrol Laju.
Menerapkan Mulai
Ketika sumber media menjalankan pencarian, sumber media harus dimulai pada bingkai kunci pertama sebelum waktu pencarian, sehingga dekoder dapat mendekode sampel untuk waktu mulai target. Alur akan membuang sampel yang didekodekan yang terlalu dini.Jika waktu mulai VT_EMPTY dan status sebelumnya dimulai atau dijeda, sumber harus dilanjutkan dari posisinya saat ini. Dalam hal ini, tidak perlu mengirim ulang bingkai kunci sebelumnya, karena dekoder masih akan memiliki data yang sebelumnya dikirim.
Saat memvalidasi parameter pPresentationDescriptor , sumber media harus memeriksa hanya informasi yang diperlukan untuk berfungsi dengan benar. Secara khusus, klien dapat menambahkan atribut privat ke deskriptor presentasi. Kehadiran atribut tambahan seharusnya tidak menyebabkan metode Mulai gagal.
Setelah Mulai dipanggil, setiap aliran di sumber media harus melakukan salah satu hal berikut:
- Mengirimkan data media sebagai respons terhadap panggilan IMFMediaStream::RequestSample .
- Kirim peristiwa MEStreamTick untuk menunjukkan celah dalam aliran.
- Kirim peristiwa MEEndOfStream untuk menunjukkan akhir aliran.
Contoh
Contoh berikut memulai pemutaran pada 1 detik ke dalam presentasi.
PROPVARIANT var;
PropVariantInit(&var);
var.vt = VT_I8;
var.hVal.QuadPart = 10000000; // 10^7 = 1 second.
hr = pSource->Start(pPresentationDescriptor, NULL, &var);
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows Vista [aplikasi desktop | Aplikasi UWP] |
Server minimum yang didukung | Windows Server 2008 [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | mfidl.h |
Pustaka | Mfuuid.lib |