Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.
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.
Tópicos relacionados
-
rede no da Media Foundation