So identifizieren Sie Eingaben nach Zahlen

[Das dieser Seite zugeordnete Feature Windows Media Format 11 SDK ist ein Legacyfeature. Es wurde von Source Reader und Sink Writer abgelöst. Source Reader und Sink Writer wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit quellleser und Senkenschreiber anstelle des Windows Media Format 11 SDK verwendet. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

Jedes Beispiel, das Sie an den Writer übergeben, muss einer Eingabenummer zugeordnet sein. Jede Eingabenummer entspricht einem oder mehreren Streams im Profil, die der Writer zum Schreiben der Datei verwendet. In einem Profil werden Medienquellen durch einen Verbindungsnamen identifiziert. Der Writer ordnet jedem Verbindungsnamen eine Eingabenummer zu, wenn Sie das Profil für den Writer festlegen. Bevor Sie Beispiele an den Writer übergeben können, müssen Sie bestimmen, welche Daten die einzelnen Eingaben erwarten. Sie können nicht davon ausgehen, dass die Eingaben in der gleichen Reihenfolge wie die Datenströme in einem Profil vorliegen, auch wenn dies häufig der Fall ist. Daher besteht die einzige zuverlässige Möglichkeit zum Abgleichen von Eingaben mit Datenströmen darin, den Verbindungsnamen der Eingabe mit dem Verbindungsnamen des Datenstroms zu vergleichen.

Führen Sie die folgenden Schritte aus, um die Verbindungsnamen und die entsprechenden Eingabenummern für ein geladenes Profil zu identifizieren:

  1. Erstellen Sie ein Writer-Objekt, und legen Sie ein Profil fest, das verwendet werden soll. Weitere Informationen zum Festlegen von Profilen im Writer finden Sie unter Verwenden von Profilen mit dem Writer. Sie sollten die Verbindungsnamen kennen, die für die Streams im Profil verwendet werden. Sie können den Verbindungsnamen aus dem Profil abrufen, indem Sie das Streamkonfigurationsobjekt für jeden Stream abrufen und IWMStreamConfig::GetConnectionName aufrufen. Weitere Informationen zu Profilen und Streamkonfigurationsobjekten finden Sie unter Arbeiten mit Profilen.
  2. Rufen Sie die Gesamtanzahl der Eingaben ab, indem Sie IWMWriter::GetInputCount aufrufen.
  3. Durchlaufen Sie alle Eingaben, wobei Sie jeweils die folgenden Schritte ausführen.

Im folgenden Beispielcode wird der Verbindungsname für jede Eingabe angezeigt. Weitere Informationen zur Verwendung dieses Codes finden Sie unter Verwenden der Codebeispiele.

HRESULT GetNamesForInputs(IWMWriter* pWriter)
{
    DWORD    cInputs  = 0;
    HRESULT  hr       = S_OK;
    WCHAR*   pwszName = NULL;
    WORD     cchName  = 0;

    IWMInputMediaProps* pProps = NULL;

    // Get the total number of inputs for the file.
    hr = pWriter->GetInputCount(&cInputs);
    GOTO_EXIT_IF_FAILED(hr);

    // Loop through all supported inputs.
    for (DWORD inputIndex = 0; inputIndex < cInputs; inputIndex++)
    {
        // Get the input properties for the input.
        hr = pWriter->GetInputProps(inputIndex, &pProps);  
        GOTO_EXIT_IF_FAILED(hr);

        // Get the size of the connection name.
        hr = pProps->GetConnectionName(0, &cchName);
        GOTO_EXIT_IF_FAILED(hr);

        if (cchName > 0)
        {
            // Allocate memory for the connection name.
            pwszName = new WCHAR[cchName];
            if (wszName == NULL)
            {
                hr = E_OUTOFMEMORY;
                goto Exit;
            }

            // Get the connection name.
            hr = pProps->GetConnectionName(pwszName, &cchName);
            GOTO_EXIT_IF_FAILED(hr);
            
            // Display the name.
            printf("Input # %d = %S\n", pwszName);
        } // end if

        // Clean up for next iteration.
        SAFE_ARRAY_DELETE(pwszName);
        SAFE_RELEASE(pProps);
    } // end for inputIndex

Exit:
    SAFE_ARRAY_DELETE(pwszName);
    SAFE_RELEASE(pProps);
    return hr;
}

IWMWriter-Schnittstelle

Schreiben von ASF-Dateien