Resumo

  • Cadeias de dependência independentes podem ser intercaladas sob o mesmo SSRC. O estado positivo de um Frame ID posterior numa cadeia não comprova a decodificação de um ID anterior na outra.
  • O vetor por faixa preserva lacunas que um contador de “maior ACK” destruiria; ainda assim, cada bit continua limitado a recebido e decodificado ou prometido para tentativa de decodificação.

O receptor confirmou o Frame ID 812. O painel de controle elevou seu “maior quadro decodificado” para 812 e concluiu que tudo abaixo estava seguro como referência. Só que o 812 pertencia à cadeia de simulcast B. O 811 da cadeia A, necessária para a representação que acabara de ser escolhida, nunca tinha sido decodificado.

O número avançou. A dependência não.

Esse caso aparece expressamente na arquitetura do rascunho RTCP Feedback Message and Request Mechanism for Frame-level Acknowledgement. Cadeias independentes podem ser intercaladas em um SSRC. Uma unidade posterior decodificada não implica que uma unidade anterior, pertencente a outra cadeia, também foi decodificada. Por isso o mecanismo não transmite apenas um ponto máximo: ele admite uma faixa e um vetor de estado.

A revisão 01 é um Internet-Draft ativo do grupo AVTCORE, datado de 6 de julho de 2026 e com expiração em 7 de janeiro de 2027. O status pretendido é Informational. No Datatracker, o documento permanece em I-D Exists, sem shepherd, Area Director responsável, avaliação do IESG, número RFC ou atribuição IANA concluída. O formato usa PT 205 e deixa o FMT como TBD, sugerindo 12. Nada disso atesta implementação, interoperabilidade ou adoção em produto.

Frame ID acompanha estado do codec, não uma fotografia

O identificador tem 16 bits, cresce de um em um para cada unidade marcada na ordem de envio e volta a zero. O receptor precisa aceitar qualquer ponto inicial. A extensão RTP deveria aparecer no último pacote da unidade e não pode aparecer mais de uma vez nela.

“Frame”, neste contexto, é qualquer unidade decodificável que atualize estado de referência aproveitável por unidades posteriores. Em geral é um quadro completo, mas pode ser uma unidade não exibida, tile ou slice independente. O vocabulário já impede equiparar Frame ID a uma imagem efetivamente mostrada.

Os valores FFR separam identificação e pedido. 00 leva apenas o ID; 01 inclui um pedido implícito para aquela unidade; 10 leva início e comprimento independentes; 11 é reservado. A resposta RTCP traz o sinal de ressincronização R, ID inicial, comprimento de oito bits e um bit por unidade.

O bit um significa recebido e já decodificado ou recebido e destinado a uma tentativa de decodificação. O receptor pode afirmar um antes do término para baixar a latência, desde que garanta a tentativa. Se ela falhar, deve pedir um quadro-chave, inclusive em camada descartável. O zero agrega não recebido, não decodificado e não previsto para decodificação.

Logo, nem mesmo o vetor completo é um recibo de renderização. Ele é mais rico que o máximo porque preserva lacunas, mas continua falando no idioma restrito do estado do receptor.

O maior número não domina cadeias independentes

Em uma única cadeia linear, um protocolo poderia explorar a ordenação para inferir parte do passado. Com simulcast ou estruturas paralelas, as relações de referência são diferentes. Os IDs 810 da cadeia A, 811 da cadeia A e 812 da cadeia B podem aparecer em ordem de envio, sem que B dependa de A nem A possa usar B como substituto.

Se a telemetria guarda somente highest_ack=812, o buraco em 811 desaparece. Se o controlador de codificação usa esse máximo para escolher referência, pode produzir uma unidade que o receptor não consegue reconstruir. Se o pós-incidente vê somente o máximo, pode culpar uma perda posterior em vez da inferência inicial.

O registro precisa conservar o vetor e a associação de cada Frame ID à cadeia de dependência. Essa associação pode vir do contexto do codificador ou de metadados internos; o protocolo de ACK, por ser codec-agnóstico, não promete fornecê-la sozinho. A ausência desse contexto deve reduzir a decisão permitida, não aumentar a confiança.

Uma política conservadora não precisa proibir feedback rápido. Pode permitir que um bit positivo influencie a cadeia a que pertence, enquanto mantém desconhecidas as lacunas de outras cadeias. O ganho vem da precisão do escopo.

A janela finita remove evidência, não resolve lacunas

O receptor mantém uma janela contígua, com 255 IDs por padrão e faixa negociável de 1 a 32.767. Como o comprimento de uma mensagem tem oito bits, janelas maiores que 255 requerem várias mensagens. Quando a janela avança, os estados mais antigos são descartados em FIFO.

Se o pedido se sobrepõe parcialmente à janela, a resposta desloca o início e cobre apenas a interseção. Sem sobreposição, devolve comprimento zero. Início deslocado ou comprimento zero dizem que o estado antigo foi descartado; o emissor não deve usá-lo como referência. Não dizem que a lacuna foi perdida, decodificada ou exibida.

As regras temporais de RTCP podem adiar a resposta. Ela deve ser montada com o estado existente no momento do envio. Um pedido 1–4 pode voltar como 3–4 se a janela tiver avançado. E um pedido mais recente pode substituir outro ainda pendente. A cadeia causal exige horário do pedido, horário da resposta e janela naquele instante.

No exemplo inicial, se o 811 sair da janela antes da investigação, o 812 continuará sem provar nada sobre ele. A expiração de evidência não preenche dependência.

Ressincronizar requer memória dos dois lados

Com R marcado, o receptor pode informar sua última referência decodificada e os estados até a unidade mais recente recebida, se houver espaço. Isso identifica uma referência boa no lado receptor.

O emissor ainda deve confirmar que a conserva em seu próprio buffer. Se sim, deveria codificar a próxima unidade a partir dela ou de outra referência conhecida no receptor. Se não, deveria gerar quadro-chave. Retenção do receptor e retenção do codificador são registros independentes.

Em cadeias paralelas, a verificação precisa respeitar a cadeia. Uma referência boa de B não cura a ausência de A só porque seu Frame ID é maior. Depois da escolha ainda faltam emissão, transporte, entrega, decodificação e apresentação.

O resync-timeout, entre 1 e 65.535 ms, é limiar para disparar pedido diante de fome de decodificação, não garantia de tempo de recuperação. O status-window-size delimita memória do receptor e IDs pendentes; não promete capacidade correspondente no buffer do emissor.

O SFU multiplica as cadeias e a autoridade

Em distribuição multiponto, um SFU ou SFM pode reescrever Frame IDs para manter cada saída contínua. O rascunho afirma que, em geral, o intermediário não deveria reconhecer para cima antes de todos os receptores ativos reconhecerem. Essa agregação só é auditável se “todos” tiver um denominador versionado.

É preciso saber quais receptores estavam ativos, qual representação cada um recebia, como IDs de entrada viraram IDs de saída e qual estado individual sustentou o ACK agregado. Um usuário removido do conjunto antes do reconhecimento e outro adicionado depois não podem ser representados pela mesma frase sem os tempos.

Um ACK gerado pelo SFU também não prova renderização em nenhum cliente. No máximo prova a regra de agregação que o SFU executou sobre os estados que reteve. O transporte desse significado depende da linhagem de tradução.

Mudanças de SSRC criam outra fronteira: se o SSRC do emissor ou receptor muda, a sequência reinicia e o estado anterior é descartado. Fora dessa hipótese, não se aceitam lacunas ou resets arbitrários. Misturar épocas destrói ainda mais a separação entre cadeias.

Um envelope mínimo que preserve os buracos

Na disciplina de camadas de realidade de Heng Lu, ID, faixa e vetor são coordenação simbólica; janela e buffers são estado executável; entrega, decodificação concluída, renderização e experiência são observações. Uma cadeia de dependência é parte do contexto que liga, sem fundir, essas camadas.

Uma especificação inicial mínima deve guardar par de SSRC, época, Frame ID, cadeia ou representação conhecida, FFR, faixa pedida, janela, hora da resposta, vetor exato, referência do receptor, referência disponível no emissor e ação de recuperação. Onde a cadeia não puder ser conhecida, a conclusão também deve dizer isso.

O teste com código real deve intercalar cadeias, perder apenas uma delas, atrasar RTCP até a janela girar, falhar uma decodificação depois do positivo, trocar SSRC, expulsar referências e alterar a população do SFU. A aprovação não é ver o máximo subir; é preservar os buracos corretos e impedir que atravessem cadeias por inferência.

O Frame ID 812 do incidente era uma boa notícia para B. O erro foi promovê-lo a autoridade sobre A. O protocolo oferece uma unidade compacta de coordenação. A operação responsável mantém a compactação dentro do escopo em que ela continua verdadeira.

Sources