Erstellen von Quellknoten

Ein Quellknoten stellt einen Stream aus einer Medienquelle dar. Der Quellknoten muss Zeiger auf die Medienquelle, den Präsentationsdeskriptor und den Streamdeskriptor enthalten.

Gehen Sie wie folgt vor, um einer Topologie einen Quellknoten hinzuzufügen:

  1. Rufen Sie MFCreateTopologyNode mit dem flag MF_TOPOLOGY_SOURCESTREAM_NODE auf, um den Quellknoten zu erstellen.
  2. Legen Sie das attribut MF_TOPONODE_SOURCE auf dem Knoten mit einem Zeiger auf die Medienquelle fest.
  3. Legen Sie das MF_TOPONODE_PRESENTATION_DESCRIPTOR-Attribut auf dem Knoten mit einem Zeiger auf den Präsentationsdeskriptor der Medienquelle fest.
  4. Legen Sie das attribut MF_TOPONODE_STREAM_DESCRIPTOR auf dem Knoten mit einem Zeiger auf den Streamdeskriptor für den Stream fest.
  5. Rufen Sie IMFTopology::AddNode auf, um den Knoten der Topologie hinzuzufügen.

Im folgenden Beispiel wird ein Quellknoten erstellt und initialisiert.

// Add a source node to a topology.
HRESULT AddSourceNode(
    IMFTopology *pTopology,           // Topology.
    IMFMediaSource *pSource,          // Media source.
    IMFPresentationDescriptor *pPD,   // Presentation descriptor.
    IMFStreamDescriptor *pSD,         // Stream descriptor.
    IMFTopologyNode **ppNode)         // Receives the node pointer.
{
    IMFTopologyNode *pNode = NULL;

    // Create the node.
    HRESULT hr = MFCreateTopologyNode(MF_TOPOLOGY_SOURCESTREAM_NODE, &pNode);
    if (FAILED(hr))
    {
        goto done;
    }

    // Set the attributes.
    hr = pNode->SetUnknown(MF_TOPONODE_SOURCE, pSource);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pNode->SetUnknown(MF_TOPONODE_PRESENTATION_DESCRIPTOR, pPD);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pNode->SetUnknown(MF_TOPONODE_STREAM_DESCRIPTOR, pSD);
    if (FAILED(hr))
    {
        goto done;
    }
    
    // Add the node to the topology.
    hr = pTopology->AddNode(pNode);
    if (FAILED(hr))
    {
        goto done;
    }

    // Return the pointer to the caller.
    *ppNode = pNode;
    (*ppNode)->AddRef();

done:
    SafeRelease(&pNode);
    return hr;
}

Erstellen von Topologien

Medienquellen

Topologien

IMFTopologyNode