Поделиться через


атрибут MFSampleExtension_Encryption_ProtectionScheme

Указывает схему защиты для зашифрованных примеров.

Тип данных

UINT32

Комментарии

Значение этого атрибута является членом перечисления MFSampleEncryptionProtectionScheme . В случаях, когда источник мультимедиа основан на MP4, значение задается на основе значения поля scheme_type в поле типа схемы (schm) в заголовке MP4 (moov или moof).

Если для поля scheme_type в mp4-файле или потоке задано значение cenc или cbc1, то атрибуту MFSampleExtension_Encryption_ProtectionScheme должно быть присвоено значение PROTECTION_SCHEME_AES_CTR или PROTECTION_SCHEME_CBC соответственно, и значения для MFSampleExtension_Encryption_CryptByteBlock и MFSampleExtension_Encryption_SkipByteBlock не следует задавать.

Если для поля scheme_type в mp4-файле или потоке задано значение "cens" или "cbcs", то для атрибута MFSampleExtension_Encryption_ProtectionScheme следует задать значение PROTECTION_SCHEME_AES_CTR или PROTECTION_SCHEME_CBC соответственно, а MFSampleExtension_Encryption_CryptByteBlock и MFSampleExtension_Encryption_SkipByteBlock следует задать с помощью значений в поле "tenc".

Примеры

В следующем примере показано, как задать MFSampleExtension_Encryption_ProtectionScheme и связанные атрибуты MFSampleExtension_Encryption_CryptByteBlock и MFSampleExtension_Encryption_SkipByteBlock .

HRESULT AddEncryptionAttributes(_In_ IMFSample* pSample, _In_ bool fIsEncrypted)
{
      HRESULT hr = S_OK;

      if (fIsEncrypted)
    {
        //Set Encryption Protection Scheme
        hr = pSample->UINT32(MFSampleExtension_Encryption_ProtectionScheme,
            SAMPLE_ENCRYPTION_PROTECTION_SCHEME_AES_CBC);
            if (FAILED(hr))
                return hr;

        //Set the Initialization Vector (IV)
  //(spSampleEncryptionData is omitted from this example for simplicity.) 
        hr = pSample->SetBlob(MFSampleExtension_Encryption_SampleID, 
            (BYTE*)(spSampleEncryptionData->m_pInitializationVector),
            spSampleEncryptionData->m_bIVSize);
            if (FAILED(hr))
                return hr;

        //Set crypt and skip byte blocks for pattern encryption
        hr = pSample->SetUINT32(MFSampleExtension_Encryption_CryptByteBlock, 1);
            if (FAILED(hr))
                return hr;

        hr = pSample->SetUINT32(MFSampleExtension_Encryption_SkipByteBlock, 9);
            if (FAILED(hr))
                return hr;
    }
      return hr;
}

Требования

Требование Значение
Минимальная версия клиента
Windows 10 версии 1709 [только классические приложения]
Минимальная версия сервера
Ни одна версия не поддерживается
Заголовок
Mfidl.h