Skip to content

Reprodução do arquivo

O arquivo gravado é entregue pelos mesmos protocolos do direto: HLS e DASH a partir da cabeça de rede. Não existe um endereço «de arquivo» à parte: a janela gravada é definida por parâmetros do endereço habitual, e o retrocesso tem um caminho próprio.

A reprodução funciona num stream com a gravação ativada. Num stream sem gravação, o pedido do arquivo é recusado. A profundidade de retenção define até onde se pode retroceder: um pedido mais fundo do que o início do arquivo é servido desde o início do arquivo, não como uma resposta vazia.

Retrocesso

Uma lista recuada N segundos a partir do momento atual:

http://<endereço-da-cabeça-de-rede>/streaming/v/<stream>/rewind/<segundos>/index.m3u8

Por exemplo, rewind/3600/ é uma hora atrás.

A lista começa no arquivo e continua com o direto: na emenda não há duplicados nem saltos, e o reprodutor não nota a transição. A recarga bloqueante do LL-HLS continua a funcionar. Os buracos da gravação são marcados com o EXT-X-DISCONTINUITY padrão.

O mesmo existe para MPEG-TS HLS, sob o segmento ts/:

http://<endereço-da-cabeça-de-rede>/streaming/v/<stream>/ts/rewind/<segundos>/index.m3u8

Janela por tempo absoluto

A janela gravada é definida pelos parâmetros from e to, em UTC e milissegundos:

http://<endereço-da-cabeça-de-rede>/streaming/v/<stream>/index.m3u8?from=<ms>&to=<ms>
http://<endereço-da-cabeça-de-rede>/streaming/v/<stream>/Manifest.mpd?from=<ms>&to=<ms>
  • Sem from o endereço entrega o direto; com from começa o arquivo, e a lista HLS passa a ser fechada: descreve exatamente a janela gravada e não cresce;
  • sem to o bordo direito da janela fica aberto para a frente.

No DASH os buracos da gravação tornam-se Periods, e a escala de tempo escolhe-se com o parâmetro timeline:

  • compact — por omissão: os períodos sucedem-se sem cortes e o tempo do manifesto é contínuo;
  • wallclock — os buracos são preservados, e a posição da janela no manifesto coincide com o tempo de relógio.

Por exemplo, uma janela com a escala de relógio:

http://<endereço-da-cabeça-de-rede>/streaming/v/<stream>/Manifest.mpd?from=<ms>&to=<ms>&timeline=wallclock

Janelas gravadas

Que troços estão gravados é entregue por um pedido à parte. O bordo do arquivo e o seu limite inferior:

http://<endereço-da-cabeça-de-rede>/streaming/dvr-range/<stream>
{"from": 1789546139000, "to": 1789553339000}

Ambos os valores estão em UTC e milissegundos.

As janelas de gravação, página a página:

http://<endereço-da-cabeça-de-rede>/streaming/dvr-ranges/<stream>?resolution=<ms>&limit=<quantidade>&cursor=<cursor>
{
  "estimated_count": 2,
  "next": "MTc4OTU0NjEzOTAwMA",
  "ranges": [
    {"opened_at": 1789546139000, "closed_at": 1789549739000},
    {"opened_at": 1789550400000, "closed_at": 1789553339000}
  ]
}
  • opened_at e closed_at — o início e o fim de uma janela de gravação contínua, em UTC e milissegundos;
  • resolution — com que precisão se unem as janelas vizinhas, em milissegundos. Zero significa a precisão da própria gravação;
  • limit — tamanho da página, 100 por omissão, 10000 no máximo;
  • cursor — o valor next da página anterior. O cursor é opaco: a sua forma interna não faz parte do contrato;
  • next falta na última página.

As janelas podem ser filtradas por tempo: opened_at_gte, opened_at_lte, closed_at_gte, todos em UTC e milissegundos. Um valor que parece segundos de época é recusado com 422: multiplicado por 1000 em silêncio, devolveria uma resposta vazia do ano 1970 em vez de um erro.

Pré-visualizações de quadros

  • Um quadro JPEG da pista de imagem num momento dado:

text http://<endereço-da-cabeça-de-rede>/streaming/v/<stream>/image/<pista>/<ms>.jpg

  • Um fragmento MP4 curto a partir de um quadro-chave:

text http://<endereço-da-cabeça-de-rede>/streaming/dvr-preview-mp4/<stream>/<ms>

Ambos os endereços leem o arquivo: o quadro é montado a partir do fragmento mais próximo, não é servido de uma cache preparada.

A página do reprodutor

Para verificar o arquivo no navegador sem montar endereços à mão existe a página do reprodutor:

http://<endereço-da-cabeça-de-rede>/streaming/embed/<stream>?dvr=true&from=<ms>&to=<ms>
  • dvr=true abre a linha de tempo do arquivo. Sem o parâmetro a página mostra o direto: num stream sem gravação volta por si mesma ao reprodutor em direto;
  • from e to definem a janela da linha de tempo, em UTC e milissegundos.

Estes endereços verificam o sinal, não o entregam a espectadores: o balanceamento, a autorização de espectadores e a contabilidade de sessões começam onde termina a cabeça de rede. Os requisitos do reprodutor são os mesmos do direto.

O que se segue