共用方式為


IMFASFIndexer::GetCompletedIndex 方法 (wmcontainer.h)

從 ASF 索引器物件擷取已完成的索引。

語法

HRESULT GetCompletedIndex(
  [in] IMFMediaBuffer *pIIndexBuffer,
  [in] QWORD          cbOffsetWithinIndex
);

參數

[in] pIIndexBuffer

接收索引數據之媒體緩衝區之 IMFMediaBuffer 介面的指標。

[in] cbOffsetWithinIndex

要擷取的數據位移,以位元組為單位從索引數據開始。 針對第一次呼叫,設定為0。 如果需要後續呼叫, (緩衝區不夠大,無法保存整個索引) ,請在最後一個擷取的位元組之後設定為位元組。

傳回值

方法會傳回 HRESULT。 可能的值包括 (但不限於) 下表中的這些值。

傳回碼 描述
S_OK
此方法已成功。
MF_E_INDEX_NOT_COMMITTED
嘗試取得已完成的索引之前,未認可索引。 如需詳細資訊,請參閱<備註>。

備註

此方法會盡可能使用大部分的緩衝區,並適當地更新緩衝區的長度。

如果 pIIndexBuffer 夠大,足以包含整個緩衝區, cbOffsetWithinIndex 應該是 0,而且呼叫只需要進行一次。 否則,連續緩衝區之間不應該有間距。

用戶必須在 ASF 數據對象的結尾之後,將此數據寫入 cbOffsetFromIndexStart 位元組的內容。 您可以呼叫 IMFASFIndexer::GetIndexPosition 來判斷 ASF 索引的開始位置。

除非已呼叫 IMFASFIndexer::CommitIndex, 否則此呼叫將不會成功。 呼叫 GetCompletedIndex 之後,呼叫端必須呼叫 IMFASFContentInfo::GenerateHeader ,並以新的標頭覆寫現有的 ASF 標頭;否則,ASF 標頭與內容不符,而且不保證檔案正確播放。

您無法在索引讀取案例中使用此方法。 您只能在撰寫索引時使用這個方法。

範例

下列範例示範如何將完整的 ASF 索引寫入位元組數據流。

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;
};

規格需求

需求
最低支援的用戶端 Windows Vista [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 [僅限傳統型應用程式]
目標平台 Windows
標頭 wmcontainer.h
程式庫 Mfuuid.lib

另請參閱

ASF 索引物件

IMFASFIndexer

使用索引器寫入新索引