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
S_OK
Metode berhasil.
MF_E_ASF_OUTOFRANGE
Posisi mulai melewati akhir presentasi (sumber media ASF).
MF_E_HW_MFT_FAILED_START_STREAMING
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.
MF_E_INVALIDREQUEST
Permintaan mulai tidak valid. Misalnya, posisi mulai melewati akhir presentasi.
MF_E_SHUTDOWN
Metode Matikan sumber media telah dipanggil.
MF_E_UNSUPPORTED_TIME_FORMAT
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 .
Jika operasi mulai gagal secara asinkron (setelah metode mengembalikan S_OK), sumber media mengirimkan peristiwa MESourceStarted yang berisi kode kegagalan, tanpa mengirim peristiwa lain yang tercantum di sini. Jika metode gagal secara sinkron (mengembalikan kode kesalahan), tidak ada peristiwa yang dimunculkan.

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:

Untuk informasi selengkapnya, lihat Menulis Sumber Media Kustom.

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

Lihat juga

IMFMediaSource

Sumber Media