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
fromo endereço entrega o direto; comfromcomeça o arquivo, e a lista HLS passa a ser fechada: descreve exatamente a janela gravada e não cresce; - sem
too 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_ateclosed_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 valornextda página anterior. O cursor é opaco: a sua forma interna não faz parte do contrato;nextfalta 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=trueabre 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;frometodefinem 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¶
- Exportação do arquivo — um troço num só ficheiro MP4.
- Gravação e leitura — onde o arquivo é escrito e como a gravação é verificada.
- Legendas e teletexto — o que entra no arquivo junto com o vídeo.