Olá pessoal. Dúzias de chamadas diferentes são abertas diariamente em nosso suporte, desde perguntas simples "ajudam a configurar um cluster" a muito complexa "o fluxo não funciona, o fluxo às vezes gagueja", mas há perguntas das quais os olhos já estão se contraindo e todos os funcionários da empresa podem responder em detalhes.
E como as perguntas não param, o que significa que você pode responder aqui.
Por que o vídeo está atrasado?
Temos dois artigos no blog (
um ,
dois ) sobre este tópico, leia-os se você estiver trabalhando com vídeo e aqui darei uma resposta curta e abrangente:
O streaming moderno da Internet é um
protocolo HLS . Às vezes DASH, mas isso não é importante, porque ambos são segmentados.
Como isso funciona? O streaming de vídeo é "cortado" em arquivos pequenos (geralmente de 2 a 8 segundos, dependendo da dinâmica do conteúdo), 3-10 desses segmentos são acumulados e descritos por uma lista de reprodução especial, que é atualizada automaticamente quando o segmento antigo é excluído e um novo é adicionado. Tão simples. Mais segmentos - maior atraso, maior duração de cada segmento - maior atraso. 10-20 segundos é normal.
Por que isso é necessário? Por que armazenar tantos vídeos na memória do servidor de vídeo? A segmentação permite que o player não reaja à instabilidade da conexão com a Internet, não interrompa o vídeo ao mudar de uma rede Wi-Fi para uma conexão móvel. Se o vídeo não tivesse sido preparado com antecedência e compactado em arquivos separados, com o menor número de falhas ou falta de largura de banda, teríamos artefatos de vídeo na tela e a segmentação forneceria ao jogador cerca de 4-20 segundos para restaurar a conexão do jogador e carregar novos dados.
O que fazer se você precisar de um vídeo sem demora? Escolha um protocolo diferente se pretender organizar um bate-papo na Web, controlar o helicóptero via Internet, assistir câmeras de vídeo IP. Aqui estão alguns exemplos: WebRTC, MSE-LD, RTMP.
Como proteger o vídeo? Cole apenas no seu site
A tarefa é muito simples: o vídeo no site deve ser protegido contra inserção em outros sites, ninguém deseja pagar pelo tráfego de outra pessoa, o tráfego de vídeo é caro. E o vídeo pode ser privado e não deve ir além da sua conta pessoal.
Eu sempre tenho uma resposta para todas essas solicitações - você
precisa configurar o Securelink no seu site. A proteção de conteúdo não é possível unilateralmente - o site em si deve gerar links, você não pode apenas pegar e inserir um link estático no site.
O Securelink é uma tecnologia de proteção de link antiga e altamente eficaz. Muitos habruchitel conhecem um módulo especial para o Nginx - ngx_http_secure_link_module. Não usamos o Nginx, mas existe uma implementação semelhante e não menos eficiente, a única diferença está na ordem dos parâmetros.
Como isso funciona? O site gera um link
único e único com base nos dados do usuário. E o que o servidor da Web sabe sobre o cliente? É isso mesmo, este é o endereço IP, User-Agent, Cookie, o URL solicitado. Se o cliente estiver autorizado, nas variáveis da sessão você poderá obter outras informações, por exemplo, um ID de cliente exclusivo no banco de dados do serviço ou, por exemplo, o período de validade da assinatura.
Coletamos os parâmetros em uma linha e hash com seu algoritmo favorito, por exemplo, SHA1. Acontece um conjunto de caracteres inúteis. Por exemplo, o hash da cadeia “127.0.0.1Habr” seria: 70ebe94671dd21bd65f4a00dfd988adc83fe6bda.
Essa linha será transmitida ao streamer de vídeo e sua tarefa será verificar a validade do link, se ele foi gerado pelo seu site, não está “podre” e não é passado para terceiros. Como não há comentários do site, o streamer de vídeo deve gerar um hash usando os mesmos dados que o site usou. O streamer de vídeo também conhece o endereço IP do cliente, o conteúdo solicitado, mas não pode de forma alguma saber o ID do usuário ou a vida útil do link. Você precisará transferir esses dados diretamente para o link e usar a chave secreta para que ninguém possa gerar links para si.
Pegamos a linha "127.0.0.1Habr1540327100SECRET" e obtemos o SHA1 99fe961672c52aa3033b98b545ec2cdec93bf515 e agora formamos um link no formato:
example.com/Habr/index.m3u8?token=99fe961672c52aa3033b98b545ec2cdec93bf515-1540327100example.com é o seu servidor de vídeo, Habr é o vídeo solicitado, index.m3u8 é o nome padrão da lista de reprodução HLS, o token de valor é a sequência do servidor da web que geramos.
O streamer de vídeo extrai facilmente desses dados tudo o que é necessário para obter o mesmo hash: o endereço IP é lido da variável do servidor da web, o conteúdo solicitado da URL, a vida útil é do parâmetro token, a única coisa que falta é a chave secreta. registre-se no arquivo de configuração e mantenha em segredo.
Você não poderá enviar esse link para um amigo ou abri-lo em outro navegador - há um endereço IP na fórmula de hash e não poderá substituir a vida útil - então o hash não corresponderá.
Armadilhas
Eu realmente queria descrever em dois parágrafos, mas, em suma, não deu certo. Esse é o primeiro problema - nem todo mundo está pronto para investigar esses detalhes, porque é muito mais fácil inserir um link estático. Temos
exemplos prontos em nosso
site , portanto não deve haver um problema.
Geralmente, o site e o servidor da Web determinam incorretamente o endereço IP do cliente; isso é normal se redes CDN forem usadas, por exemplo, CloudFlare. Nesse caso, você precisa levar o endereço IP do cabeçalho correto, pode precisar da ajuda do provedor de CDN. Por exemplo, o CloudFlare possui CF-Connecting-IP.
Hora errada. O tempo incorreto em um dos servidores, combinado com as tentativas de minimizar a vida útil do link, geralmente leva a links quebrados. Também acontece que o usuário deixa a guia aberta por várias horas e não consegue reproduzir o vídeo devido ao curto tempo de vida.
Duração do link de 3 a 24 horas - isso é normal, eles estão protegidos de qualquer maneira e existem maneiras de limitar o número de visualizações simultâneas.
Em vez de um total
Nos diga nos comentários como contornar esse mecanismo de proteção de links?