“Smart” Streaming

Bom pessoal, resolvi inaugurar meus posts aqui no blog para contar um dos desafios mais recentes que me propus a investigar…. implementar um Intelligent Streaming para o Flash (Live Streaming via HTTP)! A primeira coisa que deve ter vindo na cabeça de vocês, pelo menos daqueles que já conhecem as tecnologias Windows Media e Flash Vídeo, é: não dá pra fazer multi-target em Flash. Sim, é verdade… e isto é uma grande desvantagem do Flash Vídeo. Para aqueles que não conhecem, então, vamos à uma rápida explicação:

“Intelligent Streaming é a capacidade que o Windows Media tem de aumentar ou reduzir o bitrate do vídeo de acordo com a disponibilidade de banda do usuário. Em outras palavras: menos banda, menor bitrate, menor qualidade; mais banda, maior bitrate, maior qualidade; tudo isso “on the fly” ”

Bom, teoricamente, para fazer isso em Flash, seria necessário ter dentro do encapsulamento FLV, N targets diferentes de vídeo, o que não é possível. Desta forma, resolvi batizar a solução que pensei de “Smart” Streaming… ela deve ser esperta o suficiente para tomar as decisões certas.

Antes de explicar minha idéia, vamos a motivação: “Não podemos comprometer os usuários com pouca banda em prol de um vídeo de altíssima qualidade, da mesma forma que não podemos entregar um vídeo de qualidade média para um usuário capaz de ver um vídeo com uma qualidade melhor”. Além disso, nosso amigo Luiz vem desenvolvendo em seu projeto pessoal uma alternativa para Live Streaming em Flash via HTTP, sem utilizar o Flash Media Server. Uma das features que poderia impulsionar ainda mais a utilização do que ele vem desenvolvendo é justamente garantir uma melhor experiência para o usuário.

Assim, minha idéia para o “smart” streaming em Flash consiste basicamente em controle de buffer no cliente (algo que eu já havia estudado no FMS para Fast Start e Fast Cache). A utilização de um streaming em flash via HTTP, torna o consumo do vídeo pelo cliente um processo idêntico ao download progressivo, ou seja, o flash player acha que está recebendo um vídeo On Demand via progressive download, mas na verdade está pegando um conteúdo Live via Streaming. Este fato de o player “achar” que o conteúdo é On Demand, nos permite, teoricamente, utilizar algumas classes do Flash que verificam a quantidade de bytesLoaded, etc, as mesmas que a maioria dos players do mercado usam para só dar start no vídeo quando já foi realizado um determinado buffer inicial. Assim, se realizarmos uma análise do buffer no cliente, podemos identificar se o mesmo tem ou não banda suficiente para receber determinado streaming. Caso seja identificado um “esvaziamento” do buffer, então devemos trocar a URL do vídeo para uma onde seja feito um streaming com menor bitrate. Da mesma forma, caso o buffer permaneça cheio, podemos trocar o usuário para um vídeo com maior bitrate. A desvantagem, neste caso, seria a necessidade de realizar um encoding/delivery separado para cada target. Além disso, a troca entre os targets não seria completamente transparente para o usuário, porém, é possível minimizar os impactos dela através do gerenciamento do buffer inicial.

Durante os testes do Flash Media Server, cheguei a implementar um mock-up com idéia semelhante, mas com um processo de checagem de banda muito mais eficiente, graças ao FMS.

Com esta técnica, evitamos que um usuário não consiga visualizar um conteúdo ao vivo porque não tem banda, da mesma forma que não reduzimos a qualidade do vídeo para uma boa parcela dos usuários que possuem MegaFlash e afins. Além disso, poderíamos utilizar a solução em desenvolvimento de streaming via HTTP, eliminando a necessidade de comprar licenças FMS.

Bom, como eu disse, este é apenas um conceito, uma atividade que ainda vai me entreter por alguns dias… Minha idéia é postar aqui a evolução deste protótipo, para que vocês comentem e sugiram alternativas que posso não ter pensado!

3 Responses to ““Smart” Streaming”

  1. Simone Ferraz Says:

    Muito interessante seu projeto.
    Realmente, eu como cliente e tendo uma ótima banda iria gostar de ver vídeos com a qualidade superior mesmo.
    Parabéns. Virei aqui sempre ver o andamento do projeto.

  2. falcao Says:

    Tenho alguns links relacionados aqui, veja se algum é interessante:

    http://osflash.org/red5
    http://www.inlet-media.de/flvtool2 - FLV MetaData Updater.
    http://www.flashcomguru.com/index.cfm/2005/11/2/Streaming-flv-video-via-PHP-take-two
    http://blog.lighttpd.net/articles/2006/03/09/flv-streaming-with-lighttpd
    http://blog.kovyrin.net/2006/10/08/lighttpd-memcoder-flvtool-for-streaming/
    http://blog.kovyrin.net/2006/10/14/flash-video-flv-streaming-nginx/

  3. Rafael Pereira Says:

    Valeu pelos links…

Leave a Reply