Configurando seu Próprio Site de Vídeo On Demand com PHP, Parte 1: Base

Vídeo on demand não é apenas para entretenimento -- Construir uma biblioteca de vídeo on demand pronta para corporação com ferramentas de software livre

Configurar seu próprio site de vídeo on demand não precisa ser complicado. Faça upload de alguns vídeos e disponibilize-os para as pessoas assistirem — muito fácil. Mas se você fizer muitos vídeos, precisará de uma maneira de mantê-los organizados. Esta série em três partes "Setting up your own on-demand video site with PHP" o guia por tudo que precisar conhecer para criar vídeo otimizado para a Web, assim como criar um aplicativo PHP que manterá seus vídeos organizados e acessíveis. Aqui na Parte 1, preparamos a base, montando e instalando os componentes necessários e reunindo e convertendo o vídeo. A Parte 2 constrói a aplicação básica. E na Parte 3, você cria uma interface com o usuário suave e integra o exemplo ao YouTube.

Duane O'Brien, PHP developer, 自由职业者

Duane O'Brien é um canivete suíço tecnológico desde quando The Oregon Trail era somente texto. Sua comida favorita é sushi. Ele nunca esteve na lua.


nível de autor Contribuidor do
        developerWorks

Katie Horn, Developer, 自由职业者

De acordo com sua mãe, Katie Horn gastou muito dos seus 28 anos no computador. Ela é formada em ciência da computação pela Chapman University. Após a faculdade, a maioria de seus empregos tem "sistemas" ou "engenheira" em alguma parte do cargo. Apesar de uma graduação de proficiência na área, ele preferiria nunca mais ser chamada de "administradora de rede".



Will Robot, PHP Developer, Freelance Writer

Will Robot é um amador semiprofissional em muitas coisas. Ele vive com quatro ou cinco gatos e acha que qualquer coisa pode ser melhorada com a inclusão de um laser e pelo menos dois LEDs que piscam.



01/Abr/2008

Antes de Começar

Esta série foi escrita com o desenvolvedor em mente. Você deve se sentir confortável em trabalhar com PHP e aplicativos da Web. Você não precisa ser um especialista para seguir esta série, mas não será usado muito tempo para explicar a sintaxe de PHP e os conceitos de aplicativos da Web. Se não estiver familiarizado com nenhum dos dois, mas estiver disposto a aprender, sinta-se à vontade para entrar de cabeça. Não seria ruim ter algum entendimento básico de vídeo digital, mas vamos explicar a maior parte do que você precisa saber.

Sobre esta Série

A Parte 1 cobre a junção das partes, a instalação dos componentes, como lidar com conversão de vídeo e a preparação para a aplicação. Preparamos bem a base aqui. Há muito a se aprender sobre vídeo digital e vamos precisar configurar para fazer toda a codificação na Parte 2.

Na Parte 2, você constrói uma aplicação básica para gerenciar os arquivos transferidos por upload e as tags. Você estará usando uma estrutura PHP — CakePHP para ser exato — para ajudar a iniciar esse processo. A aplicação não será outro site de compartilhamento de vídeo. O foco estará em gerenciar seus próprios arquivos e disponibilizá-los para que as pessoas assistam.

Na Parte 3, são incluídos alguns recursos avançados e criada uma interface com o usuário suave. Vamos suavizar a UI e verificar o uso de APIs de sites de compartilhamento de vídeo populares para disseminar seus vídeos. Se a Parte 1 é sobre pegar o jeito e a Parte 2 é sobre fazer tudo funcionar, então, a Parte 3 é sobre torná-lo incrível.

Sobre este Tutorial

Na Parte 1 de uma série em três partes sobre como criar um site de vídeo on demand com PHP, começamos verificando as diferentes opções de vídeo digital e suas nuances específicas. Ao criar vídeo para a Web, o problema geral que precisa-se manter em mente é se deseja que seu vídeo seja pequeno e fácil de ser transferido por download ou deseja que tenha a melhor qualidade possível. Também vamos verificar a conversão de seu vídeo para o formato Flash Video (FLV) e examinaremos algumas opções para fluxo. Não há tanta codificação a ser realizada neste estágio, mas precisamos instalar a estrutura e configurar o banco de dados.

Requisitos do Sistema

Para trabalhar com vídeo digital nesta série, será necessário configurar algumas coisas (instalação de componentes básicos não será coberta aqui):

  • Algum conteúdo de vídeo digital — Pode ser vídeo que você encontrou, filmou ou importou de outro meio.
  • Um caixa Microsoft® Windows® XP — Os exemplos fornecidos usam algum software escrito para o Windows XP.
  • FFmpeg é um utilitário de conversão de vídeo de linha de comando de software livre.
  • Riva FLV Encoder V2.0 para Windows é um utilitário de conversão de vídeo gratuito pelos primeiros 30 dias de uso.
  • Wikipedia para programas de conversão de FLV para outras plataformas.
  • Red5 é um servidor Flash de software livre baseado em Java™.
  • JW FLV Media Player V3.15 é um reprodutor de mídia Flash pequeno e integrável.

Para a aplicação da Web, também precisará de:

  • Um servidor HTTP que suporta sessões (e preferivelmente mod_rewrite) — Esta série foi escrita usando a Apache V1.3 com mod_rewrite ativado.
  • A versão beta 1.2 de CakePHP.
  • PHP V5.1.4 ou superior — Nem todas as estruturas que estão sendo examinadas requerem esse nível de release de PHP, mas todas as estruturas usarão a mesma instalação PHP. Esta série foi escrita usando PHP V5.2.3.
  • Uma versão razoavelmente recente de MySQL — Diversas outras opções de banco de dados estão disponíveis e são suportadas, mas esta série e a aplicação de amostra foram escritas usando MySQL V5.0.37.

Se não souber nada sobre como escrever código, PHP, bancos de dados, etc., achara está série desafiadora. Você deve primeiro pegar um pouco o jeito de escrever aplicações da Web em PHP. (Consulte Recursos para obter links para cada projeto.)


Os Pontos Positivos e Negativos de Vídeo Digital

Caso tenha transferido o conteúdo do vídeo digital por download, está dolorosamente ciente dos diferentes formatos de vídeo, alguns muito obscuros. Antes de poder entrar de cabeça no compartilhamento de seus vídeos, é necessário entender algo sobre os formatos que provavelmente encontrará, assim como algumas considerações que precisam ser feitas ao iniciar a conversão de seu vídeo de um formato para outro.

Entrando de Cabeça

Trabalhar com vídeo digital pode ser uma proposição intimidadora. Há uma gama vertiginosa de formatos de vídeo lá fora e ferramentas incontáveis para editar, converter, desdobrar, alongar e mutilar os mesmos. Para somar à diversão, muitas das informações podem parecer confusas ou até mesmo propriamente contraditórias, deixando-o desorientado no mar de sobrecarga de informações. No entanto, como nossa meta é criar fluxo de vídeo através de nosso Web site e não distribuir vídeo de qualidade DVD, podemos deixar de lado muitos conceitos esotéricos e concentrar nos problemas práticos.

Obtendo o Vídeo

Se estiver obtendo seu vídeo de uma antiga filmadora analógica que grava em fita, precisará de uma placa de captura de vídeo ou um dispositivo USB ou de captura de vídeo Firewire externo. Caso tenha uma câmera de vídeo digital que suporta conversão de sinal analógico para digital, o vídeo antigo pode ser executado através de sua câmera e em seu computador como se tivesse vindo da câmera DV.

Se estiver trabalhando a partir de uma filmadora digital, as informações já são digitais e tudo que precisa ser feito é conectar sua câmera a seu computador. Verifique em seu manual as instruções sobre como transferir seu vídeo para seu sistema.

Se não tiver uma câmera digital, é possível usar vídeo pré-existente de origens como o Internet Archive (consulte Recursos) ou outros sites de metragem de filme gratuitos ou baratos. É possível criar até mesmo apresentações de slide em vídeo a partir de fotos em muitas ferramentas de edição, incluindo software que pode ter sido fornecido com seu sistema.

Formatos de Arquivos

Parece que há um número infinito de formatos de arquivos e não há fim à quantidade de detalhes que poderiam ser obtidos em cada um. Vamos reduzir àqueles com os quais mais provavelmente iremos lidar para vídeo digital. Os formatos mais comuns:

  • DV e HDV são formatos típicos para câmeras de vídeo e são amplamente suportados por software em muitas plataformas. HDV é essencialmente um arquivo DV de resolução mais alta.
  • AVI é um formato comum da Microsoft com suporte em outras plataformas, apesar de esse formato ser considerado um tanto quanto desatualizado já que outros formatos, incluindo o formato WMV mais novo da Microsoft, têm qualidade semelhante com um tamanho de arquivo menor.
  • MOV é o formato do Apple Quicktime e é amplamente suportado na maioria das plataformas, tornando-o uma opção popular. Esse formato era o formato de fluxo da Web de fato de opção até surgir FLV.
  • MP4 é um formato de arquivo compacto com som acima da média. Esse formato é popular para uso com dispositivos móveis e é útil em muitas plataformas, mas pode-se ter problemas usando-o em sistemas mais antigos.

O último formato a mencionar é o Flash Video (FLV). Vamos converter nosso vídeo para o formato FLV para criar o fluxo a partir de nosso site. Agora, com o Flash player instalado na maioria dos sistemas conectados à Web, FLV é um dos formatos mais suportados, o que significa que mais pessoas poderão assistir seu vídeo. FLV também fornece acesso a uma ampla gama de reprodutores de mídia baseados em Flash, que serão úteis posteriormente.

Tamanho vs Qualidade

Criar o fluxo de vídeo digital é uma batalha de compromisso. O ideal seria apresentar um vídeo de alta resolução em tela cheia com pouca ou nenhuma compactação indistintamente de um DVD. É claro que, no mundo real, isso significa tempos de download longos, então, vamos dar uma olhada em todos os fatores importantes envolvidos.

Quando estiver convertendo seu arquivo de vídeo de seu formato original para seu FLV pronto para criar o fluxo, há três fatores que podem ser controlados: tempo, tamanho do quadro e compactação. Cada um desses é um elemento do arquivo que contém informações que podem ser ajustadas para reduzir o tamanho de seu arquivo.

Tempo

Tempo é o mais direto. Se tiver um vídeo que tenha o tamanho duas vezes o desejado, simplesmente corte metade dele. É claro que isso nem sempre pode resultar em um vídeo usável, mas é algo sobre o qual tem controle quando estiver filmando sua metragem, portanto não deve ser totalmente descartado. Outra opção em questão de tempo é que em vez de remover partes do vídeo, poderia simplesmente mostrar menos da mesma coisa. Um arquivo de vídeo é essencialmente uma série de imagens paradas mostradas em sequência, portanto, isso pode ser feito reduzindo a taxa de quadros, mostrando menos imagens por um período de tempo mais longo. O compromisso aqui é que quanto menos quadros por segundo, mais cortado e trêmulo fica o vídeo. Leve isso muito longe e você acaba com um show de slides.

Tamanho do Quadro

O tamanho do quadro é sua próxima consideração. Conforme mencionado, seu vídeo é uma série de quadros, cada um sendo uma grade de pixels consumindo espaço e memória. Não deveria ser um passo intuitivo que se você remover alguns desses pixels estará reduzindo o tamanho de seu arquivo consideravelmente. Cada pixel cortado libera um pixel de espaço multiplicado pelo número de quadros do arquivo. Simplesmente lembre-se ao reduzir o tamanho de cortar a mesma quantidade da altura e da largura para manter a mesma forma. Você deve se lembrar da época de vídeos do tamanho de um selo de carta no meio de enormes telas vazias. Não há mais necessidade de chegar a esse ponto. Um destino de aproximadamente 640x480 pixels é um bom tamanho para a Web nos dias de hoje, portanto, não é necessário sacrificar muito. É claro que há uma compensação aqui, também. Ao eliminar esses pixels, não está apenas cortando-os nas laterais (bem, poderia, mas isso resultaria em alguns vídeos estranhos). Você está retirando uma quantidade de informações e realizando uma média para tornar a mesma imagem menor. A imagem não conterá o mesmo nível de detalhe e caso pegue um arquivo muito grande e torne-o muito pequeno, poderá obter alguns artefatos desagradáveis. Como um à parte, também é possível pegar um vídeo pequeno e deixá-lo maior, mas os resultados são geralmente muito piores do que simplesmente deixá-lo do tamanho que é.

Compactação

Nosso último elemento é compactação. Vamos ignorar grande parte do assunto por ora e se ater aos pontos mais relevantes. Em uma uma imagem digital, a compactação é feita procurando informações que podem ser removidas sem que percebamos. Áreas de informações repetitivas — pixels que são os mesmos ou semelhantes — são substituídas por uma descrição da área de forma que uma aproximação possa ser mostrada a nós quando abrimos a imagem. Um exemplo seria uma céu azul. A área que forma o céu pode conter milhares de azuis diferentes, mas apenas percebemos alguns realmente. Portanto, a compactação pega essas áreas, efetua uma média e faz dump de todos aqueles azuis que não vemos realmente, toma nota das áreas que devem ser preenchidas com o mesmo azul e, na próxima vez que abrirmos a figura, mostra um céu mais simples.

Com nossa série de imagens, a compactação também pode funcionar na dimensão de tempo. A mesma forma que uma área simples pode ter a média efetuada, um fluxo de informações também pode. Como um pixel pode não mudar muito quadro a quadro, por que não substituir o fluxo de 1.000 pixels azuis semelhantes por uma instrução para simplesmente não alterá-lo nos próximo 999 quadros? É claro que se muita compactação for usada, isso pode dar uma aparência estranha a seu vídeo. Provavelmente já assistiu vídeos nos quais grandes áreas simples ficam estáticas até que a forma em bloco de algo em movimento passa sobre elas. Isso pode ser causado por se aplicar muita compactação.

Portanto, com esses conceitos em mente, podemos seguir em frente para a conversão de seu arquivo a partir de seu formato original para .flv para que seja usado em seu Web site.

Convertendo para FLV

Há uma boa quantidade de programas de conversão de vídeo disponíveis. O utilitário de linha de comando de software livre FFmpeg (consulte Requisitos do Sistema) poderia ser usado diretamente, mas o projeto tem uma política de nunca cortar releases para apresentar capturas instantâneas diárias do código fonte como se encontra. Portanto, não recomendamos usar FFmpeg, a menos que tenha algum tempo de sobra, esteja confortável em fazer download e manipular arquivos com extensões como .tar.bz e tenha um compilador de C à mão.

Felizmente, há programas freeware por aí que usam FFmpeg para fazer todo o trabalho em si, mas juntam tudo em uma GUI relativamente suave com um belo instalador fácil e simples. Para os propósitos deste artigo, vamos usar um desses programas: Riva FLV Encoder V2.0 para Windows (consulte Requisitos do Sistema). Para aqueles que não são usuários do Windows, pode achar útil verificar o que a Wikipedia tem a dizer sobre os programas de conversão de FLV disponíveis.

Riva é simples o suficiente de forma que principiantes razoavelmente aventureiros poderão transformar vídeos curtos em arquivos FLV decentes em questão de minutos da instalação. Depois de ativar o programa, simplesmente use-o para navegar até o vídeo que deseja codificar e clique no botão Codificar perto na parte inferior da tela. Após terminar de trabalhar em seu vídeo (pode levar algum tempo — mais tempo para vídeos mais longos), será possível visualizar o FLV que acaba de fazer, clicando no botão Visualizar que acaba de ser ativado na parte inferior da tela. Agora, que já verificou que é realmente simples, podemos relaxar e começar a fuçar um pouco.

Figura 1. O Riva FLV Encoder
O Riva FLV Encoder

Uma das primeiras coisas que se deve observar é que o Riva FLV Encoder é fornecido com pré-configurações de codificação de vídeo, presumivelmente baseadas em largura de banda esperada disponível para diferentes velocidades de conexão. Como nossa meta é produzir um vídeo adequado para criar o fluxo para uma grande variedade de diferentes configurações, podemos ignorar com segurança sua pré-configuração "Off-line" e direcionar a lista para algo um pouco mais realista.

A pré-configuração de ISDN do Riva é 240x180, com 15 quadros por segundo e uma taxa de bits de 96 Kbps. Em contraste, a pré-configuração de DSL fica em 640x480, com 25 quadros por segundo e uma taxa de bits de 360 Kbps. Provavelmente, deve querer ficar em algo entre esses dois extremos, portanto, é seguro pensar nessas especificações como os limites inferior e superior, fora dos quais provavelmente não deseja divagar (a menos que realmente deseje). YouTube, por exemplo, codifica vídeos em 320x240, com uma taxa de quadros variável e uma taxa de bits ligeiramente variável, em torno de 310 Kbps.

Infelizmente, não há nenhum conjunto de números "certo" universal que sempre produz um resultado ideal para tudo. A codificação de vídeo sempre funciona melhor quando há tempo para refinar o processo caso a caso. Imitar as configurações populares fornecerá algo que provavelmente funcionará de forma satisfatória, mas um processo de codificação não humanizado é incapaz de assistir o vídeo posteriormente para assegurar que ainda comunique o que deve. Até alguém poder gravar um codificador automático que possa fazer coisas como validar sincronização cômica, o processo de codificação permanecerá no estado em que se encontra: um ato de malabarismo complicado de forma variável.

Algumas Observações Adicionais sobre Codificação

De forma geral, os vídeos com menos movimento geral podem ter uma taxa de quadros mais alta sem tirar muito da qualidade da imagem e será, portanto, muito mais fácil de codificar de maneira satisfatória. Infelizmente, o oposto também é verdadeiro: vídeos que têm muita movimentação interessante provavelmente apresentam problemas, como a imagem repentinamente se transformar de algo perfeitamente discernível em uma massa de manchas coloridas, exatamente no ponto em que a ação devia ficar boa.

O tamanho da imagem escolhido para o qual converter deve ter a mesma proporção de aspecto que seu vídeo de origem ou acabará enquadrado incorretamente. Geralmente, na América, você estará trabalhando com o vídeo NTSC, que possui uma proporção de aspecto 4:3, enquanto que PAL da Europa é 5:4. A maioria dos vídeos HD tem uma proporção de aspecto nativo de 16:9. Além disso, você irá descobrir que a imagem quase sempre sai mais limpa se a matemática for mais fácil de executar. Por exemplo, vamos imaginar que você queira reduzir um tamanho de exibição de um vídeo. Se chegar a seu tamanho de destino dividindo a largura e a altura do original por 2, o codificador poderá eliminar linhas e colunas de pixels alternadas para obter seu tamanho desejado. Isso é fácil. Se, em vez disso, você decidir dividir o tamanho do original por, digamos, 3/2, o codificador precisa descobrir como deseja eliminar metade dos pixels para cada linha completa que está mantendo. Isso acaba realizando muitas médias e pode resultar em imagens que são muito menos limpas do que o vídeo ligeiramente menor gerado com uma matemática mais conveniente.

Provavelmente seu vídeo de origem é entrelaçado se tiver sido filmado usando um dispositivo de gravação de vídeo primeiramente direcionado a emitir saída diretamente para pré-HDTV. Caso tenha precisado converter sua imagem de analógica em digital, provavelmente estará entrelaçada. O Riva FLV Encoder pode "desentrelaçar" seu vídeo e, como a prática de entrelaçar vídeo era destinada ao uso para televisão e não faz sentido algum na grande maioria de exibições de computador, provavelmente irá querer isso. Caso não tenha certeza se entrelaçou o vídeo ou não, provavelmente é muito mais fácil tentar codificar de ambas as formas e comparar os resultados, em vez de começar a procurar seus manuais de hardware perdidos.


Colocando seu Vídeo por Aí

OK— então, pegou a manha de formatos de vídeo, pode converter seu vídeo para FLV e tem uma boa ideia do que deve fazer para manter seus arquivos de vídeo com um tamanho razoável. Agora, é necessário dar uma olhada em como colocar seu vídeo por aí para as pessoas verem. Quando chaga a hora de entregar seu vídeo, há algumas opções. Pode tentar muito evitar que seus arquivos de vídeo sejam facilmente disponibilizados para download ou pode controlar o que é distribuído, controlando o que é disponibilizado para o mundo. Ambas as opções tem seus aspectos positivos e negativos. Simplesmente lembre-se de que está apenas colocando um arquivo em um servidor para que outras pessoas façam download — é um pouco mais que isso.

Controle de Entrega e Fluxo

Não é necessário visualizar um arquivo FLV através de um fluxo. Você poderia permitir que os usuários fizessem download do arquivo e visualizassem o mesmo diretamente em suas máquinas, mas o vídeo ficaria fora de seu controle e solto no mundo. Poderia incluir algum controle de volta entregando o vídeo FLV integrando tudo em um arquivo Flash. No entanto, agrupar seus vídeos individualmente em seus próprios arquivos SWF não é escalável. Seria necessário construir manualmente um novo reprodutor Flash separado toda vez que tivesse um novo vídeo. Isso é comparável a comprar um novo reprodutor de DVD toda vez que alugar um filme.

Isso nos deixa com duas opções de fluxo: RTMP e HTTP de download progressivo.

Real-Time Messaging Protocol (RTMP) é o protocolo de fluxo da Macromedia. Para poder publicar fluxos RTMP integrais, deve-se primeiro instalar o software de servidor de mídia RTMP. Em seguida, será possível realizar o fluxo não apenas dos arquivos de vídeos FLV, mas os fluxos de "transmissão" RTMP em tempo real, assim como através do servidor de mídia. Como RTMP requer instalação do software de servidor, há muito mais gasto adicional envolvido em obter o primeiro fluxo.

Download progressivo em HTTP é uma alternativa mais nova para aqueles que não podem ou não desejam instalar um novo serviço em seu espaço da Web. Muitos acreditam que seja conveniente que as conexões todas ocorram por HTTP, pois não requer protocolos adicionais e o lado do servidor do código é bem direto para se manipular, digamos, em PHP. No entanto, vale a pena destacar que se todos os seus vídeos estiverem sendo hospedados através de HTTP, não há muito a se fazer para evitar que determinadas partes deduzam onde seus arquivos de origem são armazenados e faça download dos mesmos diretamente fora do reprodutor. Além disso, como o download progressivo em HTTP não é de forma alguma tecnicamente um fluxo, não será possível hospedar transmissões em tempo real.

Ambas as opções de fluxo requerem o uso de um objeto reprodutor de vídeo integrado ao Flash, que você mesmo precisará localizar ou criar com uma ferramenta de autoria Flash.

RTMP

Macromedia desenvolveu o protocolo RTMP para efetuar o fluxo e pretende, para aqueles que desejam publicar fluxos RTMP, fazer isso com seu software de servidor de mídia. Agora, para publicar com RTMP, podemos usar Red5 (consulte Requisitos do Sistema) — um servidor Flash de software livre baseado em Java que tem engenharia reversa a partir do servidor de mídia da Macromedia.

É claro que para usar Red5 será necessário instalar o serviço em algum lugar e desbloquear as portas relevantes entre seu servidor de mídia e o testo do mundo. Usar Red5 ou qualquer outro servidor de mídia RTMP não será uma opção, a menos que você tenha esse tipo de controle.

HTTP de Download Progressivo

Felizmente, para a maioria de webmasters, há uma opção que requer somente uma boa instalação de PHP: HTTP de Download Progressivo. Mas não é apenas aqueles incapazes de usar RTMP que optam por usá-lo. Entre os sites de compartilhamento de vídeo atual na Internet, os grandes reprodutores parecem preferir HTTP de Download Progressivo em vez de fluxo RTMP.

Em vez de pagar à Macromedia por licenças de servidor de mídia caras ou arriscar a provocação de um processo judicial ao executar uma casa de força de mídia com um protocolo proprietário com engenharia reversa, optam pela autoria de seu próprio software e usam HTTP para transferências de dados. HTTP passará por firewalls sem problemas, enquanto que RTMP não. Possivelmente, o mais importante de tudo: enquanto abrem mão da capacidade de publicar fluxos ao vivo se distanciando de RTMP, ganharam maior flexibilidade com sua apresentação sem causar para eles um grande problema de largura de banda. HTTP progressivo permite que os clientes saltem para qualquer um dos quadros chave em um vídeo, antes de esse local chegar ao buffer do cliente, sem iniciar o download novamente. Isso é possível somente se puder ser assumido seguramente que o fluxo seja de natureza estática — uma suposição que, devido à sua capacidade de apresentar fluxos ao vivo assim como estáticos, não é segura fazer com o protocolo RTMP por design.

Consulte Recursos para OS-FL, um exemplo de software livre de um reprodutor Flash de HTTP progressivo. Como é orientado por PHP, não é tanto uma questão de instalar algo, mas uma questão de soltar o código de origem em algum lugar desejado, supondo que tenha uma boa instalação de PHP. Além disso, é extremamente fácil integrar o reprodutor em páginas que também vivem no mesmo servidor. No entanto, observe que caso visualize o código fonte com seu navegador em uma página carregada com um vídeo integrado (por exemplo, a página de demonstração), toda a URL de FLV estará solta para que todo o mundo veja, caso se importem em olhar. Caso vá diretamente para essa URL em um navegador, não há nada que o proíba de salvar cópias diretas de todos os seus vídeos.

Como o YouTube contorna o problema de download direto? Primeiro de tudo, foram os autores de seu próprio reprodutor de vídeo customizado em Flash, que, entre outras coisas, inclui um certo grau de mistério nos parâmetros que aceita.

A Listagem 1 é um trecho do código que integraria um reprodutor de vídeo do YouTube em uma página.

Listagem 1. Código para inserir um reprodutor de video do YouTube em uma página da Web
<object width="425" height="355">
    <param name="movie" value="http://www.youtube.com
	                        /v/3g-yrjh58ms&rel=1"></param>
    <param name="wmode" value="transparent"></param>
    <embed src="http://www.youtube.com/v/3g-yrjh58ms&rel=1"
	    type="application/x-shockwave-flash" wmode="transparent"
		width="425" height="355"></embed>
</object>

Observe que o parâmetro movie (e a origem integrada) não é uma referência direta a um arquivo FLV. Pelo design, não sabemos o que o reprodutor de vídeo baseado em Flash deles faz com a URL passada no parâmetro, mas podemos deduzir que, no mínimo, é um sistema mais sofisticado do que a maioria dos webmasters terá tempo, paciência ou recursos para configurar. Vemos isso colocando a URL bruta em um navegador e não obtendo um .flv para nossos problemas. Na verdade, o YouTube se esforça muito para assegurar que nada, a não ser seu reprodutor de vídeo, toque seus vídeos diretamente. Mantendo esse mistério intacto poderia ser facilmente uma tarefa de tempo integral para mais de uma pessoa.

Em geral, provavelmente, é melhor na maioria dos casos abrir mão de RTMP a favor de HTTP de Download Progressivo, a menos que não haja outra maneira de lidar com seus problemas específicos. Se precisar publicar fluxos ao vivo, não tem realmente uma opção: é necessário seguir a rota de RTMP. Se sua capacidade de manter controle relativo for a única coisa que o distancia de usar HTTP de download progressivo, provavelmente deveria seguir em frente e obter o Macromedia Flash e gravar seu próprio reprodutor de vídeo customizado, injetando o máximo de mistério possível e implementando alguns redirecionamentos inteligentes do lado do servidor.

Apesar de dever estar ciente de que todas as técnicas mencionadas podem ser superadas se alguém for determinado o suficiente, é praticamente sempre uma boa prática manter suas URLs sigilosas em algum local, onde, no mínimo, não têm a rede percorrida e nem são indexadas diretamente.

Filosofia de Mídia Digital

No fim, seu conteúdo provavelmente será distribuído ou circulado de maneiras para as quais você estava despreparado. Isso pode ser importante ou não. O mundo de distribuição de mídia on-line é uma batalha constante entre pessoas que deseja controlar sua mídia e visualizadores que desejam ver mídia distribuída sem restrição. O subproduto dessa batalha é uma corrida armamentícia em escalada contínua entre rippers de mídia e protocolos de restrição de mídia. Você deve decidir sobre essa área, mas se optar por controlar sua mídia o máximo possível, deve estar preparado para a eventualidade de independentemente do que se faça, alguém ainda encontrará uma maneira de redistribuir sua mídia. Isso não significa que controlar sua mídia nunca valha a pena — simplesmente que se está procurando uma maneira de evitar que qualquer pessoa efetue rip de sua mídia, nunca encontrará o que está procurando.


Construindo uma Aplicação para Gerenciar Tudo

Se for fazer muitos vídeos, eventualmente, estará desejando ter algo que poderia ajudá-lo a gerenciar melhor seus arquivos. Já há tantos sites de compartilhamento de vídeo por aí que parece um pouco tolo realmente tentar criar mais um. Pode-se argumentar que o que se deseja não é um melhor site de compartilhamento de vídeo: é algo para ajudá-lo a gerenciar seus arquivos de vídeo. Vamos construir uma aplicação realmente simples para exatamente esse propósito. Não é criado nenhum código até o momento — isso entra na Parte 2. Mas será necessário instalar a estrutura que vamos usar para construir a aplicação e configurar algumas tabelas do banco de dados.

Visão Geral da Aplicação

Não há muito sentido em reinventar a roda construindo mais um site de compartilhamento de vídeo como todos os outros por aí. Em vez disso, essa aplicação terá uma abordagem diferente ao gerenciamento de vídeo on-line:

  1. Você estará fazendo upload de vídeos para seu próprio domínio.
  2. A ênfase estará na apresentação de seus vídeos, não na criação de uma comunidade de compartilhamento de vídeo.
  3. Diversos usuários serão suportados, mas não auto-registro (somente por convite).
  4. Tags serão a principal maneira de organizar e localizar vídeos.

Tags já são bem ubíquas, mas a maioria dos sites que usam tags ainda usam categorias para o principal método de organização. Como para os demais pontos, o principal uso da aplicação seria hospedá-la em seu próprio site, de forma que você e sua equipe de suporte possam postar seus próprios vídeos, para não ter muitas pessoas aleatórias fazendo upload de vídeo para seu site. Pense nesses pontos específicos em termos de design do banco de dados, enquanto repassa a instalação da estrutura.

Instalando o Framework

Para minimizar a quantidade de código de gasto adicional da aplicação que precisamos gravar, vamos usar uma estrutura PHP chamada CakePHP para fazer parte do trabalho pesado. Caso nunca tenha usado uma estrutura ou CakePHP antes, há muito material de leitura disponível por aí que pode ajudá-lo a iniciar. Entre agora e a Parte 2, pode ser que ache útil ler um pouco sobre o assunto.

Visite CakePHP.org e faça download da versão beta 1.2 (consulte Requisitos do Sistema). A versão 1.2 possui muitos recursos novos que vamos querer usar em nossa aplicação. A instalação de CakePHP é razoavelmente direta, desde que já tenha atendido os pré-requisitos. Neste tutorial, usamos o Apache V1.3 com mod_rewrite, PHP V5.2.3 e MySQL V5.

Faça download e descompacte CakePHP e configure seu servidor da Web para usar o diretório webroot de CakePHP como um raiz do documento. Por exemplo, caso tenha descompactado CakePHP no diretório /cakephp, configure a raiz do documento para o diretório /cakephp/app/webroot. Também será necessário fazer uma alteração no arquivo /cakephp/app/config/database.php.default. Copie esse arquivo para /cakephp/app/config/database.php e insira o host, o login, a senha e o nome do banco de dados para seu sistema. Além disso, em /column/protected/cakephp/app/config/core.php, você deve alterar a definição de CAKE_SESSION_STRING, de forma que Cake não reclame sobre o valor-padrão. É possível simplesmente substituir o valor padrão por algo como: define('CAKE_SESSION_STRING', 'The important thing here is that no one is on fire.');.

Agora que Cake está instalado, é possível entrar de cabeça na configuração das tabelas do banco de dados. Isso significa obter uma imagem mais clara de qual será a aparência da aplicação.

Configurando as Tabelas

Vamos dar uma olhada no que essa aplicação irá fazer e identificar quais tabelas serão necessárias para chegar lá.

Será feito upload de arquivos para seu próprio domínio. Isso significa que será necessária uma tabela de vídeos para conter informações sobre esses arquivos específicos. Cada arquivo precisará de um campo de ID e de pelo menos um título. Os arquivos de vídeo podem realmente ser armazenados no banco de dados, mas isso não terá um bom resultado no final. Em vez disso, você se sairia melhor armazenando os arquivos no sistema de arquivos e lembrando-se do local. Isso significa que também irá querer um campo de local. Para deixa tudo redondo, pode incluir um campo created e um campo user_id para controlar quais vídeos pertencem a quem.

Listagem 2. Criando a tabela de videos
CREATE TABLE 'videos' (
'id' INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
'title' VARCHAR( 255 ) NOT NULL ,
'location' VARCHAR( 255 ) NOT NULL ,
'user_id' INT( 10 ) NOT NULL ,
'created' DATETIME DEFAULT NULL
) ENGINE = MYISAM ;

Diversos usuários serão suportados, mas não auto-registro. Isso significa que será necessária uma tabela de usuários para armazenar informações dos usuários. No mínimo, precisará de campos de nome de usuário, senha, e-mail, nome e sobrenome.

Listagem 3. Criando a tabela de usuários
CREATE TABLE 'users' (
'id' INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
'username' VARCHAR( 40 ) NOT NULL ,
'password' VARCHAR( 40 ) NOT NULL ,
'email' VARCHAR( 255 ) NOT NULL ,
'firstname' VARCHAR( 40 ) NOT NULL ,
'lastname' VARCHAR( 40 ) NOT NULL
) ENGINE = MYISAM ;

Tags serão a principal maneira de organizar e localizar o vídeo. Isso significa que será necessária uma tabela tags para conter tags específicas e uma tabela videos_tags para juntar ambas.

Listagem 4. Criando a tabela de tags
CREATE TABLE 'tags' (
'id' INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
'text' VARCHAR( 40 ) NOT NULL
) ENGINE = MYISAM ;

CREATE TABLE `videos_tags` (
'video_id' INT( 10 ) NOT NULL,
'tag_id' INT( 10 ) NOT NULL,
PRIMARY KEY ('video_id', 'tag_id')
) ENGINE = MYISAM ;

Crie essas tabelas em seu banco de dados. Seu SQL pode precisar ser atualizado, dependendo de qual banco de dados será usado.

Olhando à Frente para a Aplicação

Na Parte 2, você irá criar uma aplicação para ajudá-lo a gerenciar seus arquivos de vídeo. Isso não parece tão complicado, parece? Bem, isso depende inteiramente do que deseja obter da aplicação. O gerenciamento de arquivos simples não é realmente complicado, novo nem interessante. Se quiser que valha a pena usar a aplicação, ela precisa oferecer mais.

Passe algum tempo vasculhando seus sites favoritos de vídeo digital. Anote o que gosta e o que odeia. Tenha uma ideia de como os diferentes sites funcionam. Em que pontos são iguais? Em quais são diferentes?

Quando chegar a hora de começar a trabalhar na aplicação, sabemos que há pelo menos algumas coisas que precisamos. Além do gerenciamento de arquivos simples, precisamos de uma maneira de manter os arquivos organizados. Isso permitirá que você ou um visualizador localize arquivos sobre determinados tópicos facilmente. Faça uma lista de outros recursos que acredite que seja bom ter. Alguns deles serão cobertos nesta série, outros pode ser que seja necessário você mesmo descobrir.

Deve-se também passar algum tempo familiarizando-se com o reprodutor de FLV de software livre e as bibliotecas de PHP. Eles são muito usados na Parte 2. O reprodutor em si é simples de integrar — usa-se apenas uma linha de PHP semelhante a seguinte: <?php flv("YOUR_VIDEO.flv", -1, -1, "0xFF0000", "0x000000"); ?>.

Mas não é necessário ser um guru completo de PHP para reconhecer que a função de FLV nessa linha não e PHP padrão. A função é definida em bibliotecas OS FLV. Passe o maior tempo possível se familiarizando com ela. A Parte 2 será uma loucura de codificação e ficará contente em ter passado algum tempo lendo antes.


Resumo

Neste ponto, foram determinadas diversas partes para seu novo Web site de vídeo. Na Parte 2, irá construir uma aplicação que ajudará a manter seus arquivos de vídeo organizados, incluindo gerenciamento de arquivos e tags. Enquanto isso, você deve passar algum tempo coletando (ou filmando) algum vídeo digital e fazendo experiências com conversão de formato para ficar familiarizado com os pontos positivos e os negativos das compensações de compactação mencionadas anteriormente.

Recursos

Aprender

Obter produtos e tecnologias

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Software livre
ArticleID=397267
ArticleTitle=Configurando seu Próprio Site de Vídeo On Demand com PHP, Parte 1: Base
publish-date=04012008