Condividi tramite


Per identificare gli input per numero

[La funzionalità associata a questa pagina, Windows Media Format 11 SDK, è una funzionalità legacy. È stata sostituita dal lettore di origine e dal writer sink. Lettore di origine e writer sink sono stati ottimizzati per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi lettore di origine e writer sink anziché Windows Media Format 11 SDK, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Ogni esempio passato al writer deve essere associato a un numero di input. Ogni numero di input corrisponde a uno o più flussi nel profilo usato dal writer per scrivere il file. In un profilo le origini multimediali sono identificate da un nome di connessione. Il writer associa un numero di input a ogni nome di connessione quando si imposta il profilo per il writer. Prima di poter passare campioni al writer, è necessario determinare i dati previsti da ogni input. Non è possibile presupporre che gli input siano nello stesso ordine dei flussi in un profilo, anche se questo accade spesso. Di conseguenza, l'unico modo affidabile per trovare la corrispondenza con gli input con i flussi consiste nel confrontare il nome della connessione dell'input con il nome di connessione del flusso.

Per identificare i nomi di connessione e i numeri di input corrispondenti per un profilo caricato, seguire questa procedura:

  1. Creare un oggetto writer e impostare un profilo da usare. Per altre informazioni sull'impostazione dei profili nel writer, vedere To Use Profiles with the Writer.For more information about setting profiles in the writer, see To Use Profiles with the Writer. È necessario conoscere i nomi di connessione usati per i flussi nel profilo. È possibile ottenere il nome della connessione dall'interno del profilo ottenendo l'oggetto di configurazione del flusso per ogni flusso e chiamando IWMStreamConfig::GetConnectionName. Per altre informazioni sui profili e sugli oggetti di configurazione del flusso, vedere Utilizzo dei profili.
  2. Recuperare il numero totale di input chiamando IWMWriter::GetInputCount.
  3. Scorrere tutti gli input eseguendo i passaggi seguenti per ognuno di essi.

Nel codice di esempio seguente viene visualizzato il nome della connessione per ogni input. Per altre informazioni sull'uso di questo codice, vedere Uso degli esempi di codice.

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

Interfaccia IWMWriter

Scrittura di file ASF