
Desde os primeiros dias de trabalho em um sistema de vigilância por vídeo baseado em nuvem, encontramos um problema sem o qual era possível pôr um fim ao Ivideon - era o nosso Everest, escalar consumia muita energia, mas agora enfiamos um machado de gelo na coroa do rebus de plataforma cruzada.
O sistema de transmissão de áudio e vídeo pela Internet não deve depender do equipamento, dos clientes da Web e dos padrões que eles suportam, além de funcionar corretamente quando houver Conversores de Endereço de Rede e firewalls. O usuário da vigilância por vídeo na nuvem deseja acessar o serviço, mesmo que ele use câmeras analógicas, e prefere assistir a transmissões de vídeo ao vivo no dispositivo mais moderno.
É muito significativo que o usuário queira assistir ao vídeo com um atraso mínimo. Quase a única maneira de exibir vídeos de baixa latência em um navegador é usar o WebRTC (comunicação em tempo real na web). O WebRTC é um conjunto de tecnologias para transmissão de vídeo e áudio ponto a ponto nos navegadores, originalmente projetados para transmitir e reproduzir um fluxo de vídeo com baixa latência. Para isso, entre outras coisas, o protocolo UDP é usado.
Antes de dizer o que o novo mecanismo fornece ao usuário, lembramos por que e por que apoiamos as tecnologias HLS e pelo que decidimos seguir em frente.
Motor HLS: prós e contras
c )
A tecnologia HLS (HTTP Live Streaming) foi desenvolvida pela Apple, portanto, não é de surpreender que, pela primeira vez, seu suporte tenha aparecido em dispositivos dessa marca em particular. Até o momento, quase todos os decodificadores de televisão e muitos dispositivos em execução no sistema operacional Android também podem reproduzir imagens no formato HLS.
O mecanismo HLS usa o conhecido codec de vídeo H264 em combinação com fluxos de áudio AAC ou MP3 para transmissão de vídeo. Todo o fluxo de áudio e vídeo é empacotado em um contêiner de transporte MPEG-TS. Para transmissão via HTTP, as informações contidas no fluxo são divididas em fragmentos descritos nas listas de reprodução m3u8. E somente então, esses fragmentos, juntamente com as listas de reprodução, são transmitidos via HTTP. Dividir em fragmentos automaticamente significa um atraso em segundos. Esse recurso do contêiner MPEG-TS.
O mecanismo HLS também suporta fluxos multibit, Live / VOD.
As principais vantagens do HLS:- suporte embutido em todos os principais navegadores;
- facilidade de implementação (quando comparado com o WebRTC);
- é muito conveniente e eficiente organizar todos os tipos de transmissões para um grande público, pois você pode carregar segmentos em uma CDN uma vez.
Apesar de toda a simplicidade do mecanismo, nem tudo é tão suave quanto parece. O principal problema é que os desenvolvedores de players de terceiros se afastaram das recomendações da Apple, por exemplo, em termos de formatos de áudio suportados. Em particular, muitos desenvolvedores começaram a adicionar a capacidade de trabalhar com fluxos de áudio populares: vídeo mpeg2, áudio mpeg2 etc. Como resultado, tivemos que criar diferentes formatos de playlist para diferentes players.
Mas um dos maiores problemas com o mecanismo HLS é a alta latência na transferência de dados.
As origens dos "freios"
A principal razão para o alto atraso no HLS reside no fato de os programadores criarem um mecanismo para obter a imagem da mais alta qualidade. Portanto, os parâmetros do intervalo de quadros usado e o tamanho do buffer de reprodução simplesmente não são adequados para a transmissão de vídeo ao vivo. Por esse motivo, ocorre um atraso bastante alto na transmissão da sequência de vídeo, que pode ser de 5 a 7 segundos.
Por um lado, isso é um pouco, por exemplo, para quem assiste a um filme em um servidor de hospedagem de vídeo. Mas para sistemas de vigilância por vídeo, o atraso na transmissão de imagens pode ser muito importante.
Se você estiver observando um escritório em que os funcionários desligam os monitores uma vez por hora, um atraso de 5 segundos não importa. Mas as pessoas começaram a reclamar que, por exemplo, ao transmitir uma partida de futebol, o GOOOOOOL já estava escrito no bate-papo, mas isso não está no vídeo :). Já temos vários casos personalizados em que o Ivideon quase deve substituir o skype.
É possível anular o atraso no HLS? A resposta a essa pergunta soa como um discurso de um experiente lutador de ratos em uma palestra diante de disruptores novatos: "Os ratos não podem ser exterminados, mas seus números podem ser reduzidos a um mínimo razoável". Portanto, com um atraso no HLS, removê-lo para zero não funcionará, mas existem soluções no mercado que podem reduzir significativamente o atraso.
Corte raso
Outra desvantagem do mecanismo é o uso de arquivos de tamanho pequeno para transferência de dados. Parece que isso é ruim?
Quem tentou copiar um grande número de arquivos pequenos de um meio para outro, provavelmente percebeu que a velocidade de gravação de um conjunto desse tipo é muito menor do que um arquivo grande do mesmo tamanho. Sim, e a intensidade do acesso ao disco rígido aumenta significativamente, o que geralmente afeta negativamente o desempenho de todo o computador. Portanto, a transmissão de dados de vídeo na forma de pequenos fragmentos de 10 segundos também contribui para o aumento do atraso do mecanismo.
Resuma brevemente todos os prós e contras da tecnologia HLS.
Vantagens do HLS:- Capacidade de trabalhar com qualquer dispositivo. Você pode assistir a vídeos em qualquer dispositivo moderno, seja um smartphone, tablet, laptop ou PC de mesa. O principal é que o navegador da Web esteja atualizado e seja compatível com HTML5 e extensões de fonte de mídia.
- Ótima qualidade de imagem. A função de transferência de dados adaptativa usada permite alterar dinamicamente a qualidade da sequência de vídeo transmitida, dependendo da largura de banda da conexão com a Internet, enquanto o algoritmo procura manter a qualidade máxima.
- Não há necessidade de configuração complexa do equipamento do usuário.
Desvantagens:- Suporte limitado para trabalhar com o mecanismo em alguns dispositivos.
- Altos atrasos na transmissão de imagens.
- Forte aumento na sobrecarga e complexidade de otimização devido ao uso de arquivos pequenos. Devido à natureza do contêiner, nunca podemos obter um atraso menor que o tamanho do segmento.
As desvantagens do HLS superaram suas vantagens para nós e nos forçaram a procurar opções alternativas.
O que é o WebRTC?
c )
O WebRTC foi desenvolvido pelo Google em 2011 para transmitir vídeo e áudio entre navegadores e aplicativos móveis com latência mínima. Para isso, são utilizados o protocolo UDP padrão e algoritmos especiais de controle de fluxo. Hoje é um projeto de código aberto, com suporte ativo do Google e em desenvolvimento.
O WebRTC é um conjunto de tecnologias para transmissão ponto a ponto de vídeo e som. Ou seja, por exemplo, navegadores de usuário que usam o WebRTC podem transferir dados um para o outro diretamente, sem usar servidores remotos para armazenar e processar dados. Todas as informações também são processadas por navegadores e aplicativos móveis dos usuários finais.
A conveniência e os excelentes recursos dessa tecnologia foram apreciados pelos desenvolvedores de todos os navegadores populares. Hoje, o suporte ao WebRTC é implementado no Mozilla Firefox, Opera, Google Chrome (e em todos os navegadores baseados no Chromium), bem como em aplicativos móveis para Android e iOS.
Com todas as suas vantagens indiscutíveis, o WebRTC tem várias desvantagens significativas.
Dificuldade em escolher
O WebRTC é muito mais complexo em termos de rede porque se trata de P2P. É difícil depurar, testar, pode se comportar de forma imprevisível. Nesse caso, precisamos superar o NAT e o firewall, precisamos fornecer trabalho em redes onde o UDP está bloqueado.
A implementação do WebRTC do Google é muito difícil de usar. Existe até uma empresa inteira que fornece serviços de montagem do SDK. Além disso, a implementação do Google foi muito difícil de integrar ao nosso sistema, para que não transcodificasse todos os vídeos.
No entanto, há muito tempo desejávamos dar aos usuários a oportunidade de trabalhar com uma sequência de vídeo "ao vivo" de pleno direito e minimizar o atraso da imagem na tela dos próprios eventos. Além disso, tínhamos o desejo de tornar o uso de câmeras PTZ mais confortável, onde os atrasos são críticos.
Considerando que outras implementações da luta contra defasagens até agora têm funcionalidade limitada e funcionam notavelmente pior, decidimos usar o WebRTC.
O que fizemos

A implementação adequada da plataforma WebRTC não é uma tarefa fácil. Qualquer erro de cálculo ou imprecisão pode levar ao fato de que atrasos na transmissão de sequências de vídeo não apenas diminuem em comparação com outras plataformas, mas também aumentam.
Para que o WebRTC funcione corretamente, primeiro é necessário executar a modernização tecnológica da pilha para trabalhar com vídeo na web. O que nós fizemos.
Primeiro, implementamos o servidor de protocolo de sinalização WebRTC no topo do Websocket e também implantamos o servidor de ponto WebRTC na nuvem com base no SDK do webrtc.org. Sua tarefa é distribuir fluxos de vídeo para os pares WebRTC do cliente no formato H.264 + Opus / G.711 sem transcodificação de vídeo.
Escolhemos o Websocket como o protocolo de sinalização, porque ele já possui suporte de qualidade em todos os navegadores populares. Devido a isso, é possível reduzir significativamente não apenas as despesas gerais de desenvolvimento, mas também não desperdiçar tempo e recursos em repetidos handshake TCP e TLS em comparação com o AJAX.
O fato é que, por padrão, o WebRTC não fornece o protocolo de sinalização necessário para a configuração, suporte e interrupção adequados da comunicação de vídeo em tempo real entre os aplicativos de origem e cliente.
E para implementar independentemente a tecnologia de sinalização, precisamos desenvolver nosso próprio servidor de sinal com suporte a vários protocolos da web (Websocet, WebRTC). E também com a capacidade de gerenciar com segurança sessões e notificações em tempo real, gerenciamento de vídeo e muitos outros parâmetros.
Superamos as limitações do P2P reduzindo o atraso não devido ao P2P, mas devido ao UDP e ao controle de fluxo que visa reduzir o atraso. Isso também é incorporado ao WebRTC, pois o principal caso de uso são as conversas p2p através do navegador.
No cliente móvel, implementamos o player usando o SDK do webrtc.org, porque somente nele o controle de fluxo é implementado corretamente, todos os esquemas conhecidos de Correção de erro de encaminhamento (FEC) e o mecanismo para reenviar pacotes para todos os navegadores é implementado corretamente. Também é importante que o SDK webrtc.org seja desenvolvido ativamente pelo Google.
Qual é o resultado da implementação do WebRTC?
Para assistir ao vídeo ao vivo das câmeras, adicionamos à nossa conta um novo player otimizado baseado no WebRTC. Ele fornece imagens de vídeo de alta velocidade e elimina completamente o problema de acúmulo de atraso à medida que o tempo de visualização aumenta.
Depois de implementar o suporte WebRTC no serviço de nuvem Ivideon, podemos dizer com segurança que agora nossos clientes podem assistir a vídeos ao vivo de pleno direito. Agora, o atraso na transmissão de imagens não excede um segundo! Para comparação, o mecanismo HLS anterior forneceu a entrega de vídeo com um atraso de 5 a 7 segundos. A diferença na velocidade da demonstração de vídeo é muito significativa e o usuário notará isso imediatamente após começar a trabalhar com nosso serviço de vídeo.
Como esperávamos, a implementação do novo player nos permitiu aumentar a capacidade de resposta do PTZ e a comunicação de voz com a câmera.

Há apenas um ponto sutil que queremos chamar atenção. O novo player WebRTC ainda está no modo de teste. E é por isso que não o conectamos a todos os nossos clientes por padrão. Mas você pode ativá-lo ativando o item correspondente nas configurações da câmera (para isso, você precisa acessar sua
conta pessoal ).
Recursos da implementação do WebRTC no serviço Ivideon

Atualmente, o WebRTC ainda é uma tecnologia experimental. Seu suporte ainda não foi implementado corretamente em todos os navegadores e dispositivos do usuário, e também não em todas as câmeras.
Isso explica o fato de ainda não termos tornado o WebRTC player o padrão padrão para todos os usuários.
Por enquanto, recomendamos o uso do WebRTC apenas nos navegadores Google Chrome. Versões recentes do Firefox e Safari também suportam essa tecnologia, mas, infelizmente, ainda são instáveis.
Ainda não implementamos o suporte WebRTC para navegadores em dispositivos móveis. Agora, se você fizer login a partir de um dispositivo móvel e ativar o WebRTC, esse modo não funcionará. No entanto, o WebRTC está em nossos aplicativos móveis para
Android e
iOS .
E concluindo a história sobre os recursos da implementação do WebRTC em nosso serviço, observamos mais dois pontos sutis.
Em primeiro lugar, a tecnologia está focada na transmissão de vídeo ao vivo em tempo real. Portanto, se a largura de banda do seu canal não for suficiente para a transmissão de vídeo, você notará uma queda nos quadros (com o HLS, você perceberá o desbotamento do vídeo e um aumento no atraso, enquanto os quadros não cairão), mas o vídeo ainda será transmitido em tempo real.
Em segundo lugar, como a tecnologia foi projetada para trabalhar com vídeo ao vivo em tempo real, não a usamos para trabalhar com dados de vídeo arquivados.
Outras alterações de serviço
O Flash não está mais envolvido no mecanismo de seleção automática de mecanismo. Você ainda pode usar esse player, mas para isso, selecione-o manualmente nas configurações da conta ou da câmera. Isso não é moda, apenas segundo as estatísticas de nosso serviço de usuários que trabalham com Flash, praticamente não há mais. E, na tentativa de determinar se o navegador do usuário é compatível, perdemos cerca de 2 segundos de tempo precioso.
Aqui está um breve resumo das alterações que esperam por você em nosso sistema de vigilância por vídeo baseado em nuvem e conta pessoal. Fique atento e fique atento!