Condividi tramite


Per identificare gli input per numero

[La funzionalità associata a questa pagina, Windows Media Format 11 SDK, è una funzionalità legacy. È stata sostituita da Source Reader e Sink Writer. Source Reader e Sink Writer sono stati ottimizzati per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice utilizzi Source Reader e Sink Writer invece di 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. Lo scrittore associa un numero dell'input a ogni nome di connessione quando imposti il profilo per lo scrittore. 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 è spesso il caso. Di conseguenza, l'unico modo affidabile per trovare la corrispondenza tra gli input e 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 ulteriori informazioni sull'impostazione dei profili nel Writer, vedere 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 recuperando 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 Uso 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 Using the Code Examples.

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