Tipos de extensão de exemplo

[O recurso associado a esta página, Windows Media Format 11 SDK, é um recurso herdado. Ele foi substituído por Leitor de Origem e Gravador de Coletor. O Leitor de Origem e o Gravador de Coletor foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use o Leitor de Origem e o Gravador de Coletor em vez do SDK do Windows Media Format 11, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Extensões de exemplo, também chamadas de DUEs (extensões de unidade de dados) ou propriedades de buffer, são itens de dados anexados aos exemplos de mídia na seção de dados do arquivo ASF. Vários tipos de extensões de exemplo são definidos no SDK de Formato de Mídia do Windows. Você também pode criar seus próprios tipos de extensão.

Para usar extensões de exemplo, você deve identificar o tipo de extensão nos dados de configuração de fluxo do perfil. Chame o método IWMStreamConfig2::AddDataUnitExtension para configurar um fluxo para aceitar amostras com dados estendidos.

Extensões de exemplo individuais devem ser adicionadas aos exemplos de entrada chamando o método INSSBuffer3::SetProperty . Ao ler exemplos, você pode chamar o método INSSBuffer3::GetProperty para recuperar os dados da extensão. Você também pode usar os métodos da interface INSSBuffer4 para enumerar as extensões de unidade de dados anexadas a um exemplo.

A tabela a seguir lista os identificadores de extensão de unidade de dados predefinidos e descreve os dados anexados a exemplos para cada um.

GUID de extensão de exemplo Descrição
WM_SampleExtensionGUID_OutputCleanPoint Os dados indicam se o exemplo é um ponto de limpeza. Um valor zero indica que o exemplo não é um ponto de limpeza. Um valor diferente de zero indica que ele é um ponto de limpeza. Esse tipo de extensão de unidade de dados de exemplo (DUE) é usado para controlar pontos limpos ao gravar fluxos de mídia pré-compactados que foram codificados com codecs de terceiros.
WM_SampleExtensionGUID_Timecode Os dados são uma estrutura WMT_TIMECODE_EXTENSION_DATA que contém dados de código de tempo SMPTE associados à amostra. O tamanho desse DUE é sempre WM_SampleExtension_Timecode_Size, que é de 14 bytes.
WM_SampleExtensionGUID_FileName Esse tipo de extensão de exemplo é usado para fluxos de arquivos. Os dados em um exemplo de fluxo de arquivo são uma parte de um arquivo de dados. Os dados na extensão de exemplo especificam o nome do arquivo do qual o conteúdo na amostra foi obtido. O nome do arquivo é uma cadeia de caracteres largos que contém o nome do arquivo no formato name.extension sem nenhuma informação de caminho.
WM_SampleExtensionGUID_ContentType Os dados identificam o tipo de conteúdo que o exemplo contém. Esse tipo de extensão de exemplo é usado com fluxos de vídeo entrelaçados. Todo o conteúdo entrelaçado usa o sinalizador WM_CT_INTERLACED combinado por um OR bit a bit com WM_CT_BOTTOM_FIELD_FIRST, WM_CT_TOP_FIELD_FIRST ou WM_CT_REPEAT_FIRST_FIELD.
A ordem de campo não é usada no processo de codificação, mas é mantida com os exemplos compactados para que possa ser passada para o hardware de renderização. Reproduzir conteúdo entrelaçado com a ordem de campo incorreta introduz artefatos como tremulação de movimento no vídeo.
O tamanho desse DUE é sempre WM_SampleExtension_ContentType_Size.
WM_SampleExtensionGUID_PixelAspectRatio Os dados indicam a taxa de proporção de pixel do conteúdo no exemplo. Isso se aplica somente ao vídeo. Esse tipo de extensão é usado para identificar a taxa de proporção de pixels não quadrados. Para obter mais informações, consulte Para ler e gravar fluxos de vídeo com pixels não quadrados.
Os valores de taxa de proporção são armazenados como uma palavra cujo byte baixo é o aspecto X e cujo byte alto é o aspecto Y. Por exemplo, 16:9 é armazenado como 0x0910.
O tamanho desse DUE é sempre WM_SampleExtension_PixelAspectRatio_Size, que é de 2 bytes.
WM_SampleExtensionGUID_SampleDuration Os dados indicam a duração, em milissegundos, do exemplo contido no objeto buffer. Na reprodução, se esse DUE for definido, o objeto leitor o usará para substituir o valor de duração da amostra existente. Esse DUE é definido automaticamente pelos componentes de tempo de execução do SDK em fluxos de vídeo com taxas de bits de 100 kbps ou superiores, em que a sobrecarga das informações DUE não é significativa. Ele não é definido para fluxos com taxas de bit abaixo de 100 kbps. Os aplicativos não devem definir esse DUE manualmente porque o gravador (em fluxos de alta taxa de bits) substituirá o valor por seus próprios dados.
O tamanho desse DUE é sempre WM_SampleExtension_SampleDuration_Size, que é de 2 bytes.
WM_SampleExtensionGUID_ChromaLocation Os dados indicam o tipo de subampling chroma usado no formato de vídeo I420. O valor dessa extensão é definido como um dos seguintes valores:
  • WM_CL_INTERLACED420
  • WM_CL_PROGRESSIVE420
Essa extensão de unidade de dados não está configurada no perfil. Ele está incluído na saída de exemplos do decodificador.
O tamanho desse DUE é sempre WM_SampleExtension_ChromaLocation_Size, que é de 1 byte.
WM_SampleExtensionGUID_ColorSpaceInfo Os dados fornecem informações sobre o espaço de cor usado para o quadro de vídeo atual. O valor dessa extensão é uma estrutura WMT_COLORSPACEINFO_EXTENSION_DATA .
Essa extensão de unidade de dados não está configurada no perfil. Ele está incluído na saída de exemplos do decodificador.
O tamanho desse DUE é sempre WM_SampleExtension_ColorSpaceInfo_Size, que é de 3 bytes.
WM_SampleExtensionGUID_UserDataInfo Os dados são dados personalizados do usuário. Os quatro primeiros bytes dos dados contêm o tamanho dos dados personalizados.
O próximo byte contém o tipo de dados de usuário fornecidos na extensão de exemplo. Os seguintes tipos têm suporte:
  • 0x1F – Dados do usuário em nível de sequência
  • 0x1E – Dados do usuário de nível de ponto de entrada
  • 0x1D – Dados do usuário no nível do quadro
  • 0x1C – Dados do usuário no nível do campo
  • 0x1B - Dados de usuário de nível de fatia
O sexto e os bytes subsequentes contêm os dados do usuário. Há tantos bytes de dados do usuário quanto especificados pelo número nos quatro primeiros bytes.
Essa extensão de unidade de dados não está configurada no perfil. Ele está incluído em exemplos que são saída do decodificador.
WM_SampleExtensionGUID_SampleProtectionSalt Os dados são criptografados por exemplo. Esse tipo de extensão de exemplo é usado para conteúdo importado de um formato de arquivo não ASF e um esquema de proteção de direitos diferente do DRM do Windows Media. Ao importar conteúdo protegido, cada amostra deve incluir um sal exclusivo. Normalmente, esse valor é um contador de aumento monotonicamente.

Referência de programação