;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Liga dos Campeões - 2021/2022

HBO Max não transmite jogos da Champions e frustra torcedores: 'Decepção'

Plataforma de streaming irritou torcedores ao não exibir, por alguns minutos, quatro partidas da Champions League - Reprodução
Plataforma de streaming irritou torcedores ao não exibir, por alguns minutos, quatro partidas da Champions League Imagem: Reprodução

Bruno Madrid

Do UOL, em São Paulo

24/11/2021 17h39Atualizada em 24/11/2021 19h27

A HBO Max, plataforma de streaming que transmite alguns jogos da atual edição da Champions League com exclusividade, frustrou os torcedores de diversos clubes na tarde de hoje.

O motivo? O site não exibiu, por alguns minutos, ao menos quatro partidas anunciadas: Manchester City x PSG, Sheriff x Real Madrid, Atlético de Madri x Milan e Liverpool x Porto.

O erro, que deixou os fãs "no escuro", não atingiu apenas o Brasil: no Twitter, dezenas de reclamações de torcedores foram vistas em outros países, como no México.

Aos poucos, o problema foi normalizado: primeiro, o jogo do Atlético de Madri ou a ser transmitido em uma chamada da reprise de Inter de Milão x Shakhtar - enquanto isso, City x PSG estava disponível no catálogo antigo de Besiktas x Ajax.

Minutos depois, a partida do Real Madrid foi ao ar corretamente na HBO Max já com 20 minutos do 1° tempo, assim como o jogo entre ses e ingleses. Por outro lado, o confronto Liverpool x Porto foi corrigido somente por volta dos 40 minutos da etapa inicial.

No intervalo de City x PSG, exibido também na TNT Sports (parceira da plataforma de streaming), a apresentadora Taynah Espinoza abordou a falha falha. "A gente pede desculpas por todos os problemas técnicos, mas agora está tudo resolvido", disse ela.

O perfil do HBO Max no Twitter também se manifestou: "Todos os jogos da Champions League estão normalizados e disponíveis na HBO Max. Obrigado pela compreensão".

Ao UOL Esporte, a empresa afirmou que está "apurando as razões que levaram a esta oscilação" para realizar as "melhorias necessárias".

"A HBO Max está ciente de que alguns usuários enfrentaram inconsistências ao assistir aos jogos das 17h, da rodada da UEFA Champions League, na plataforma nesta quarta-feira. A transmissão foi normalizada no segundo tempo e a equipe técnica está apurando as razões que levaram a esta oscilação para realizar as melhorias necessárias. A HBO Max tem como objetivo oferecer o melhor serviço e experiência de streaming, por isso estamos em contínuo aprimoramento da plataforma", diz o texto.

Veja algumas reclamações: