Share via


Recursos de origem de rede

A fonte de rede fornece a implementação base para arquivos de mídia de streaming e expõe a interface IMFMediaSource . A implementação de fonte de rede específica depende do protocolo usado para abrir a fonte, como RTSP ou HTTP. As fontes de rede específicas do protocolo estendem a funcionalidade básica de rede. Para obter informações sobre os esquemas e protocolos com suporte, consulte Protocolos com suporte.

A origem da rede:

  • Implementa recursos como cache, detecção de proxy e reconexão automática.
  • Converte chamadas independentes de protocolo do resolvedor de origem em chamadas específicas ao protocolo.
  • Interage com a camada de soquete e o sistema operacional. Analisa a descrição do SDP e a usa como dados de configuração e lê dados de fluxo da camada de soquetes subjacente. Ao receber, a fonte de rede é responsável por reordenar e solicitar retransmissões de pacotes.

Criação de fonte de rede

A criação de uma fonte de mídia para uma fonte da rede não é diferente de uma fonte de mídia para um arquivo local. O aplicativo passa a URL da origem para métodos de Resolvedor de Origem, como IMFSourceResolver::CreateObjectFromURL ou IMFSourceResolver::BeginCreateObjectFromURL e especifica o sinalizador MF_RESOLUTION_MEDIASOURCE. Para obter mais informações sobre como usar esse sinalizador, consulte Usando o Resolvedor de Origem.

Dependendo do esquema fornecido pelo aplicativo, o resolvedor de origem carrega o objeto apropriado do manipulador de esquema, que expõe a interface IMFSchemeHandler . O aplicativo também pode usar o manipulador de esquema diretamente para criar a fonte de rede chamando IMFSchemeHandler::BeginCreateObject.

Para obter mais informações, consulte Manipuladores de esquema e manipuladores de Byte-Stream.

O Media Foundation não dá suporte a fluxos de bytes para fontes de rede. O objeto de fluxo de bytes só tem suporte no cenário de conteúdo 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. Nesse caso, o protocolo de download HTTP é usado.

Se o aplicativo solicitar que o resolvedor de origem crie um objeto de fluxo de bytes para esquemas "http:", "mms:" ou "rtsp:", a chamada falhará com o erro MF_E_UNSUPPORTED_SCHEME.

Observação

No Windows 7, a fonte de rede dá suporte a arquivos do Windows Media Station (. NSC). Esses arquivos são usados no streaming multicast de conteúdo de mídia em uma rede. Para criar a fonte de rede para um especificado. Arquivo NSC, o aplicativo deve usar o resolvedor de origem.

 

Se o aplicativo estiver usando o manipulador de esquema, a chamada assíncrona ignorará o parâmetro dwFlags e retornará um ponteiro para a fonte de rede após a conclusão.

A ilustração a seguir mostra o fluxo de dados para streaming de mídia usando a fonte de rede.

fluxograma mostrando caminhos do aplicativo para o servidor de streaming, com um loop entre a origem da rede e a sessão de mídia

Configuração da origem da rede

Este tópico descreve os recursos compatíveis com a origem da rede e as opções de configuração associadas. Um aplicativo pode configurar a fonte de rede ao criar o objeto de origem de rede. Essas opções são armazenadas em um objeto IPropertyStore , que o aplicativo deve passar no parâmetro pProps dos métodos de resolvedor de origem ou IMFSchemeHandler::BeginCreateObject.

Reconexão automática

O recurso de reconexão automática da fonte de rede permite que um cliente se reconecte ao servidor de mídia automaticamente quando a conexão TCP com o servidor falha ou o cliente não recebe pacotes. Quando a conexão falha, a fonte de rede tenta se reconectar ao servidor de mídia usando a mesma configuração usada na conexão anterior. O processo de reconexão é assíncrono. A fonte de rede gera o evento MEReconnectStart quando inicia a reconexão e o evento MEReconnectEnd quando a reconexão é bem-sucedida ou falha.

Se o número de tentativas de reconexão exceder o valor máximo especificado pela propriedade MFNETSOURCE_AUTORECONNECTLIMIT , a operação de reconexão será cancelada. O número de tentativas de reconexão é armazenado na propriedade MFNETSOURCE_AUTORECONNECTPROGRESS .

A reconexão automática permite a reprodução suave do conteúdo de mídia mesmo quando a conexão TCP com o servidor de mídia falha. Para uma experiência de reprodução suave, o cliente deve ter dados suficientes, pelo menos de 1 a 2 minutos, em seu cache para continuar a reprodução até a reconexão. A quantidade máxima de dados que a fonte de rede pode armazenar em buffer pode ser definida na propriedade MFNETSOURCE_MAXBUFFERTIMEMS .

Streaming Rápido

O cliente de origem de rede solicita que o servidor transmita alguns dos dados no início do conteúdo a uma taxa mais rápida do que a especificada pela taxa de bits do conteúdo. Se a Inicialização Rápida estiver habilitada no servidor, o servidor enviará um fluxo de taxa de bits acelerada para que o cliente possa armazenar em buffer uma quantidade suficiente de dados mais rápido do que em tempo real. Isso melhora a experiência do usuário minimizando os atrasos iniciais de buffer, que podem ser causados por vários fatores, como baixa velocidade do computador cliente ou da rede e largura de banda disponível.

Para especificar a quantidade de dados de streaming rápido que o cliente pode solicitar, defina a propriedade MFNETSOURCE_ACCELERATEDSTREAMINGDURATION . Se a fonte de rede estiver usando UDP como o protocolo de transporte, especifique a quantidade máxima de dados de streaming rápido definindo a propriedade MFNETSOURCE_MAXUDPACCELERATEDSTREAMINGDURATION .

O streaming rápido no cliente também é possível por meio do recurso Cache Rápido – streaming de conteúdo sob demanda mais rápido do que em tempo real e armazenamento em cache de dados no cache local do cliente. Para usar esse tipo de streaming rápido, o Cache Rápido deve ser habilitado na origem da rede e o servidor deve dar suporte a ele. Quando o cliente solicita conteúdo do servidor, a fonte de rede primeiro verifica se o conteúdo já está no cache do cliente. Se o conteúdo estiver no cache local do cliente e não tiver expirado, ele será renderizado. Se o conteúdo não estiver no cache local ou já tiver expirado, o conteúdo será transmitido e armazenado em cache e a origem da rede o reproduzirá do cache local. Nas solicitações subsequentes, para playlists, somente as entradas ausentes são armazenadas em cache e reproduzidas. Se uma entrada de playlist já estiver no cache local do cliente, ela será reproduzida a partir daí e não será armazenada em cache novamente.

Por padrão, o Cache Rápido está habilitado no cliente de origem de rede. No entanto, os seguintes fatores também determinam se o recurso é usado:

  • O cliente deve ter largura de banda extra disponível para baixar e armazenar o conteúdo em cache mais rapidamente do que a velocidade normal.
  • O cliente deve ter espaço em disco suficiente. Se o cliente tiver menos de 100 MB de espaço livre em disco depois de armazenar em cache o conteúdo sob demanda solicitado, ele não será armazenado em cache, mas será transmitido e renderizado simultaneamente.

O recurso Cache Rápido é controlado pela propriedade MFNETSOURCE_CACHEENABLED .

Gerenciamento de buffer

A fonte de rede fornece um gerenciamento de buffer eficiente que monitora o estado do buffer no cliente. Por padrão, a fonte de rede armazena 5 segundos de dados na inicialização. Esse valor pode ser configurado definindo a propriedade MFNETSOURCE_BUFFERINGTIME . Com base nesse valor de propriedade, a fonte de rede calcula o tamanho do buffer suficiente para garantir a reprodução suave e ininterrupta do conteúdo de mídia. Se essa propriedade estiver definida como 0, o gerenciamento de buffers será desabilitado. Quando a quantidade de conteúdo no buffer é baixa, a fonte de rede inicia o buffer e aciona o evento MEBufferingStarted para indicar que o buffer foi iniciado. Ao receber esse evento, o pipeline interrompe a renderização. Quando o buffer é concluído, a fonte de rede aciona o evento MEBufferingStopped e o cliente pode começar a renderizar novamente.

O cliente começa a renderizar o conteúdo depois de acumular a quantidade de dados indicada pelo tamanho do buffer do primeiro exemplo. Se esse valor for menor que o tamanho do buffer calculado, a reprodução será iniciada imediatamente. Esse comportamento é muito semelhante ao recurso Inicialização Rápida.

A propriedade MFNETSOURCE_MAXBUFFERTIMEMS armazena a quantidade máxima de dados que podem ser armazenados em buffer.

Seleção de largura de banda

Quando um cliente se conecta ao servidor de mídia, como parte da configuração da conexão, a fonte de rede executa a medida de par de pacotes estáticos para estimar a largura de banda do link inicial entre o cliente e o servidor. Com base no resultado dessa medida, o cliente pode selecionar fluxos de áudio e vídeo que se encaixam na largura de banda estimada. Isso garante uma reprodução suave do conteúdo de mídia de streaming.

Durante o estágio de Inicialização Rápida, a medida de par de pacotes dinâmicos é executada. Nesse processo, o cliente recebe grandes quantidades de dados, que podem ser vários pacotes ou exemplos.

O resultado da medição dinâmica de par de pacotes é mais preciso do que a estimativa de largura de banda de link retornada pela medida de par de pacotes estáticos porque o processo de par de pacotes estático envia um único pacote de tamanho fixo, o que pode não produzir resultados precisos para redes de alta largura de banda.

O aplicativo pode obter a largura de banda estimada usando a propriedade MFNETSOURCE_PPBANDWIDTH .

As condições de rede podem mudar dinamicamente, causando falhas na reprodução da origem da rede. A fonte de rede pode alterar a seleção de fluxo inicial do cliente com base na taxa de recebimento e no estado do buffer. Por exemplo, o cliente pode mudar para uma taxa de bits mais baixa durante o congestionamento de rede e voltar para uma taxa de bits mais alta quando o tráfego de rede for melhorado e o cliente tiver acumulado uma quantidade suficiente de conteúdo armazenado em buffer.

Rede na Media Foundation