Condividi tramite


Creazione di un profilo ASF

Questo argomento descrive come creare come profilo ASF in Microsoft Media Foundation.

Creare un nuovo profilo

Per creare un profilo ASF vuoto, chiamare la funzione MFCreateASFProfile . Questa funzione restituisce un puntatore all'interfaccia IMFASFProfile . L'applicazione può usare questa interfaccia per aggiungere flussi al profilo e configurare ognuno dei flussi. Per altre informazioni, vedere Creazione e configurazione di flussi ASF.

Facoltativamente, l'applicazione può aggiungere oggetti di esclusione reciproca a due o più flussi. Vedere Uso dell'esclusione reciproca per i flussi ASF.

Ottenere il profilo dall'oggetto ContentInfo ASF

Un'applicazione può ottenere il profilo ASF di un file ASF esistente dall'oggetto ContentInfo ASF. Il profilo è già configurato e contiene le impostazioni per tutti i flussi nel file.

Inizializzare l'oggetto ContentInfo analizzando l'oggetto intestazione ASF del file. Questa operazione viene eseguita tramite il metodo IMFASFContentInfo::P arseHeader . Dopo che tutti gli oggetti intestazione vengono letti e la libreria ASF viene popolata, viene generato il profilo per questo file. L'applicazione può ottenere un puntatore a questo profilo inizializzato chiamando IMFASFContentInfo::GetProfile.

Ottenere il profilo da un descrittore di presentazione

È possibile ottenere l'oggetto profilo di un file ASF esistente dal descrittore di presentazione per il file o dall'oggetto ContentInfo ASF . In questo caso, il profilo è già configurato e contiene le impostazioni per tutti i flussi nel file. Ciò può essere utile se si desidera modificare un profilo ASF esistente. Ad esempio, potresti voler codificare nuovamente un file Di Windows Media Video a una velocità di bit inferiore.

Per ottenere il profilo dal descrittore di presentazione, chiamare MFCreateASFProfileFromPresentationDescriptor. Questa funzione analizza il descrittore di presentazione e popola un profilo ASF con informazioni sul file multimediale. La funzione restituisce un puntatore all'interfaccia IMFASFProfile. È quindi possibile usare questa interfaccia per modificare il profilo.

Per ottenere il descrittore di presentazione, chiamare uno dei metodi seguenti:

Nell'esempio seguente viene illustrato come creare un profilo da un descrittore di presentazione. La funzione crea un'origine multimediale per il file, ottiene il descrittore di presentazione dall'origine multimediale e crea un profilo. In questo esempio si presuppone che pszFileName specifichi l'URL di un file ASF.

HRESULT GetASFProfile(PCWSTR pszFileName, IMFASFProfile** ppProfile)
{
    *ppProfile = NULL;

    IMFSourceResolver* pResolver = NULL;
    IUnknown* pSourceUnk = NULL;
    IMFMediaSource* pSource = NULL;
    IMFPresentationDescriptor* pPD = NULL;

    // Create the source resolver.
    HRESULT hr = MFCreateSourceResolver(&pResolver);

    // Use the source resolver to create the media source.
    if (SUCCEEDED(hr))
    {
        MF_OBJECT_TYPE ObjectType;

        hr = pResolver->CreateObjectFromURL(
                pszFileName,
                MF_RESOLUTION_MEDIASOURCE, 
                NULL,                      
                &ObjectType,               
                &pSourceUnk   
            );
    }

    // Get the IMFMediaSource interface from the media source.
    if (SUCCEEDED(hr))
    {
        hr = pSourceUnk->QueryInterface(IID_PPV_ARGS(&pSource));
    }

    // Get the presentation descriptor.
    if (SUCCEEDED(hr))
    {
        hr = pSource->CreatePresentationDescriptor(&pPD);
    }

    // Get the profile from the presentation descriptor.
    if (SUCCEEDED(hr))
    {
        hr = MFCreateASFProfileFromPresentationDescriptor(pPD, ppProfile);
    }

    SafeRelease(&pResolver);
    SafeRelease(&pSourceUnk);
    SafeRelease(&pSource);
    SafeRelease(&pPD);
    return hr;
}

Questo esempio usa SafeRelease per rilasciare puntatori all'interfaccia.

Profilo ASF