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.
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.
Tópicos relacionados