“REDUÇÃO DE EFEITOS DE PERDA DE PACOTES EM TRANSMISSÕES DE VÍDEO”
Antecedentes da Invenção
Redes de computador, tal como a Internet, revolucionaram a maneira na qual pessoas obtêm informação. Por exemplo, modernas redes de computador suportam o uso de comunicações por correio eletrônico para transmitir informação entre pessoas que têm acesso à rede de computador. Cada vez mais sistemas estão sendo desenvolvidos para habilitar a troca de dados sobre uma rede que tem um componente em tempo real. Por exemplo, um fluxo contínuo de vídeo pode ser transmitido entre computadores conectados por uma rede, de maneira tal que as condições da rede possam afetar como a informação é apresentada ao usuário. No geral, dados são transmitidos em uma rede de computador em pacotes. Infelizmente, ocorre perda de pacotes quando um ou mais pacotes que são transmitidos na rede de computador não conseguem alcançar seus destinos. Inúmeros fatores podem ocasionar a perda de pacotes: uma rede sobreutilizada, degradação de sinal, hardware defeituoso e assim por diante. Quando ocorre perda de pacotes, problemas de desempenho podem se tornar perceptíveis ao usuário. Por exemplo, no contexto de um fluxo contínuo de vídeo, a perda de pacotes pode resultar em “artefatos” ou distorções que são visíveis em uma seqüência de quadros de vídeo.
A perda de pacotes na rede é comum. Ela acontece na Internet pública, DSL, cabo, rede de área local sem fios (WLAN), 3G sem fios e muitos outros tipos de redes. A taxa estimada de perda de pacotes na Internet é de 5 %, e algumas redes sem fios podem ter perda de pacotes acima de 10 %. Protocolos de transmissão em rede confiáveis, tal como o Protocolo de Controle de Transmissão (TCP), retransmitirão um pacote se o meio de transmissão soltar o pacote, assim, garantindo a distribuição do pacote. Protocolos não confiáveis, tal como o Protocolo de Datagrama Não Confiável (UDP)1 não garantem a distribuição do pacote e não retransmitem pacotes soltos. Retransmitir pacotes leva tempo e consome largura de banda adicional. Em função da natureza de tempo real da comunicação por vídeo, sinais de vídeo são frequentemente transmitidos usando protocolos não confiáveis e, portanto, apresentarão perda de pacotes na rede.
Para uma comunicação de vídeo em tempo real, um terminal transmissor transmite quadros de vídeo através da rede para um terminal receptor, algumas vezes, em uma taxa de 20 até 30 quadros por segundo, ou mais. Quadros são divididos em pacotes com base na Unidade Máxima de Transmissão (MTU) permitida pela rede (por exemplo, 1.500 bytes para Ethernet). Um quadro de vídeo pode ser pequeno o suficiente para se ajustar em um pacote, ou pode ser grande o suficiente para exigir muitos pacotes. Para alguns compressores / descompressores de vídeo (codecs), se algum dos pacotes em um quadro for solto, então, o terminal receptor deve descartar todo o quadro em função dos dados ausentes. Além do mais, frequentemente, codecs usam uma estrutura de dependência para reduzir a quantidade de dados de vídeo que um terminal transmissor transmite na rede. Por exemplo, um quadro chamado de intraquadro (I) é codificado por completo com base nos seus conteúdos. Quadros subsequentes são comprimidos com base em um delta (sinal de diferença) dos quadros anteriores. Estes quadros são frequentemente chamados de quadros de previsão (P). Alguns codecs introduzem estruturas de dependência ainda mais complexas. Por exemplo, o codec pode transmitir ocasionalmente quadros P especiais chamados de quadros de superprevisão (quadros SP) que, em oposição a quadros P regulares, não dependem do quadro P ou do quadro I imediatamente precedentes, mas, em vez disto, de um quadro SP ou de um quadro I mais antigo. Tipicamente, os conteúdos de tais quadros SP são menos correlacionados com o quadro de referência e, assim, portam mais dados de vídeo. Um outro tipo de quadro é um entrequadro ou quadro bidirecional (B), que contém um delta tanto para um quadro anterior quanto para um quadro subsequente. Estes tipos de dependências interquadros reduzem a quantidade de dados que o terminal transmissor transmite na rede, mas as dependências também exageram os efeitos da perda de pacotes na rede. Por exemplo, se um quadro I for solto, o terminal receptor ficará com falta de dados para todos os quadros P subsequentes que dependem do quadro I, e o usuário verá artefatos de vídeo até que o próximo quadro I chegue. Se a perda de pacotes na rede for de 1 %, um quadro I de 10 pacotes tem uma chance de 10 % de ser solto, de acordo com a seguinte fórmula:
P,= 1 -(1 -P)N
Em que P| é a probabilidade de perder um quadro I, P é a probabilidade de perder algum pacote, e N é o número de pacotes no quadro. Se um quadro I tiver uma chance de 10 % de ser solto, então, quadros subsequentes que dependem do quadro I têm uma chance de 10 % de ter artefatos de vídeo, mesmo se todos os quadros subsequentes chegarem corretamente no terminal receptor.
Um método tradicional para reduzir os efeitos da perda de pacotes é correção de erro antecipada (FEC). Correção de erro antecipada (FEC) é um sistema de controle de erro para transmissão de dados, de acordo com o que, o terminal transmissor adiciona dados 30 redundantes às suas mensagens que permitem que o terminal receptor detecte e corrija erros (em algum limite), sem a necessidade de solicitar dados adicionais ao terminal transmissor. A vantagem da correção de erro antecipada é que a retransmissão de dados pode ser frequentemente evitada (ao custo de maiores exigências de largura de banda em média) e, portanto, é aplicada em situações em que retransmissões são relativamente onerosas ou 35 impossíveis, tal como durante a transmissão de dados de vídeo em tempo real. Diferentes algoritmos de FEC têm diferentes exigências de largura de banda e fornecem diferentes níveis de proteção contra perda de pacotes, então, diferentes algoritmos de FEC são adequados para diferentes condições. Infelizmente, é difícil para o terminal transmissor determinar qual algoritmo de FEC fornecerá a melhor experiência de vídeo para uma conexão de rede em particular. Frequentemente, o terminal transmissor também tem limitações de largura de banda e de recurso computacional que toma vantajosa a eficiente escolha de algoritmos de FEC. Além do mais, muitos terminais transmissores são responsáveis por transmitir dados de vídeo para muitos terminais receptores diferentes simultaneamente, de maneira tal que determinações que são realizadas para cada terminal possam se tornar muito onerosas em termos de recursos disponíveis no terminal transmissor.
Sumário da Invenção
São fornecidos método e sistema para reduzir os efeitos da perda de pacotes nas transmissões de vídeo, referido como o sistema de correção de erro. O sistema de correção de erro determina um nível de proteção da correção de erro para aplicação em dados de um quadro de vídeo a ser transmitidos por um terminal transmissor para um terminal receptor com base no impacto previsto da perda de pacotes, bem como na importância do quadro com base nas dependências interquadros, no tamanho do quadro, na probabilidade da perda de pacotes, no padrão histórico da perda de pacotes, na carga da unidade central de processamento e na largura de banda de rede disponível. O sistema de correção de erro usa o nível de proteção pré-determinado para produzir pacotes de proteção. O terminal transmissor transmite os pacotes de proteção para o terminal receptor juntamente com os pacotes que contêm o quadro de vídeo. No terminal receptor, quando a perda de pacotes for detectada para um quadro em particular, o terminal receptor tentará recuperar o quadro usando todos os pacotes de proteção recebidos com base no esquema de codificação de proteção usado por um dado pacote de proteção.
Este Sumário é fornecido para introduzir, de uma forma simplificada, uma seleção de conceitos que é adicionalmente descrita a seguir na Descrição Detalhada. Não pretendese que este Sumário identifique recursos chaves ou recursos essenciais do assunto em questão reivindicado, nem pretende-se que seja usado para limitar o escopo do assunto em questão reivindicado.
Descrição Resumida dos Desenhos
A figura 1 é um diagrama de blocos que ilustra componentes do sistema de correção de erro em uma modalidade.
As figuras 2A e 2B ilustram uma seqüência exemplar de quadros em um fluxo contínuo de vídeo em uma modalidade.
A figura 3 ilustra um ambiente de rede típico no qual um terminal transmissor transmite dados de vídeo para um terminal receptor em uma modalidade.
A figura 4 ilustra um ambiente de rede para transmitir dados de vídeo para múltiplos terminais receptores em uma modalidade. A figura 5 é um fluxograma que ilustra o processamento do componente de dados de transmissão do sistema em uma modalidade.
A figura 6 é um fluxograma que ilustra o processamento do componente de dados de transmissão do sistema em um ambiente de videoconferência com múltiplos terminais receptores em uma modalidade.
Descrição Detalhada
Visão Geral
São fornecidos um método e sistema para reduzir os efeitos da perda de pacotes em transmissões de vídeo, referidos como o sistema de correção de erro. O sistema de correção de erro determina um nível da proteção da correção de erro para aplicação em dados de um quadro de vídeo a ser transmitidos por um terminal transmissor para um terminal receptor com base no impacto previsto da perda de pacotes bem como na importância do quadro com base nas dependências interquadros, tamanho do quadro, probabilidade da perda de pacotes, padrão histórico da perda de pacotes, carga da unidade central de processamento (CPU) e largura de banda da rede disponível. O terminal transmissor pode aplicar um nível de proteção em um quadro que varia de zero (nenhuma proteção) até N (qualquer número maior que zero), em que cada número subsequente envolve um maior nível de proteção. Tipicamente, cada nível de proteção subsequente inclui mais dados de recuperação e consome recursos computacionais adicionais para criar os dados de recuperação. Um modelo matemático para prever o impacto da perda de pacotes na qualidade do vídeo foi descrito no pedido US 11/591.297, intitulado “Dynamic Modification of Video Properties”, depositado em 31 de outubro de 2006, que é, por meio deste, aqui incorporado pela referência. Usando este e outros modelos matemáticos, o sistema de correção de erro pode determinar o nível de proteção que fornecerá um nível alvo de perda de pacotes.
O sistema de correção de erro passa o nível selecionado de proteção a um codec de proteção de canal, tais como o Turbo codec ou o codec Reed-Solomon, para produzir pacotes de proteção do nível selecionado. O terminal transmissor transmite os pacotes de proteção para o terminal receptor juntamente com os pacotes que contêm o quadro de vídeo. Por exemplo, o terminal transmissor pode anexar os pacotes de proteção depois dos pacotes de quadro de vídeo ou pode transmitir os pacotes de proteção em uma conexão diferente como uma carga útil separada. No terminal receptor, quando a perda de pacotes for detectada para um quadro em particular, o terminal receptor tentará recuperar o quadro usando todos os pacotes de proteção recebidos com base no esquema de codificação de proteção usado por um dado pacote de proteção. Assim, o sistema de correção de erro fornece uma eficiente maneira de selecionar um nível de proteção apropriado com base nas características da conexão entre o terminal transmissor e o terminal receptor. O sistema de correção de erro produz um aumento na eficiência dos pacotes recebidos. Por exemplo, em sistemas anteriores, um servidor pode transmitir dados em uma taxa de 300 kbps, mas, em virtude do número de quadros I perdidos, a taxa de recepção real percebida pelo usuário pode ser equivalente a uma taxa de vídeo de somente 128 kbps.
Usando o sistema de correção de erro, mais quadros I que ficam perdidos ou que chegam corrompidos são recuperados pelo terminal receptor. Portanto, um servidor transmitindo em uma taxa de 300 kbps pode produzir uma taxa recebida de 270 kbps ou ainda maior (já que ainda pode haver alguma perda de pacotes de quadros menos significativos). Dessa maneira, a eficiência usando o sistema de correção de erro é muito maior. Isto resulta em econo10 mia de custos de largura de banda para o terminal transmissor, economia de CPU, e em uma melhor experiência para o usuário do terminal receptor.
A seguinte descrição apresenta técnicas de redução de perda de pacotes aplicáveis entre um único terminal transmissor e terminal receptor. Então, estas e outras técnicas são descritas no contexto de um servidor de videoconferência no qual um único terminal transmissor fornece dados para transmitir para muitos terminais receptores. Finalmente, formatos de pacote para realizar estas técnicas são descritos.
Técnicas de Ligação Única
Da forma supradescrita, há diversos níveis de proteção possíveis, variando de zero (nenhuma proteção) até N (qualquer número maior que zero), em que cada número subsequente envolve um maior nível de proteção. Versados na técnica percebem que o sistema de correção de erro pode aplicar muitos tipos diferentes de correção de erro para produzir um nível de proteção em particular, tais como uma operação lógica OU exclusivo (XOR), o algoritmo Reed-Solomon, o algoritmo Viterbi e assim por diante. Cada nível de proteção é ligeiramente mais oneroso, tanto no tamanho quanto na intensidade computacional, para computar os dados de proteção. Portanto, é desejável escolher o nível ideal de proteção para todos os conjuntos de condições em particular. O nível de proteção exigido pode ser determinado com base no tamanho do quadro e no percentual histórico de perda de pacotes. Quadros maiores têm uma maior probabilidade de que pelo menos um pacote que porta dados para o quadro seja perdido e, portanto, exigem um maior nível de proteção. Similarmente, à medida que o nível histórico de perda de pacotes aumenta, um maior nível de proteção é exigido para fornecer ao terminal receptor informação suficiente para recuperar os pacotes perdidos.
Em algumas modalidades, o terminal receptor fornece uma indicação da perda de pacotes histórica ao terminal transmissor. No geral, dados de vídeo são transmitidos em uma ligação não confiável que não reconhece pacotes. Entretanto, usualmente, há um canal de retorno através do qual o terminal receptor comunica periodicamente (por exemplo, a cada cinco segundos) com o terminal transmissor para indicar a perda de pacotes histórica. Uma maneira de determinar a perda de pacotes é pela atribuição de um número de seqüência a cada pacote transmitido pelo terminal transmissor. Então, o terminal receptor determina a perda de pacotes pela contagem de quantos números de seqüência não chegaram.
Em algumas modalidades, o sistema de correção de erro tenta dividir um quadro em pacotes uniformemente dimensionados. Para alguns algoritmos de correção de erro, pacotes de proteção devem ser tão grandes quanto o maior pacote do quadro de vídeo. Portanto, pela uniforme distribuição dos dados de quadro através dos pacotes, o sistema de correção de erro reduz o tamanho dos pacotes de proteção. Os pacotes de correção de erro podem seguir os dados de vídeo e ter uma quantidade com base no nível de proteção. Por exemplo, se o sistema de correção de erro aplicar um nível de proteção um, então, um pacote de correção de erro seguirá os dados de vídeo. Se o sistema de correção de erro aplicar um nível de proteção dois, então, dois pacotes seguirão os dados de vídeo, e assim por diante. Reduzir o tamanho dos pacotes de proteção também economiza largura de banda.
Em algumas modalidades, se o último pacote do quadro de vídeo for menor que os outros pacotes, então, o sistema de correção de erro adiciona pseudo-registros ao último pacote para fazer com que ele tenha um tamanho similar aos outros pacotes do quadro de vídeo. Por exemplo, um quadro de 10.000 bytes pode ser dividido em sete pacotes de 1.500 bytes, em que o último pacote tem somente 1.000 bytes. A correção de erro adicionará 500 bytes de pseudo-registros no último pacote para torná-lo do mesmo tamanho de cada um dos outros pacotes. Em algumas modalidades, para economizar largura de banda, o sistema de correção de erro não transmite os pseudo-registros do terminal transmissor para o terminal receptor. Em vez disto, o terminal receptor adiciona os pseudo-registros com base no tamanho dos pacotes precedentes ou com base na informação de um cabeçalho do último pacote. Por exemplo, se o terminal receptor receber um pacote de 1.000 bytes com um cabeçalho que indica que o tamanho total do pacote deve ser de 1.500 bytes, o terminal receptor adicionará 500 bytes de pseudo-registros. Bytes de pseudo-registros podem conter um valor pré-selecionado, tal como zero.
Em algumas modalidades, o sistema de correção de erro pré-calcula dados de proteção transmitidos em pacotes de proteção. Realizar cálculos de correção de erro pode ser oneroso, e o pré-cálculo desloca o processamento oneroso para um momento em que o terminal estiver menos ocupado. Por exemplo, para qualquer dado tamanho de quadro e nível de perda de pacotes, um terminal pode calcular um nível de proteção apropriado para uso antes mesmo de o terminal transmissor se conectarem um terminal receptor. O terminal receptor pode construir uma tabela a partir desta informação que contém um mapeamento entre níveis de proteção e níveis esperados de perda de pacotes e de tamanhos de quadro. Então, durante a transmissão, o terminal transmissor pode buscar o nível de proteção apropriado para uso com base em um tamanho de quadro e nível histórico de perda de pacotes em particular. Em essência, o nível de proteção de erro se torna adaptativo e varia em função do tempo.
Em algumas modalidades, o sistema de correção de erro aplica proteção primariamente nos quadros I e nos quadros SP. Da forma supradescrita, um terminal transmissor 5 pode transmitir dados de vídeo usando uma estrutura de dependência, de maneira tal que muitos outros quadros (por exemplo, quadros PeB) dependam dos quadros I e SP. Se um quadro P for perdido, então, talvez, haja somente uma folga de poucos milissegundos (por exemplo, 33 ms, se a taxa de quadro for de 30 quadros / seg, ou 66 ms, se a taxa de quadro for de 15 quadros / seg) no vídeo, enquanto que, se um quadro I for perdido, potencialmen10 te, um segundo ou mais de vídeo pode ser perdido. Mesmo embora alguns dos quadros P e B cheguem, não haverá informação suficiente sem o quadro I ausente para manter um fluxo contínuo de vídeo consistente durante aquele período. Experimentos mostraram que usuários perceberão uma grande perda pior que a pequena perda rotineira. Portanto, perder um quadro I ou SP terá um efeito mais notável na qualidade do vídeo exibido no terminal recep15 tor. Quadros I e SP também são muito mais propensos a se perder em função de seus maiores tamanhos e correspondentes maiores números de pacotes exigidos para os transmitir do terminal transmissor para o terminal receptor. Dessa maneira, o sistema de correção de erro pode fornecer maior proteção aos quadros I e SP.
Em algumas modalidades, o sistema de correção de erro não adiciona pacotes de 20 proteção com base nas características dos dados de vídeo. Por exemplo, se o tamanho do quadro for muito pequeno ou se a taxa de bits desejada for muito baixa, o sobreprocessamento de adicionar pacotes de proteção pode ser muito alto. De fato, para pequenos quadros, a maior contagem de pacotes ocasionada pela adição de proteção pode tornar a perda de pacotes mais provável. Similarmente, se a taxa de bits desejada for muito baixa (por e25 xemplo, 50 kbps), então, o sobreprocessamento de adicionar pacotes de proteção no fluxo contínuo de dados pode ser grande o suficiente (por exemplo, 8 kbps) para tornar outros métodos de proteção (tal como retransmissão de pacotes) mais compensadores.
Conferência
Frequentemente, servidores de videoconferência recebem dados de vídeo de um 30 terminal transmissor para difusão para muitos terminais receptores. Por exemplo, um usuário em apresentação pode dar uma apresentação que um servidor de videoconferência encaminha para muitos terminais receptores, em que cada terminal representa um participante na conferência. Neste ambiente, perda de pacotes pode ocorrer entre o terminal transmissor e o servidor de videoconferência, e entre o servidor de videoconferência e todos os termi35 nais receptores. Para dimensionar bem, o servidor de videoconferência é frequentemente projetado para reduzir o sobreprocessamento computacional para cada terminal. Mesmo uma pequena quantidade de sobreprocessamento computacional que um servidor de videoconferência gasta para cada terminal pode se tornar uma carga significativa quando o servidor estiver transmitindo dados para centenas de terminais receptores. Técnicas adicionais para tratar perda de pacotes neste ambiente e para otimizar o processamento realizado pelo servidor de videoconferência são descritas a seguir.
Em algumas modalidades, o sistema de correção de erro não determina o nível de
proteção para uso separadamente para cada ligação descendente. Em vez disto, um cálculo inicial pode ser realizado para cada ligação descendente, e a pior ligação descendente pode ser escolhida para selecionar o nível de correção de erro que será usado para todas as ligações descendentes. Alternativamente, ligações descendentes podem ser categorizadas nas 10 memórias de acúmulo cujas ligações descendentes precisam de proteção nível um, cujas ligações descendentes precisam de proteção nível dois, e assim por diante. Então, os pacotes de correção de erro são formados somente uma vez e, então, o número correto de pacotes é adicionado para cada ligação descendente. Por exemplo, se uma ligação descendente em particular tiver proteção nível um, então, somente o primeiro pacote de correção de erro 15 será adicionado naquela ligação descendente. Uma outra possível otimização é que o transmissor pode ser informado do pior caso de ligação descendente. Neste exemplo, se a pior ligação descendente precisar de proteção nível três, então, o transmissor será responsável por transmitir três pacotes de correção de erro com cada quadro de vídeo. Então, o servidor de videoconferência pode encaminhar tantos pacotes de correção de erro quanto 20 cada ligação descendente exigir. Fazendo isto, a computação dos pacotes de correção de erro é transferida para o transmissor, e o servidor de videoconferência pode remover os pacotes de proteção de erro do fluxo contínuo de bits se ele determinar que um nível de proteção mais baixo é aceitável para uma ligação descendente em particular.
Em algumas modalidades, o terminal transmissor aplica proteção em estágios. Usando níveis de proteção graduais, o terminal transmissor transmite um primeiro pacote de proteção com um primeiro nível de proteção, e um ou mais pacotes de proteção adicionais em níveis de proteção mais altos. Quando ocorrer perda de pacotes, o terminal receptor pode escolher o pacote de proteção para uso com base no grau de perda de pacotes e no nível de proteção exigido para recuperar os pacotes perdidos. Graduação reduz o processarnento realizado pelo servidor de videoconferência pela criação de pacotes de proteção uma vez e pela aplicação dos pacotes de proteção conforme necessário para muitos terminais receptores. Por exemplo, o terminal receptor pode transmitir um pacote de proteção para terminais receptores com uma baixa taxa de perda de pacotes, e o mesmo pacote de proteção mais pacotes de proteção adicionais para terminais receptores com uma alta taxa de perda de pacotes. Então, os terminais receptores com uma alta taxa de perda de pacotes podem usar os pacotes de proteção podem usar os pacotes de proteção adicionais para realizar recuperação de erro mais abrangente. g Em algumas modalidades, o servidor de videoconferência transmite um relatório de perda de pacotes para o terminal transmissor, que indica a perda de pacotes do terminal receptor com pior caso. Com base no relatório de perda de pacotes, o transmissor protege quadros em um nível de proteção e incluindo um número de pacotes de proteção com base no terminal receptor com pior caso. Mediante a recepção dos dados de vídeo, o servidor de videoconferência pode não encaminhar todos os pacotes de proteção para todos os terminais receptores, com base na informação sobre a perda de pacotes histórica experimentada por cada terminal receptor. Por exemplo, um terminal receptor pode exigir um único pacote de proteção, enquanto um outro terminal receptor pode exigir dois pacotes de proteção para alcançar um nível alvo de efetiva perda de pacotes. O terminal transmissor pode fornecer dois pacotes de proteção, e o servidor de videoconferência pode transmitir somente o primeiro pacote de proteção para um dos terminais, ainda transmitindo ambos os pacotes de proteção para o outro terminal. Isto fornece a ambos os terminais o nível de proteção que eles precisam, ainda reduzindo a largura de banda e o sobreprocessamento computacional consumido pelo servidor de videoconferência.
Em algumas modalidades, o servidor de videoconferência compartilha a carga de produção de pacotes de proteção com o transmissor. Por exemplo, o transmissor pode fornecer pacotes de proteção em um primeiro nível, e o servidor de videoconferência pode ser responsável por adicionar níveis de proteção adicionais para aqueles terminais receptores 20 que exigem proteção adicional (por exemplo, com base na perda de pacotes histórica). Versados na técnica percebem que muitas maneiras diferentes estão disponíveis para compartilhar o sobreprocessamento computacional entre o terminal transmissor e o servidor de videoconferência.
Em algumas modalidades, o sistema de correção de erro determina dinamicamente 25 o nível de proteção para uso para um terminal receptor em particular em uma base periódica. Por exemplo, o servidor de videoconferência pode receber um relatório periódico (por exemplo, a cada cinco segundos) da perda de pacotes de cada terminal receptor e, com base no relatório do servidor de videoconferência, pode selecionar o nível de proteção para aplicação nos dados transmitidos. As condições de uma conexão em particular podem mu30 dar durante o tempo, ou o tipo de dados que são transmitidos (por exemplo, o tamanho do quadro) pode mudar de maneira tal que um nível de proteção diferente seja mais efetivo.
Formato de Pacote
A seguinte descrição descreve um formato de pacote para implementação das técnicas de correção de erro aqui descritas. Um pacote típico contém um cabeçalho de adaptação de formato e uma carga útil. O cabeçalho contém informação que descreve a carga útil do pacote e que descreve como o pacote se relaciona com outros pacotes transmitidos na rede. O cabeçalho pode conter uma série de indicadores que especificam as características do pacote. A carga útil contém dados de vídeo para um quadro de vídeo, e dados de correção de erro para um quadro de proteção.
Quadro de Vídeo:
F H K O L S C M = 1 V= 1 Versão = 00 H- FC H- RF M = O Contagem de Quadro N0 do Quadro de Referência Quadro de Proteção:
F H K O L S C M = 1 P= 1 Versão = 00 H-FC H-RF M = 1 Contagem de Quadro N0 do Quadro de Referência Nao Usado H-Pkt# M = O L-Pkt# Deslocamento Final H-LPktSize L-LpktSize Indicadores:
F Primeiro Pacote H Cabeçalho de Seqüência existe K Quadro chave O Fixo em Um L Bit Marcador para último pacote
S Quadro SP C Quadro em cache M Modo
P Tipo de carga útil: 1 = metadados, 0 = vídeo Ver Versão do cabeçalho da carga útil
H-FC Alta contagem de quadro de bit H-RF Alta contagem de referência de bit M Modo de Extensão FC Contagem de quadro RFC Contagem de quadro referência
H-Pkt# Alto tamanho de quadro de bits em n° de pacotes L-Pkt# Baixo tamanho de quadro de bits em n° de pacotes Offset Deslocamento do conteúdo do último pacote para FEC do pacote atual H-LpktSize Tamanho do pacote do último quadro em Bytes L-LpktSize Tamanho do pacote do último quadro em Bytes Neste formato de pacote de exemplo, um indicador V especifica se o pacote contém dados de vídeo ou dados de proteção (por exemplo, FEC). Para um pacote de vídeo, P = O, e para um pacote de proteção, P = 1. O pacote contém indicadores que indicam se o pacote é o primeiro (F = 1) ou o último (L = 1) pacote que porta dados para um quadro em particu5 lar. O pacote também contém elementos que indicam o tamanho do último pacote (por exemplo, H-LpktSize e L-LpktSize) que pode ser usado pelo terminal receptor para adicionar pseudo-registros apropriados da forma supradescrita. O pacote também contém elementos (por exemplo, H-Pkt# e L-Pkt#) que agem como um número de seqüência que o terminal receptor pode usar para determinar se algum pacote estiver faltando. O elemento # do Qua10 dro de Referência identifica o quadro do qual o quadro codificado atual depende para decodificação, tal como um quadro P que se relaciona a um quadro I. O pacote também contém um elemento, Offset1 para pacotes de proteção que indicam em qual pacote de proteção o pacote atual está em uma série de múltiplos pacotes de proteção. Este elemento é usado em virtude de pacotes de proteção poder ser perdidos, também, e se um pacote de proteção 15 chegar com um deslocamento de dois (indicando que o último pacote de conteúdo era dois pacotes anteriores), então, o terminal receptor pode determinar que o primeiro pacote de proteção foi perdido. Em algumas modalidades, a informação da versão é usada para permitir que clientes mais antigos interoperem com versões mais recentes de um terminal transmissor ou de um servidor de videoconferência.
Figuras
A seguinte descrição ilustra detalhes das modalidades descritas em relação às figuras.
A figura 1 é um diagrama de blocos que ilustra componentes do sistema de correção de erro em uma modalidade. O sistema de correção de erro 100 inclui um componente para produzir dados de vídeo 110, um componente para dispor os dados de vídeo em pacotes 120, um componente para determinar o nível de proteção 130, um componente para criar dados de correção de erro 140, um componente para empacotar os dados de correção de erro 150, um componente para transmitir dados 160, um componente para receber dados 170 e um componente para recuperar dados perdidos 180. O componente para produzir os dados de vídeo 110 produz dados de vídeo, tal como pela captura de um sinal digital de um dispositivo de entrada de vídeo (por exemplo, uma câmera da Internet) ou pela reprodução de um arquivo que contém dados de vídeo. O componente para dispor os dados de vídeo em pacotes 120 divide os dados de vídeo em pacotes adequados para transmissão na rede. Da forma supradescrita, os pacotes podem conter informação de cabeçalho que descreve os dados que são transmitidos e usados pelo receptor para fazer várias determinações sobre os dados recebidos. O componente para determinar o nível de proteção 130 determina o nível de proteção apropriado para aplicar nos dados de vídeo com base em fatores, tais como o tamanho do quadro dos dados de vídeo e uma indicação da perda de pacotes histórica recebida do terminal receptor.
O componente para criar dados de correção de erro 140 cria dados de correção de erro com base no nível de proteção determinado e nos dados de vídeo. O componente para dispor dados de correção de erro em pacotes 150 divide os dados de correção de erro em pacotes adequados para transmissão na rede. O sistema de correção de erro pode dividir os pacotes de correção de erro resultantes com base no algoritmo de correção de erro usado para produzir os dados de correção de erro. O sistema de correção de erro pode usar mais de um algoritmo de correção de erro para produzir pacotes de dados de correção de erro que aplicam níveis variáveis de correção de erro. O componente de dados de transmissão 160 transmite os pacotes de dados de vídeo e os pacotes de correção de erro do terminal transmissor para o terminal receptor. O componente para receber dados 170 recebe dados do terminal transmissor e determina se algum pacote foi perdido. Se pacotes foram perdidos, o componente para recuperar dados perdidos 180 usa todos os pacotes de correção de erro recebidos para recuperar todos os pacotes de dados de vídeo perdidos.
O dispositivo computacional no qual o sistema é implementado pode incluir uma unidade central de processamento, memória, dispositivo de entrada (por exemplo, teclado e dispositivo de apontamento), dispositivo de saída (por exemplo, dispositivo de exibição), e dispositivo de armazenamento (por exemplo, unidades de disco). A memória e o dispositivo 20 de armazenamento são mídias legíveis por computador que podem ser codificadas com instruções executáveis por computador que implementam o sistema, que significa uma mídia legível por computador que contém as instruções. Além do mais, as estruturas de dados e as estruturas de mensagem podem ser armazenadas ou transmitidas por meio de uma mídia de transmissão de dados, tal como um sinal em uma ligação de comunicação. Várias 25 ligações de comunicação podem ser usadas, tais como a Internet, uma rede de área local, uma rede de área ampla, uma conexão discada ponto a ponto, uma rede de telefonia celular e assim por diante.
Modalidades do sistema podem ser implementadas em vários ambientes operacionais que incluem computadores pessoais, computadores servidores, dispositivos de mão ou 30 de computadores portáteis, sistemas multiprocessadores, sistemas com base em microprocessador, dispositivos eletrônicos programáveis por consumidor, câmeras digitais, PCs em rede, minicomputadores, computadores de grande porte, ambientes de computação distribuída que incluem qualquer um dos sistemas ou dispositivos expostos, e assim por diante. Os sistemas de computador podem ser telefones celulares, assistentes pessoais digitais, tele35 fones celulares com mais funcionalidades, computadores pessoais, dispositivos eletrônicos programáveis por consumidor, câmeras digitais, conversores de sinal de freqüência, câmeras da Internet por IP e assim por diante. O sistema pode ser descrito no contexto geral das instruções executáveis por computador, tais como módulos de programa, executadas por um ou mais computadores ou outros dispositivos. No geral, módulos de programa incluem rotinas, programas, objetos, componentes, estruturas de dados, e assim por diante, que realizam tarefas em particular ou 5 implementam tipos de dados abstratos em particular. Tipicamente, a funcionalidade dos módulos de programa pode ser combinada ou distribuída da forma desejada em várias modalidades.
As figuras 2A e 2B ilustram uma seqüência exemplar de quadros em um fluxo contínuo de vídeo em uma modalidade. Um codificador pode ser usado para comprimir quadros 10 em um fluxo contínuo de vídeo de uma maneira que reduz a redundância dos dados de imagem. A figura 2A ilustra uma seqüência de quadros 200 que consiste em quadros I 202- 204, quadros SP 206-208, quadros P 210-216 e quadros B 218-228. Os quadros I 202-204 são independentes em que quadros I são codificados sem relação aos quadros anteriores ou subsequentes e, uma vez decodificados, podem ser usados para apresentar uma ima15 gem completa. Da forma ilustrada na figura 2A, os quadros I 202-204 servem como referências preditivas, tanto direta quanto indiretamente, para os quadros SP 206-208, quadros P 210-216 e quadros B 218-228. Os quadros SP 206-208 são preditivos em que os quadros são codificados em relação ao quadro I ou a outro quadro SP anteriores mais próximos. Similarmente, os quadros P 210-216 também são preditivos em que estes quadros fazem refe20 rência a um quadro anterior que pode ser o quadro I ou quadro SP anteriores mais próximos. Da forma adicionalmente ilustrada na figura 2A, os quadros B 218-228 são codificados usando uma técnica conhecida como predição bidirecional, em que dados de imagem são codificados em relação tanto ao quadro anterior quanto ao subsequente.
A quantidade de dados em cada quadro é visualmente representada na figura 2A, com os quadros I 202-204 contendo a maior quantidade de dados, e cada um dos quadros SP 206-208, dos quadros P 210-216 e dos quadros B 218-228 fornecendo quantidades sucessivamente maiores de compressão. Da forma aqui usada, o termo “modo de compressão” diz respeito ao estado de um codificador quando um tipo de quadro em particular (por exemplo, quadro I, quadro SP1 quadro P, quadro B, etc.) for codificado para transmissão em uma conexão de rede. Versados na técnica e outros usuários percebem que um codificador pode ser configurado para suportar diferentes modos de compressão para criar diferentes tipos de quadro. Embora a codificação da seqüência de quadros 200 em vários tipos de quadro reduza a quantidade de dados que é transmitida, a compressão dos dados de imagem pode perpetuar os erros. O quadro I 202 pode ser transmitido entre computadores comunicativamente conectados em um conjunto de pacotes. Entretanto, se qualquer um dos pacotes no quadro I 202 ficar perdido no trânsito, o quadro I 202 não é o único quadro afetado pelo erro. Em vez disto, o erro pode persistir em outros quadros que, direta ou indiretamente, fazem referência ao quadro I 202. Por exemplo, da forma representada no cronograma 250 da figura 2B, quando o quadro I 202 passar por um erro, no evento 252, o erro persiste até o evento 254, quando o quadro I 204 subsequente for recebido. Neste caso, quadros recebidos entre os eventos 252 e 254 passam por uma degradação em qualidade, 5 tipicamente, na forma de um artefato de vídeo, em virtude de os quadros ser tipicamente decodificados usando o último quadro I que foi recebido corretamente pelo terminal.
Similar à descrição fornecida anteriormente, quando um pacote associado com um quadro SP for perdido, o erro pode persistir em outros quadros. Por exemplo, da forma representada no cronograma 250, quando o quadro SP 206 passar por perda de pacotes, no 10 evento 256, o erro persiste até o evento 254, quando o próximo quadro I 204 for recebido. Já que existem menos dependências em relação aos quadros SP do que em relação aos quadros I, o impacto da perda de pacotes também é menor. Quando um quadro P passar por perda de pacotes, somente os quadros B e outros quadros P, que fazem referência ao quadro P que passou por perda de pacotes, são impactados pelo erro. Finalmente, erros 15 nos quadros B não persistem, já que quadros B não são referenciados por outros tipos de quadro. Esta observação motiva o fato de que, em algumas modalidades, dados de correção de erro podem ser seletivamente adicionados e, em particular, podem ser confinados nos quadros de vídeo de referência (por exemplo, somente quadros I ou quadros I e SP podem ser protegidos).
A figura 3 ilustra um ambiente de rede típico no qual um terminal transmissor
transmite dados de vídeo para um terminal receptor, em uma modalidade. O ambiente de rede 300 inclui um computador transmissor 302 e um computador receptor 304 que são comunicativamente conectados em uma conexão de rede ponto a ponto. Neste aspecto, o computador transmissor 302 e o computador receptor 304 comunicam dados na rede 306. 25 Da forma supradescrita, o computador transmissor 302 pode ser um terminal de rede que é associado com um usuário. Alternativamente, o computador transmissor 302 pode servir como um nó no ambiente de rede 300 pela retransmissão de um fluxo contínuo de vídeo para o computador receptor 304. Versados na técnica e outros usuários percebem que a rede 306 pode ser implementada como uma rede de área local (“LAN"), rede de área ampla 30 (“WAN"), tal como a rede global comumente conhecida como a Internet ou Rede Mundial de Computadores (“WWW”), rede de telefonia celular, IEEE 802.11, redes sem fios Bluetooth e congêneres.
Na modalidade ilustrada na figura 3, um fluxo contínuo de vídeo é inserido no computador transmissor 302 a partir da camada de aplicação 305 usando o dispositivo de entrada 308. O dispositivo de entrada 308 pode ser qualquer dispositivo que pode capturar um fluxo contínuo de imagens que inclui, mas sem limitações, uma câmera de vídeo, câmera digital, telefone celular e congêneres. Quando o fluxo contínuo de vídeo for inserido no computador transmissor 304, o codificador / decodificador 310 é usado para comprimir quadros do fluxo contínuo de vídeo. Versados na técnica percebem que o codificador / decodificador 310 realiza compressão de vídeo de uma maneira que reduz a redundância dos dados de imagem em uma seqüência de quadros. Já que o fluxo contínuo de bits de vídeo inclui tipi5 camente uma seqüência de quadros que diferem um do outro somente de forma incrementai, compressão significativa é realizada pela codificação de pelo menos alguns quadros com base nas diferenças com outros quadros. Da forma supradescrita, quadros em um fluxo contínuo de vídeo podem ser codificados como quadros I, quadros P, quadros SP e quadros B, embora outros tipos de quadro (por exemplo, quadros B unidirecionais e congêneres) 10 também possam ser utilizados. Entretanto, quando erros ocasionam perda de pacotes ou outra degradação de vídeo, codificar um fluxo contínuo de vídeo em quadros comprimidos pode perpetuar erros, desse modo, resultando em artefatos de vídeo persistindo em múltiplos quadros.
Uma vez que o codificador / decodificador 310 comprime o fluxo contínuo de vídeo pela redução da redundância dos dados de imagem em uma seqüência de quadros, o dispositivo de rede 312 e os componentes da camada de transporte de mídia associada 313 (não ilustrados) transmitem o fluxo contínuo de vídeo. Quadros dos dados de vídeo podem ser empacotados e transmitidos de acordo com padrões indicados pelo protocolo de transporte em tempo real (“RTP”). Versados na técnica e outros usuários percebem que RTP é um protocolo de padrão da Internet exemplar que pode ser usado para o transporte dos dados em tempo real. Em qualquer evento, quando o fluxo contínuo de vídeo for recebido, o codificador / decodificador 310 no computador receptor 304 faz com que o fluxo contínuo seja decodificado e apresentado a um usuário no dispositivo de renderização 314. O dispositivo de renderização 314 pode ser qualquer dispositivo que pode apresentar dados de imagem que incluem, mas sem limitações, uma tela de computador (por exemplo, tela CRT ou LCD), uma televisão, monitor, impressora e assim por diante.
A camada de controle 316 fornece suporte de qualidade de serviço para aplicações com propriedades de tempo real, tais como aplicações que suportam a transmissão de um fluxo contínuo de vídeo. Os controladores de qualidade 318 fornecem realimentação de qua30 Iidade de serviço pela reunião de estatísticas associadas com um fluxo contínuo de vídeo que incluem, mas sem limitações, taxas de perda de pacotes, tempos de ida e volta e congêneres. A título de exemplo somente, os dados reunidos pelos controladores de qualidade 318 podem ser usados pelo componente de recuperação de erro 320 para identificar pacotes que serão usados quando a recuperação de erro for realizada. Dados adicionais podem 35 ser periodicamente transmitidos entre terminais que estão trocando um fluxo contínuo de vídeo com este propósito. Os componentes da camada de controle 316 podem ser usados para modificar propriedades do fluxo contínuo de vídeo com base na informação da qualidade de serviço coletada.
A figura 4 ilustra um ambiente de rede para transmitir dados de vídeo para múltiplos terminais receptores em uma modalidade. O ambiente de rede 700 inclui uma unidade de controle multipontos 701 (por exemplo, um servidor de videoconferência), uma pluralidade 5 de terminais de videoconferência que incluem o dispositivo transmissor 702 e os dispositivos receptores 704-708. Além do mais, o ambiente de rede 700 inclui uma conexão de rede ponto a ponto 710 entre o dispositivo transmissor 702 e a unidade de controle multipontos 701, bem como uma pluralidade de conexões de rede à jusante 712-716 entre a unidade de controle multipontos 701 e os dispositivos receptores 704-708. Descrito no geral, a unidade de 10 controle multipontos 701 coleta informação sobre as capacidades de dispositivos que participarão de ma videoconferência. Com base na informação coletada, propriedades de um fluxo contínuo de vídeo entre os terminais de rede podem ser estabelecidas.
A figura 5 é um fluxograma que ilustra o processamento do componente de dados de transmissão do sistema em uma modalidade. No bloco 510, o componente recebe um tamanho de quadro e indicação de perda de pacotes histórica para o terminal receptor. No bloco 520, o componente determina um nível de proteção apropriada para aplicação com base no tamanho de quadro recebido e na indicação de perda de pacotes histórica, e cria pacotes de proteção com base no nível de proteção determinado. No bloco 530, o componente transmite os pacotes de proteção criados para o terminal receptor. No bloco 540, o componente transmite os pacotes de proteção criados par ao terminal receptor. No bloco de decisão 550, o componente para receber dados do terminal receptor determina se algum dos pacotes de dados foi perdido. Se um pacote de dados foi perdido, então, o componente continua no bloco 560, se não, o componente completa. No bloco 560, o componente recupera os pacotes de dados perdidos usando os dados transmitidos redundantes e, então, completa.
A figura 6 é um fluxograma que ilustra o processamento do componente para transmitir dados do sistema em um ambiente de videoconferência com múltiplos terminais receptores em uma modalidade. No bloco 610, o componente recebe dados de vídeo a ser transmitidos na rede. No bloco 620, o componente determina o nível de proteção mais alto 30 exigido para transmitir os dados de vídeo para cada terminal receptor, de maneira tal que cada terminal receptor possa recuperar todos os dados de vídeo perdidos. No bloco 630, o componente cria pacotes de proteção para acompanhar os dados com base no nível de proteção determinado. No bloco 640, o componente seleciona o primeiro terminal receptor. No bloco 650, o componente determina o nível de proteção exigido para transmitir os dados de 35 vídeo para o terminal receptor selecionado, de maneira tal que o terminal receptor selecionado possa recuperar todos os dados de vídeo perdidos. Com base na determinação, o componente inclui um ou mais dos pacotes de proteção criados durante a transmissão dos dados de vídeo. No bloco 660, o componente transmite os dados de vídeo e pacotes de proteção para o terminal receptor. No bloco de decisão 670, se houver mais terminais receptores, então, o componente volta para o bloco 640 para selecionar o próximo terminal receptor, se não, o componente completa.
Conclusão
A partir do exposto, percebe-se que modalidades específicas do sistema de correção de erro foram aqui descritas com propósito de ilustração, mas que várias modificações podem ser feitas sem fugir do espírito e do escopo da invenção. Por exemplo, embora UDP tenha sido descrita como um tipo de protocolo com o qual o sistema de correção de erro 10 pode ser usado, muitos outros protocolos também podem ser usados, tais como Protocolo em Tempo Real (RTP) e Protocolo de Controle em Tempo Real (RTCP). Dessa maneira, a invenção não é limitada, exceto como pelas reivindicações anexas.