Recursos de origem de rede
A fonte de rede fornece a implementação base para streaming de arquivos de mídia e expõe o interface IMFMediaSource. A implementação específica da fonte de rede 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 da rede. Para obter informações sobre os esquemas e protocolos suportados, consulte Protocolos suportados.
A fonte da rede:
- Implementa recursos como cache, deteçã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 usa-a como dados de configuração e lê dados de fluxo da camada de soquetes subjacente. Ao receber, a fonte da rede é responsável por reordenar e solicitar retransmissões de pacotes.
Criação de fonte de rede
Criar 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 Source Resolver métodos 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 interfaceIMFSchemeHandler. 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.
Media Foundation não suporta fluxos de bytes para fontes de rede. O objeto de fluxo de bytes só é suportado 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 na máquina local. Os servidores Web fornecem dados transferidos. Não há comunicação do cliente para o servidor após o início do download. Neste 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 suporta ficheiros do Windows Media Station (. NSC). Esses arquivos são usados em streaming multicast de conteúdo de mídia através de uma rede. Para criar a fonte de rede para um 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 na 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 fonte de rede
Este tópico descreve os recursos suportados pela fonte de rede e as opções de configuração associadas. Um aplicativo pode configurar a fonte de rede ao criar o objeto de fonte de rede. Essas opções são armazenadas em um IPropertyStore objeto, que o aplicativo deve passar no pProps parâmetro dos métodos de resolução 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 falhar ou o cliente não receber pacotes. Quando a conexão falha, a fonte de rede tenta se reconectar ao servidor de mídia usando a mesma configuração que foi 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 de 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 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 da 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 habilitado no servidor, o servidor enviará um fluxo acelerado de taxa de bits 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 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 Fast Cache — 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 estar habilitado na fonte de rede e o servidor deve suportá-lo. 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 reproduzirá do cache local. Em solicitações subsequentes, para listas de reprodução, apenas as entradas ausentes são armazenadas em cache e, em seguida, reproduzidas. Se uma entrada de lista de reprodução já estiver no cache local do cliente, ela será reproduzida de lá e não armazenada em cache novamente.
Por padrão, o Cache Rápido está habilitado no cliente de origem da 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 em cache o conteúdo mais rápido 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 gerenciamento de buffer eficiente que monitora o estado do buffer no cliente. Por padrão, a fonte de rede armazena em buffer 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 que é 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 aumenta o evento MEBufferingStarted para indicar que o buffer começou. Ao receber esse evento, o pipeline para de renderizar. Quando o buffer estiver concluído, a fonte de rede acionará o evento MEBufferingStopped e o cliente poderá começar a renderizar novamente.
O cliente começa a renderizar o conteúdo depois de ter acumulado a quantidade de dados indicada pelo tamanho do buffer da primeira amostra. Se esse valor for menor do 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 medição de de par de pacotes estáticos para estimar a largura de banda inicial do link entre o cliente e o servidor. Com base no resultado dessa medição, o cliente pode selecionar fluxos de áudio e vídeo que se encaixam dentro da 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, medição de de par de pacotes dinâmico é executada. Neste processo, o cliente recebe grandes quantidades de dados, que podem ser vários pacotes ou amostras.
O resultado da medição dinâmica de pares de pacotes é mais preciso do que a estimativa de largura de banda de link retornada pela medição estática de pares de pacotes porque o processo estático de par de pacotes envia um único pacote de tamanho fixo, 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 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 da rede e voltar para uma taxa de bits mais alta quando o tráfego de rede tiver melhorado e o cliente tiver acumulado uma quantidade suficiente de conteúdo armazenado em buffer.
Tópicos relacionados