Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O objeto divisor ASF é um objeto da camada WMContainer que analisa o Objeto de Dados ASF de um ficheiro no Formato de Sistemas Avançados (ASF). Depois que o divisor é criado e inicializado para analisar o objeto de dados ASF de um arquivo de mídia, o divisor deve ser configurado para gerar amostras para fluxos específicos. Ligue IMFASFSplitter::SelectStreams para selecionar os fluxos necessários.
Opcionalmente, um aplicativo também pode configurá-lo para gerar amostras em ordem inversa ou gerar amostras para conteúdo protegido. Para definir essas opções, chame IMFASFSplitter::SetFlags e passe a combinação necessária, bit a bit, dos sinalizadores suportados. Antes de chamar este método, o cliente deve concluir a chamada IMFASFSplitter::Initialize com êxito; caso contrário, falhará o SetFlags com o código de erro MF_E_NOT_INITIALIZED. Para obter informações sobre como inicializar o divisor, consulte Criando o objeto divisor ASF.
Para verificar se esse sinalizador está definido no momento no divisor, chame IMFASFSplitter::GetFlags.
Seleção de fluxos para análise
Durante o processo de inicialização, através da chamada IMFASFSplitter::Initialize, o divisor deteta o número de fluxos e os identificadores de fluxo no arquivo ASF. Por defeito, nenhum fluxo é selecionado pelo divisor. O aplicativo deve selecionar os fluxos chamando IMFASFSplitter::SelectStreams. Este método usa uma matriz de números de fluxo. Para obter o número de fluxo para um fluxo, chame IMFASFProfile::GetStream no perfil ASF ou chame IMFStreamDescriptor::GetStreamIdentifier no descritor de fluxo. (Você pode obter o perfil ASF e o descritor de fluxo do objeto ContentInfo.) Se o cliente passar um número de fluxo que não é reconhecido pelo divisor, ele falhará com um erro de MF_E_INVALIDSTREAMNUMBER.
Chamar SelectStreams limpa as seleções anteriores. Qualquer fluxo que não seja especificado na matriz não é selecionado. Para obter uma lista de fluxos atualmente selecionados, ligue IMFASFSplitter::GetSelectedStreams. Esse método leva um ponteiro para uma matriz, que o método preenche com os números de fluxo. Se o tamanho da matriz for menor que o número de fluxos selecionados, o método falhará com o erro MF_E_BUFFERTOOSMALL. Nesse caso, o método retorna o número de fluxos selecionados no pwNumStreams parâmetro. Em seguida, você pode usar esse número para alocar uma matriz do tamanho correto e chamar o método novamente.
Para obter um código de exemplo, consulte "Select a Stream for Parsing" em Tutorial: Reading an ASF File.
Configuração de reprodução inversa
Durante o processo de inicialização do divisor, ele determina se o conteúdo ASF suporta reprodução reversa. Se isso acontecer, o divisor pode ser configurado para gerar amostras em ordem inversa, definindo o sinalizador MFASF_SPLITTER_REVERSE. Se o conteúdo não suportar reprodução inversa, o IMFASFSplitter::SetFlags retorna MF_E_INVALIDREQUEST, mas o sinalizador já está definido no divisor.
Se o divisor estiver configurado para analisar na direção inversa, o divisor sempre começará a analisar no final do buffer que contém o objeto de dados ASF. Portanto, para a análise inversa, o deslocamento de dados e o comprimento dos dados a serem analisados devem ser definidos adequadamente. Para obter informações sobre como definir os valores corretos, consulte Gerando amostras de fluxo de um objeto de dados ASF existente.
Configuração de conteúdo protegido
O divisor pode ser configurado para trabalhar com conteúdo de criptografia ao nível de pacote definindo o MFASF_SPLITTER_WMDRM através do IMFASFSplitter::SetFlags. Isso instrui o divisor a fornecer exemplos de conteúdo protegido pelo DRM (Gerenciamento de Direitos Digitais) do Windows Media. Quando esta bandeira é definida, as amostras geradas pelo divisor contêm as informações necessárias para desencriptar os dados multimédia e reconstruir os quadros, como o atributo MFSampleExtension_PacketCrossOffsets. Este atributo é um blob que contém uma matriz de DWORDs. Cada DWORD fornece os limites da carga útil para o quadro em relação ao início do quadro. Se este atributo não estiver presente, o quadro estará contido num único pacote. Normalmente, as amostras geradas pelo divisor contêm vários buffers de mídia, o aplicativo pode copiar todos os buffers em um buffer contíguo chamando IMFSample::ConvertToContiguousBuffer. O buffer resultante contém o quadro e o valor do atributo contém deslocamentos nesse buffer.
Tópicos relacionados