;(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

Ricardo Feltrin

Streaming já é o 2º maior ibope do país e só perde para Globo

Netflix se tornou a "queridinha" dos brasileiros e está afundando a TV paga - Netflix (Fonte: Reprodução)
Netflix se tornou a "queridinha" dos brasileiros e está afundando a TV paga Imagem: Netflix (Fonte: Reprodução)

Colunista do UOL

08/07/2020 13h14

Depois de derrotar toda a TV por em termos de audiência, o streaming segue como o "bicho papão" do século da TV aberta também.

Dados exclusivos obtidos por esta coluna fofa apontam que em junho, na faixa que vai entre 7h e 0h (faixa comercial) o consumo de streaming foi de 7,0 pontos e 15% de share no Brasil.

Ou seja um décimo de ponto a mais que o mês anterior. 15 em cada 100 aparelhos de TV ligados nesse período estavam consumindo conteúdo em streaming em suas mais diversas formas.

Atenção: o consumo obviamente deve ser ainda bem maior, já que a Kantar Ibope Media não revelou os dados de consumo por meio de celular e tablet.

Cada ponto nessa medição equivale a cerca de 250 mil domicílios sintonizados nas 15 maiores regiões metropolitanas do país.

Os concorrentes

De todas as emissoras abertas na faixa 7h à 0h (e também nas 24 horas) a única que tem maior audiência que o streaming é a Globo (15,0 pontos 32,6% de share).

A Record fechou junho com média 5,5 pontos e 12% de share; O SBT marcou 5,0 e 10,8%; a Band teve 1,5 ponto e 3,2%; por fim a RedeTV registrou 0,6 ponto e 1,4%

Na verdade o streaming "tomou" a segunda colocação de toda a TV por , que até pouco tempo atrás era, como conjunto, a vice-líder de ibope (somando-se todos os canais, claro).

Pois não é mais.

Em junho os canais pagos somados marcaram 6,3 pontos. Foram sete décimos a menos que o conteúdo em streaming.

É bom sempre lembrar que streaming não é apenas Netflix (embora a empresa seja de longe a mais consumida).

Isso inclui ainda YouTube, Amazon Prime, GloboPlay, PlayPlus e até eventualmente conteúdo adulto consumido pela internet (como o xvideos, por exemplo).

Também estão incluídas nesta medição conteúdos de VOD, streaming live ou sob demanda consumidos no aparelho de TV, além de dados de consumo do conteúdo televisivo consumido após 7 dias da sua transmissão linear. Mas o grosso, de fato, é o streaming.

Por outro lado esses dados da TV paga também não incluem seu consumo por meio de pirataria. Estima-se (moderadamente) que há 4 milhões de aparelhos que sintonizam TV pirata no país.

Oficialmente, hoje há cerca de 15,3 milhões de domicílios legalmente com TV paga no país. No final de 2014 eram quase 20 milhões.

Essa medição do streaming contempla apenas o público que o assiste por meio do aparelho de TV. Não está na mensuração os consumos por meio de celular e tablet.

Entre maio e junho, com a quarentena arrefecendo, o total de TVs ligadas entre 7h e 0h caiu de 48% para 46¨%.

Vejam como ficou o ranking de audiência no país em junho (7h à 0h)

Em pontos e share (%)

1 - Globo - 15,0 pontos e 32,6%

2 - Streaming - 7,0 e 15,1%

3 - TV paga - 6,3 pontos e 13,7%

4 - Record - 5,5 e 12,0%

5 - SBT - 5,0 e 10,8%

6 - Band - 1,5 e 3,2%

7 - RedeTV - 0,6 e 1,4%

Fonte: Mensuração da Katar Ibope Media obtida pela coluna por terceiros

Ricardo Feltrin no Twitter, Facebook, Instagram e site Ooops