Metode IMFASFIndexer::GetCompletedIndex (wmcontainer.h)
Mengambil indeks yang telah selesai dari objek pengindeks ASF.
Sintaks
HRESULT GetCompletedIndex(
[in] IMFMediaBuffer *pIIndexBuffer,
[in] QWORD cbOffsetWithinIndex
);
Parameter
[in] pIIndexBuffer
Penunjuk ke antarmuka IMFMediaBuffer dari buffer media yang menerima data indeks.
[in] cbOffsetWithinIndex
Offset data yang akan diambil, dalam byte dari awal data indeks. Atur ke 0 untuk panggilan pertama. Jika panggilan berikutnya diperlukan (buffer tidak cukup besar untuk menahan seluruh indeks), atur ke byte setelah yang terakhir diambil.
Mengembalikan nilai
Metode mengembalikan HRESULT. Nilai yang mungkin termasuk, tetapi tidak terbatas pada, yang ada dalam tabel berikut.
Menampilkan kode | Deskripsi |
---|---|
|
Metode berhasil. |
|
Indeks tidak diterapkan sebelum mencoba untuk mendapatkan indeks yang telah selesai. Untuk informasi selengkapnya, lihat Keterangan. |
Keterangan
Metode ini menggunakan buffer sebanyak mungkin, dan memperbarui panjang buffer dengan tepat.
Jika pIIndexBuffer cukup besar untuk berisi seluruh buffer, cbOffsetWithinIndex harus 0, dan panggilan hanya perlu dilakukan sekali. Jika tidak, seharusnya tidak ada celah antara buffer berturut-turut.
Pengguna harus menulis data ini ke konten di byte cbOffsetFromIndexStart setelah akhir objek data ASF. Anda dapat memanggil IMFASFIndexer::GetIndexPosition untuk menentukan posisi awal indeks ASF.
Panggilan ini tidak akan berhasil kecuali IMFASFIndexer::CommitIndex telah dipanggil. Setelah memanggil GetCompletedIndex, pemanggil harus memanggil IMFASFContentInfo::GenerateHeader dan menimpa header ASF yang ada dengan header baru; jika tidak, header ASF tidak akan cocok dengan konten, dan file tidak dijamin untuk diputar dengan benar.
Anda tidak dapat menggunakan metode ini dalam skenario pembacaan indeks. Anda hanya dapat menggunakan metode ini saat menulis indeks.
Contoh
Contoh berikut menunjukkan cara menulis indeks ASF lengkap ke aliran byte.
HRESULT WriteASFIndex(IMFASFIndexer *pIndex,IMFByteStream *pStream)
{
const DWORD cbChunkSize = 4096;
IMFMediaBuffer *pBuffer = NULL;
QWORD cbIndex = 0;
DWORD cbIndexWritten = 0;
HRESULT hr = pIndex->GetIndexWriteSpace(&cbIndex);
if (FAILED(hr))
{
goto done;
}
hr = MFCreateMemoryBuffer(cbChunkSize, &pBuffer);
if (FAILED(hr))
{
goto done;
}
while (cbIndexWritten < cbIndex)
{
BYTE *pData = NULL;
DWORD cbData = 0;
DWORD cbWritten = 0;
hr = pIndex->GetCompletedIndex(pBuffer, cbIndexWritten);
if (FAILED(hr))
{
goto done;
}
hr = pBuffer->Lock(&pData, NULL, &cbData);
if (FAILED(hr))
{
goto done;
}
hr = pStream->Write(pData, cbData, &cbWritten);
(void)pBuffer->Unlock();
if (FAILED(hr))
{
goto done;
}
cbIndexWritten += cbData;
}
done:
SafeRelease(&pBuffer);
return hr;
};
Persyaratan
Persyaratan | Nilai |
---|---|
Klien minimum yang didukung | Windows Vista [hanya aplikasi desktop] |
Server minimum yang didukung | Windows Server 2008 [hanya aplikasi desktop] |
Target Platform | Windows |
Header | wmcontainer.h |
Pustaka | Mfuuid.lib |
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk