Invoer identificeren op getal

[De functie die is gekoppeld aan deze pagina, Windows Media Format 11 SDK, is een verouderde functie. Het is vervangen door Source Reader en Sink Writer. Bronlezer en Sink Writer zijn geoptimaliseerd voor Windows 10 en Windows 11. Microsoft raadt ten zeerste aan om nieuwe code te gebruiken bronlezer en Sink Writer- in plaats van Windows Media Format 11 SDK, indien mogelijk. Microsoft stelt voor dat bestaande code die gebruikmaakt van de verouderde API's, indien mogelijk opnieuw worden geschreven om de nieuwe API's te gebruiken.]

Elk voorbeeld dat u aan de schrijver doorgeeft, moet zijn gekoppeld aan een invoernummer. Elk invoernummer komt overeen met een of meer streams in het profiel dat de schrijver gebruikt om het bestand te schrijven. In een profiel worden mediabronnen geïdentificeerd door een verbindingsnaam. De schrijver koppelt een invoernummer aan elke verbindingsnaam wanneer u het profiel voor de schrijver instelt. Voordat u voorbeelden aan de schrijver kunt doorgeven, moet u bepalen welke gegevens elke invoer verwacht. U kunt niet aannemen dat de invoer zich in dezelfde volgorde bevindt als de streams in een profiel, zelfs als dit vaak het geval is. Daarom is de enige betrouwbare manier om invoer met streams te vergelijken met de verbindingsnaam van de invoer met de verbindingsnaam van de stream.

Voer de volgende stappen uit om de verbindingsnamen en bijbehorende invoernummers voor een geladen profiel te identificeren:

  1. Maak een writer-object en stel een profiel in dat moet worden gebruikt. Zie Profielen gebruiken met de schrijvervoor meer informatie over het instellen van profielen in de schrijver. U moet de verbindingsnamen kennen die worden gebruikt voor de streams in het profiel. U kunt de verbindingsnaam ophalen vanuit het profiel door het streamconfiguratieobject voor elke stream op te halen en IWMStreamConfig::GetConnectionNameaan te roepen. Zie Werken met profielenvoor meer informatie over profielen en stroomconfiguratieobjecten.
  2. Haal het totale aantal invoer op door IWMWriter::GetInputCountaan te roepen.
  3. Doorloop alle invoergegevens en voert de volgende stappen voor elk item uit.

In de volgende voorbeeldcode wordt de verbindingsnaam voor elke invoer weergegeven. Voor meer informatie over het gebruik van deze code, zie De codevoorbeelden gebruiken.

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 Interface

ASF-bestanden schrijven