Compartilhar via


Reproduzir arquivos de uma fonte de rede

[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.]

A leitura de uma rede não é fundamentalmente diferente da leitura de um arquivo local. O aplicativo passa a URL para o método IWMReader::Open do objeto leitor e o objeto leitor manipula os detalhes dos protocolos de rede. O objeto leitor usa o gerenciamento de buffer inteligente para fornecer a reprodução mais suave possível. Se o aplicativo precisar de mais controle sobre as configurações de rede do objeto leitor, elas estarão disponíveis por meio das interfaces IWMReaderNetworkConfig e IWMReaderNetworkConfig2 .

O conteúdo de uma fonte de rede se enquadra em uma das duas seguintes categorias:

  • Streaming. Os dados são transmitidos bem a tempo de serem reproduzidos no computador local. Os servidores que executam os Serviços de Mídia do Windows podem fornecer dados de streaming. Se o conteúdo MBR (taxa de vários bits) for transmitido, o cliente poderá solicitar uma taxa de bits diferente do servidor à medida que o streaming avança.
  • Baixado. Todos os dados são transmitidos o mais rápido possível para que possam ser salvos como um arquivo no computador local. Os servidores Web fornecem dados baixados. Não há comunicação do cliente com o servidor após o início do download.

Quando o objeto leitor baixa um arquivo de um servidor Web, ele usa uma técnica chamada streaming progressivo, que permite que um player comece a renderizar o conteúdo antes que o download seja concluído. Os dados são armazenados em buffer para fornecer um fluxo ininterrupto de dados para o player. Informações como a taxa de transferência e a duração do conteúdo são usadas para determinar quanto tempo armazenar os dados em buffer antes de dar ao player.

Para abrir um arquivo ou fluxo em uma rede, chame o método IWMReader::Open do objeto leitor com a URL apropriada. Abrir é uma chamada assíncrona, portanto, ela retorna imediatamente. Quando a origem está pronta para leitura, o objeto leitor envia uma notificação de WMT_OPENED para o método de retorno de chamada IWMStatusCallback::OnStatus do aplicativo. Neste ponto, o aplicativo pode consultar o leitor para o modo de entrega chamando IWMReaderAdvanced2::GetPlayMode. Para conteúdo de rede, esse método retornará WMT_PLAY_MODE_DOWNLOAD, indicando conteúdo baixado ou WMT_PLAY_MODE_STREAMING, indicando conteúdo transmitido.

Para começar a ler o arquivo ou fluxo, chame o método IWMReader::Start . O leitor envia uma notificação WMT_BUFFERING_START quando começa a armazenar em buffer o conteúdo e uma notificação de WMT_BUFFERING_STOP quando o buffer é concluído. Enquanto o leitor estiver armazenando conteúdo em buffer (ou seja, entre essas duas notificações), talvez você queira exibir o progresso do buffer para o usuário. O método IWMReaderAdvanced2::GetBufferProgress retorna a porcentagem de dados que foram armazenados em buffer e o tempo estimado restante. Para conteúdo baixado, você também pode chamar IWMReaderAdvanced2::GetDownloadProgress para obter o progresso do download. Chame esses métodos repetidamente para atualizar a exibição até que o buffer seja concluído. O buffer pode ocorrer novamente durante a reprodução, devido a fatores como congestionamento de rede. Se isso ocorrer, o aplicativo receberá outra notificação WMT_BUFFERING_START.

Quando o objeto leitor começa a reproduzir o conteúdo, ele envia uma notificação WMT_STARTED. À medida que cada exemplo é decodificado e fica disponível para renderização, o leitor o passa para o aplicativo por meio do método de retorno de chamada IWMReaderCallback::OnSample . Neste ponto, o processo é o mesmo que é para a reprodução de arquivo local. Quando a reprodução é interrompida, o leitor envia uma notificação de WMT_END_OF_STREAMING.

Lendo arquivos ASF