Konfigurieren der Standard-, Professional- oder Verlustlosen Audiocodierung

Wenn der Windows Media Audio-Encoder Ausgabetypen aufzählt, identifiziert er jeden aufgezählten Typ entweder als Standard, Professional oder Lossless. Sie können ermitteln, ob ein Ausgabetyp Standard, Professional oder Lossless ist, indem Sie die folgenden Schritte ausführen.

  1. Rufen Sie IMFTransform::GetOutputAvailableType auf, um eine IMFMediaType-Schnittstelle abzurufen, die den Ausgabetyp darstellt.
  2. Rufen Sie IMFMediaType::GetRepresentation auf, um eine AM_MEDIA_TYPE-Struktur abzurufen, die Informationen zum Ausgabetyp enthält.
  3. Der pbFormat-Member der AM_MEDIA_TYPE-Struktur verweist auf eine WAVEFORMATEX-Struktur , die zusätzliche Informationen zum Ausgabetyp enthält. Untersuchen Sie den wFormatTag-Member der WAVEFORMATEX-Struktur . Der Wert 0x161 gibt Standard an, der Wert 0x162 professional und der Wert 0x163 lossless.

Wenn Sie Eigenschaften für den Windows Media Audio-Encoder festlegen, bevor Sie Ausgabetypen auflisten, können Sie die Anzahl der Ausgabetypen einschränken, die aufgezählt werden. Wenn Sie z. B. die VBR-Eigenschaften entsprechend festlegen, können Sie die aufgezählten Ausgabetypen auf diejenigen beschränken, die sich in der Kategorie Verlustlos befinden.

Standard-Audiocodierung

Sie können die folgenden Schritte ausführen, um die Standard-Audiocodierung zu konfigurieren.

  1. Legen Sie die Eigenschaften Ihrer Wahl für den Encoder fest.
  2. Listet die möglichen Ausgabetypen auf.
  3. Überprüfen Sie die aufgezählten Typen, und wählen Sie einen aus, der das Audioformattag 0x161 hat.
  4. Legen Sie den Ausgabetyp auf den ausgewählten Typ fest, indem Sie IMFTransform::SetOutputType aufrufen.

Professionelle Audiocodierung

Sie können die folgenden Schritte ausführen, um die Professionelle Audiocodierung zu konfigurieren.

  1. Legen Sie die Eigenschaften Ihrer Wahl für den Encoder fest.
  2. Listet die möglichen Ausgabetypen auf.
  3. Überprüfen Sie die aufgelisteten Typen, und wählen Sie einen aus, der das Audioformattag 0x162 hat.
  4. Legen Sie den Ausgabetyp auf den ausgewählten Typ fest, indem Sie IMFTransform::SetOutputType aufrufen.

Verlustfreie Audiocodierung

Sie können die folgenden Schritte ausführen, um die verlustfreie Audiocodierung zu konfigurieren.

  1. Legen Sie die eigenschaft MFPKEY_VBRENABLED auf VARIANT_TRUE fest.
  2. Legen Sie die eigenschaft MFPKEY_CONSTRAIN_ENUMERATED_VBRQUALITY auf VARIANT_TRUE fest.
  3. Legen Sie die eigenschaft MFPKEY_DESIRED_VBRQUALITY auf 100 fest.
  4. Auflisten von Ausgabetypen.
  5. Legen Sie den Ausgabetyp auf einen der in Schritt 4 aufgelisteten Typen fest, indem Sie IMFTransform::SetOutputType aufrufen.

Der folgende Code listet alle verlustfreien Ausgabetypen für den Windows Media Audio-Encoder auf. Der Code gibt den Wert des Audioformattags für jeden aufgezählten Typ aus. Da alle aufgezählten Typen verlustfrei sind, weisen alle diese Formattags den Wert 0x163 auf. Angenommen, pIMT ist ein Zeiger auf eine IMFTransform-Schnittstelle in einem Windows Media Audio-Encoderobjekt und dass pStore ein Zeiger auf eine IPropertyStore-Schnittstelle im selben Objekt ist. Nehmen Sie außerdem an, dass hr eine Variable vom Typ HRESULT ist, die zuvor im Code deklariert wurde.

PROPVARIANT prop;
prop.vt = VT_BOOL;
prop.boolVal = VARIANT_TRUE;
hr = pStore->SetValue(MFPKEY_VBRENABLED, prop);

if(SUCCEEDED(hr))
{
   hr = pStore->SetValue(MFPKEY_CONSTRAIN_ENUMERATED_VBRQUALITY, prop);

   if(SUCCEEDED(hr))
   {
      prop.vt = VT_UI4;
      prop.ulVal = 100;
      hr = pStore->SetValue(MFPKEY_DESIRED_VBRQUALITY, prop);
      
      if(SUCCEEDED(hr))
      {           
         HRESULT hrAvailableType = S_OK;
         LONG j = 0;
         while(MF_E_NO_MORE_TYPES != hrAvailableType)
         {
            IMFMediaType* pOutputType = NULL;     
            hrAvailableType = pIMFT->GetOutputAvailableType(
               0, j, &pOutputType);

            if(SUCCEEDED(hrAvailableType))
            {
               AM_MEDIA_TYPE* pTypeRep = NULL;
               hr = pOutputType->GetRepresentation(
                  AM_MEDIA_TYPE_REPRESENTATION, (VOID**)&pTypeRep); 
                     
               if(SUCCEEDED(hr))
               {
                  WAVEFORMATEX* pwfex = (WAVEFORMATEX*)pTypeRep->pbFormat;
                  printf_s("%x\n", pwfex->wFormatTag);
                  pOutputType->FreeRepresentation(
                     AM_MEDIA_TYPE_REPRESENTATION, (VOID*)pTypeRep);
               }

               pOutputType->Release();
               ++j;
            }                                                                  
         } // while                 
      }                                
   } 
}

Konfigurieren der Audiocodierung