Skip to content

Stream com uma fonte MPEG-DASH

Um stream do Catena consegue puxar uma fonte servida como manifesto MPEG-DASH: o streamer segue o manifesto como um reprodutor comum, baixa os segmentos conforme eles aparecem e entrega os quadros adiante — ao transcodificador, ao arquivo e à entrega. É assim que se pega o sinal de um parceiro, de uma CDN alheia ou de um equipamento que não serve nada além de DASH.

Esta página trata daquilo em que o DASH difere das demais fontes. O funcionamento geral das fontes está na página Stream com uma fonte externa; várias fontes com prioridades, em Reserva de fontes.

Adicione a fonte

Abra a página do stream, vá para a aba Fontes, pressione + Adicionar fonte e escolha o protocolo MPEG-DASH. Escreva o endereço do manifesto no campo URL e pressione Salvar:

Fonte MPEG-DASH: o endereço do manifesto e os campos da entrada

O endereço é um link comum para o manifesto, http://…/manifest.mpd ou https://…/manifest.mpd; o streamer reconhece o manifesto sozinho. Se a sua fonte serve o manifesto em um endereço sem o sufixo .mpd, escreva-o com o esquema dash:// (ou dashs:// para HTTPS) — é a mesma captura, apenas dita explicitamente.

Alguns segundos depois o cartão de saúde da fonte mostra o estado Funcionando e as faixas reconhecidas — o streamer está seguindo o manifesto:

A fonte DASH está conectada e o stream está no ar

O que o streamer faz com o manifesto

  • A captura começa na borda ao vivo. Tudo o que estava na janela de deslocamento da fonte no momento da conexão é história, e não é baixado. Pela mesma razão o streamer não recupera o que foi perdido após uma queda: um minuto de parada continua sendo um minuto em vez de chegar de uma vez ao ar.
  • O período de atualização do manifesto é ditado pela fonte. O streamer relê o manifesto com a frequência que o próprio manifesto declara (minimumUpdatePeriod); não há ajuste para isso, nem deve haver — impor um valor próprio sobre o alheio compra ou tráfego a mais ou segmentos perdidos.
  • Um período novo no manifesto é uma descontinuidade da linha do tempo. Um intervalo comercial, um blackout e uma troca de perfil de codificação são indistinguíveis de fora: o streamer anuncia uma descontinuidade e relê a descrição das faixas.
  • A fonte pode mudar de endereço. Se o manifesto trouxer um elemento Location, as atualizações seguintes vão para o novo endereço — é assim que as sessões são distribuídas; o endereço nos ajustes do stream não muda.
  • O tempo da fonte já é tempo de calendário. O DASH ancora os segmentos ao UTC pelo próprio protocolo, então o arquivo e o rebobinamento caem na escala de calendário sem adivinhar nada do relógio de parede.
  • O fim da transmissão encerra a captura. Quando a fonte fecha a transmissão, o streamer entrega os segmentos restantes e para de consultar o manifesto.

Os campos da fonte

Um campo vazio significa o padrão do servidor — preencha apenas o que realmente precisar mudar.

Campo O que faz
URL O endereço do manifesto da fonte
Bitrate da representação (bit/s) Qual representação pegar: a mais próxima abaixo do número indicado. Vazio — a superior do conjunto
Capturar a escada inteira Pegar todas as representações do conjunto em vez de uma — veja abaixo
Limite de desvio (ms) O quanto as representações podem se afastar antes de a escada ser considerada desviada
Quando as representações divergem O que fazer diante desse veredito
Tempo de conexão (ms) Quanto esperar pelo estabelecimento da conexão com a fonte; o padrão é 5000
Tempo do corpo (ms) Quanto esperar pelo corpo da resposta; o padrão é 15000
Limite do corpo (bytes) Um teto para uma única resposta: uma resposta erroneamente enorme não esgotará a memória do streamer
Tempo limite do peer (ms) Quanto esperar por quadros antes de dar a fonte por perdida
Cabeçalhos das requisições Cabeçalhos HTTP adicionais, antes de tudo Authorization. Vão com o manifesto e com os segmentos; os valores nunca chegam aos logs
Chaves ClearKey Chaves para uma fonte protegida — veja abaixo

Os dois últimos campos são listas de pares: um cabeçalho entra no documento assim que tem nome.

Uma representação ou a escada inteira

Por padrão o stream pega uma representação — a superior pelo bitrate declarado ou, quando Bitrate da representação está preenchido, a mais próxima abaixo dele. Esse padrão é deliberado: capturar a escada inteira multiplica tanto o tráfego de entrada quanto o número de faixas do stream, e encurta o arquivo nos mesmos discos na mesma proporção.

A caixa Capturar a escada inteira liga a captura de todas as representações do conjunto. Você a quer quando a fonte já serve uma escada de qualidades pronta e não faz sentido transcodificá-la de novo — o stream entrega aos espectadores exatamente o que pegou.

Uma escada pronta traz um problema próprio: as representações chegam como arquivos independentes e com o tempo podem se afastar, e um reprodutor que troca de qualidade dá um solavanco nessa emenda. O streamer mede o desvio continuamente, compara-o com o campo Limite de desvio (ms) e age conforme o campo Quando as representações divergem:

  • Manter a escada e mostrar o desvio — o padrão: a captura continua e o desvio fica visível nas estatísticas do stream e no log.
  • Voltar para uma representação — a captura reinicia com uma representação. A volta acontece uma única vez na vida da fonte; do contrário cada reinício levantaria a escada de novo e tropeçaria nela de novo.

O streamer decide do que a escada é feita uma única vez, ao conectar. Uma representação que apareça no manifesto depois só é recolhida quando a entrada reinicia — por exemplo, após a edição dos ajustes dela.

Fonte protegida e chaves ClearKey

Se o manifesto declara proteção de conteúdo e nenhuma chave está definida, a fonte é recusada com um erro que nomeia o esquema de proteção. Isso é deliberado: segmentos cifrados são analisados como estrutura e dão quadros de lixo em vez de imagem, e sem uma recusa explícita a falha acaba sendo procurada no codec.

Para pegar uma fonte assim, preencha o bloco Chaves ClearKey com pares Identificador da chaveChave. As duas metades são escritas como cadeias hexadecimais, e o identificador também é aceito como UUID com hifens. O streamer decifra os segmentos pelo esquema cenc e depois trabalha com eles como com os comuns.

O que aqui não há nem haverá é conversar com servidores de licença de Widevine, PlayReady e FairPlay: eles exigem um ambiente de execução confiável no dispositivo do espectador, que um streamer não tem. As declarações deles ao lado do esquema cenc no manifesto não atrapalham a captura e são simplesmente ignoradas.

A chave é tratada como segredo: não chega aos logs, e a API a devolve substituída. O identificador da chave não é segredo — ele está no manifesto em texto aberto e serve para o diagnóstico.

Cifrar o que o stream entrega aos espectadores é outra tarefa e outro ajuste: Cifragem da entrega.

O que a captura não faz

  • Apenas endereçamento por modelo de segmentos. SegmentList e SegmentBase não são suportados; uma fonte assim é recusada com um erro que nomeia o que exatamente foi encontrado no manifesto.
  • Apenas contêineres fMP4. O streamer não espera mais nada dentro dos segmentos DASH e não tenta adivinhar.
  • As legendas não são capturadas. Conjuntos do tipo text são pulados, o que deixa registro no log.
  • Uma gravação não vira fonte. Um manifesto estático é VOD, não uma transmissão; ele é recusado com uma razão explícita. Os arquivos vivem no catálogo VOD.

Se a fonte não subir

  • A razão nomeia um esquema de proteção. A fonte está cifrada — preencha as chaves ClearKey.
  • A razão nomeia SegmentList ou SegmentBase. A fonte não é endereçada por modelo de segmentos; a captura não suporta esse manifesto.
  • A razão nomeia um manifesto estático. Você deu um link para uma gravação em vez de uma transmissão.
  • Respostas 401 ou 403. A fonte exige autorização — acrescente um cabeçalho Authorization em Cabeçalhos das requisições.
  • O manifesto atualiza, mas não há quadros. É assim que se parece um manifesto deixado para trás por uma transmissão morta: o tempo avança, os endereços são calculados e as requisições por segmentos respondem 404. O stream liquidará essa fonte pelo tempo limite do peer. Para separar os dois casos use o diagnóstico da fonte: a hora da última atualização do manifesto e a hora da última entrega de quadros são contadas separadamente.
  • Os segmentos respondem 404 logo após a partida. No DASH o momento em que um segmento fica disponível é calculado pelo relógio, então uma diferença entre o relógio do streamer e o da fonte quebra a captura. Verifique a sincronização de horário na máquina do streamer.
  • O stream não sobe e a razão nomeia o limite de captura DASH. Sua licença não tem espaço para essa entrada — ela é contada à parte do HLS. Fale com o seu gerente sobre ampliar a licença.