次の方法で共有


手順 3: メディア ファイルを開く

このトピックは、 Media Foundation を使用してメディア ファイルを再生する方法に関するチュートリアルの手順 3 です。 完全なコードは、「 メディア セッション再生の例」のトピックに示されています。

メソッドは CPlayer::OpenURL 、URL からメディア ファイルを開きます。

//  Open a URL for playback.
HRESULT CPlayer::OpenURL(const WCHAR *sURL)
{
    // 1. Create a new media session.
    // 2. Create the media source.
    // 3. Create the topology.
    // 4. Queue the topology [asynchronous]
    // 5. Start playback [asynchronous - does not happen in this method.]

    IMFTopology *pTopology = NULL;
    IMFPresentationDescriptor* pSourcePD = NULL;

    // Create the media session.
    HRESULT hr = CreateSession();
    if (FAILED(hr))
    {
        goto done;
    }

    // Create the media source.
    hr = CreateMediaSource(sURL, &m_pSource);
    if (FAILED(hr))
    {
        goto done;
    }

    // Create the presentation descriptor for the media source.
    hr = m_pSource->CreatePresentationDescriptor(&pSourcePD);
    if (FAILED(hr))
    {
        goto done;
    }

    // Create a partial topology.
    hr = CreatePlaybackTopology(m_pSource, pSourcePD, m_hwndVideo, &pTopology);
    if (FAILED(hr))
    {
        goto done;
    }

    // Set the topology on the media session.
    hr = m_pSession->SetTopology(0, pTopology);
    if (FAILED(hr))
    {
        goto done;
    }

    m_state = OpenPending;

    // If SetTopology succeeds, the media session will queue an 
    // MESessionTopologySet event.

done:
    if (FAILED(hr))
    {
        m_state = Closed;
    }

    SafeRelease(&pSourcePD);
    SafeRelease(&pTopology);
    return hr;
}

このメソッドは、次の手順を実行します。

  1. CPlayer::CreateSession を呼び出して、メディア セッションの新しいインスタンスを作成します。 「手順 4: メディア セッションを作成する」を参照してください。
  2. URL からメディア ソースを作成します。 この手順の完全なコードについては、「 ソース リゾルバーの使用」のトピックを参照してください。
  3. IMFMediaSource::CreatePresentationDescriptor を呼び出して、メディア ソースのプレゼンテーション記述子を取得します。 プレゼンテーション記述子は、ソース ファイル内の各ストリームを記述します。
  4. 再生トポロジを作成します。 この手順のコードは、「 再生トポロジの作成」のトピックに示されています。
  5. IMFMediaSession::SetTopology を呼び出して、メディア セッションでトポロジを設定します。

SetTopology メソッドは非同期的に完了します。 完了すると、CPlayer オブジェクトの IMFAsyncCallback::Invoke メソッドが呼び出されます。 「手順 5: メディア セッション イベントを処理する」を参照してください。

次へ: 手順 4: メディア セッションを作成する

オーディオ/ビデオの再生

Media Foundation でメディア ファイルを再生する方法