Compartilhar 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 interfaceIMFMediaSource. 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 do 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 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 o 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á nenhuma 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 o resolvedor de origem para criar um objeto de fluxo de bytes para esquemas "http:", "mms:" ou "rtsp:", a chamada falhará com o erro MF_E_UNSUPPORTED_SCHEME.

Nota

No Windows 7, a fonte de rede dá suporte a arquivos da Estação de Mídia do Windows (. NSC). Esses arquivos são usados no streaming multicast de conteúdo de mídia em uma rede. Para criar a origem da 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 origem da 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 origem da 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 fazer 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 de 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 – transmitindo conteúdo sob demanda mais rápido do que em tempo real e armazenando dados em cache 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 fonte de rede o reproduziu 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 solicitado sob demanda, 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 buffer será desabilitado. Quando a quantidade de conteúdo no buffer é baixa, a fonte de rede inicia o buffer e gera o evento MEBufferingStarted para indicar que o buffer foi iniciado. Ao receber esse evento, o pipeline interrompe a renderização. Quando o buffer for concluído, a fonte de rede gerará o evento MEBufferingStopped e o cliente poderá 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 de 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 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 ajustam à largura de banda estimada. Isso garante uma reprodução suave do conteúdo de mídia de streaming.

Durante o estágio inicialização rápida, 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 do 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áticos 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 fonte de rede. A fonte de rede pode alterar a seleção inicial do fluxo 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 melhorar e o cliente tiver acumulado uma quantidade suficiente de conteúdo em buffer.

rede no da Media Foundation