Sistema de Vd e IPTV Intrduçã: O sistema de víde a pedid e televisã a pedid é cnstituíd pr dis sftwares distints, live555, servidr a pedid de vídes e VLC, servidr de IPTV, que permite a recepçã de canais pr váris meis (analógic terrestre, através de uma placa cdificadra para hardware e através de interfaces digitais, cm satélite e ainda ficheirs). O sftware permite ainda a gravaçã de cnteúds. Para estas funcinalidades referidas fi usada uma parte d VLC que se chama VLM, que que permite é ter váris canais em simultâne a ser transmitids para a rede. Para interagir cm prgrama usa-se a sua interface telnet. Dad VLC nã ter uma arquitectura em que as cnfigurações sã guardadas em base de dads, fi necessári desenvlver uma aplicaçã que cnsulta a base de dads e gera cm essa infrmaçã script de arranque. A infrmaçã é registada na base de dads, através da interface utilizadr u através de intrduçã directa. Executar prgrama IPTV O prgrama é executad sempre que servidr reinicia, sempre cm a pçã de interface telnet e cm um ficheir de cnfiguraçã assciad, através d seguinte cmand: vlc -I telnet --vlm-cnf /hme/luis/iptvserver/vlm.cfg O ficheir que é dad a servidr IPTV para cnfiguraçã é gerad através de um prgrama java, executad antes de iniciar servidr IPTV. O prgrama java, tem pr funçã gerar td script de cnfiguraçã d servidr IPTV, nmeadamente sbre s canais analógics e satélite dispníveis, agendament da vigilância, agendaments de prgramas frequentes, cm telejrnal e agendaments ds utilizadres. O script é gerad através da cnsulta a duas base de dads, a base de dads da interface para bter s agendaments ds utilizadres e a base de dads de cnfiguraçã d servidr IPTV. Executar prgrama VD O prgrama de VD é excutad a arranque, nã precisand de qualquer cnfiguraçã, desde que seja executad na pasta nde estã s vídes ds quais querems fazer VD. Quand sã efectuads agendaments da parte d utilizadr, é inserid na base de dads um regist crrespndente a esse agendament, que é também enviad através de uma ligaçã telnet estabelecida pela interface d sistema a servidr IPTV.
Esse agendament é sempre armazenad na paste nde se encntram s vídes, pela limitaçã cnhecida d servidr VD em nã suprtar pastas. Relativamente a servidr VD, existiu apenas uma alteraçã a códig fnte, que se prende cm a prta nde sã servids s pedids, existind duas prtas 554 e 8554, seria difícil a sincrnizaçã de tds s cmpnentes d sistema, infrmand quais as prtas, assim alteru-se códig d prgrama para que este seja sempre executad na prta 554. Base de dads de cnfiguraçã d servidr IPTV Funcinalidades implementadas: - Gerar canais analógics, cm pções - Gerar canais digitais, DVB-S - Gerar canais mms - Gerar agendaments de cameras, cm peridicidade definida, u seja, a duraçã das gravações 6 hras, pr exempl. - Gerar agendaments de prgramas cm peridicidade definida, semanal, quinzenal, etc. Funcinalidades pr implementar: - Transcdificaçã (cdecs, limitaçã de débits, etc) Nã é pssível aplicar uma transcdificaçã. Nã se implementu nesta fase, pr nã ser priritária e pr esta aumentar a carga n prcessadr. Base de dads A base de dads é cnstituída pr 11 tabelas, que se passam a enumerar: Cameras Lista das câmaras a gravar Id chave primária da tabela Name nme da câmara Address endereç Peridicity_id peridicidade da gravaçã Active Activa a gravaçã u nã
Channels Lista de tds s canais Id chave primária da tabela Name nme d canal Input definiçã d input d canal Channeltype_id id d tip de canal Active Activa canal u nã Channeltypes Tips de canais Id chave primária da tabela Name tip de canal (dvb, pvr, mms u utr) Dvb_utputs N dvb existe um parâmetr adicinal assciad a cada utput, nmeadamente qual prgram id assciad, esta tabela mantém essa infrmaçã Id chave primária da tabela Output_id id d utput Prgram prgram id assciad Optins Opções assciadas as canais Id chave primária Channel_id id d canal Name nme da pçã Value valr da pçã, se fr deixad em branc significa uma pçã sem valr assciad Outputs Destins ds canais Id chave primária Channel_id id d canal Ip IP para nde é transmitid canal (unicast u multicast) Prt prta para nde é transmitid canal Packet_id id d pacte assciad a este utput Transcde_id id da transcdificaçã assciada
Packets Pactes dispníveis Id chave primária Access tip de acess Mux tip de multiplexer Parameters Lista de parâmetrs de transcdificaçã Id id d parâmetr Name nme d parâmetr Peridicities Lista das peridicidades dispníveis Id chave primária da tabela Name nme da peridicidade (semanal, diária, etc) Value valr da peridicidade, sã aceites s seguintes m,h,d,m e s m minuts h hras d dias M mês S semana Exempl: 1d, 1m, 1s; Schedules Agendaments periódics Id chave primária Name nme d prgrama sem espaçs Channel_id canal que será gravad Start hra de inici Duratin duraçã Peridicity_id id da peridicidade Active Trna agendament activ u nã Transcdes
Id chave primária Parameter_id id d parametr Value valr BUGS cnhecids: - A tabela schedules deveria cnter utput_id em vez de channel_id, para cas ds canais satélite; Actualizaçã das ntícias Existe um prgrama que frequentemente (prgramaçã através d crntab) actualiza a base de dads de ntícias, este prgrama efectua cnsultas a base de dads para saber quais s endereçs de RSS e em seguida cnsulta um a um, inserind na base de dads infrmações sbre a nticia e a sua fnte. O prgrama que efectua esta gestã chama-se Actualiza jrnais. O prgrama usa um pacte da Sun, rssutils que efectua parsing de RSS. Cnsiderações sbre prgrama Cada vez que é executad verifica se as nticias que está a receber sã mais recentes que aquelas que estã já em base de dads. Se frem mais recentes insere na base de dads, se nã descarta as ntícias. Esta verificaçã efectua-se cm base numa data e hra presente na base de dads para cada tema de ntícias. Limitações Este prgrama encntra-se à medida das ntícias prduzidas pela sic. Cas seja necessári incluir utras ntícias será necessári efectuar alterações n prgrama.
Actualiza filmes Existe um prgrama que é executad cada vez que é feit um rebt que actualiza s filmes dispníveis em cada cinema que cnsta na base de dads. Antes de actualizar é efectuada uma verificaçã se já fram actualizadas as ntícias hje, cas afirmativ nã actualiza. Limitações e cnstrangiments Cas haja alguma alteraçã à estrutura d site que frnece s cnteúds aqui actualizads este prgrama deixará de funcinar perfeitamente, pdend inclusive intrduzir alguns errs na base de dads, necessitará pr iss de um acmpanhament, quant a seu funcinament. Prblemas detectads Existia um prblema relacinad cm a cdificaçã, que levava a caracteres incrrects depis de efectuada a cnsulta na internet, iss tinha pr cnsequência errs quer na execuçã quer na visualizaçã desta funcinalidade. O prblema fi reslvid esclhend a cdificaçã a usar na execuçã. O prblema fi detectad prque a execuçã em Windws crria bem e em Linux apresentava prblemas, em seguida fez-se a impressã de qual cding usad e verificu-se a diferença. Assim prgrama passu a ser executad através d cmand: java -Dfile.encding=Cp1252 -jar /hme/luis/actualizarfilmes/actualizarfilmes.jar
Actualizar MMS Existe um prgrama que actualiza endereç da sic nticias na base de dads, esse prgrama é executad antes de ser gerad script de IPTV, que prgrama faz é executar script pythn que reclhe s endereçs, registand da sic nticias em base de dads. Limitações e cnstrangiments Este prgrama depende seu sucess d script pythn, se a estrutura da página mudar e script pythn falhar nã será pssível actualizar endereç da sic nticias na base de dads. Prgramas que faltam fazer u questões pendentes: Saber espaç em disc de cada utilizadr; OK Impedir agendament se espaç d utilizadr ultrapassar a sua quta; OK Permitir eliminar vídes d sistema. OK A SIC nticias pr algum mtiv pr vezes nã arranca, será necessári para iss ter um prgrama que se certifique que a sic nticias arrancu. Cruzar s dads ds vídes existentes na base de dads cm s ficheirs n disc; OK Eliminar s vídes/gravaçã periódics; OK Definir regras para essa eliminaçã. OK Permitir ter imagens ns agendaments periódics, classificar esses prgramas pr tip e uma descriçã. OK Err crrigids Actualizaçã das pastas nde sã armazenads s vídes; Remçã d text de debug que ainda permanecia nas listagens de rádis; Algumas referências: Servidr VD http://www.live555.cm Servidr IPTV http://www.videlan.rg/vlc/ Manual servidr IPTV http://www.videlan.rg/dc/streaminghwt/en/streaming-hwt-en.pdf
Manual d cakephp - http://manual.cakephp.rg/ Framewrk php usada http://www.cakephp.rg/ Interface A interface d sistema acedida preferencialmente pela STB d utilizadr é mei através d qual utilizadr acede a tds s serviçs, trna-se pr iss imprtante que esta seja simples, de fácil utilizaçã e mais mecanizada pssível (autmática). Segue-se nas próximas páginas a descriçã da base de dads de suprte à interface e d funcinament da Framewrk que implementa a interface, bem cm as principais cnsiderações. A Framewrk utilizada permite a prgramaçã da interface em três camadas, acess as dads, lógica de negóci e apresentaçã. N cntext da interface e deixand de lad a teria, na camada de acess as lads, implementam-se cnsultas para bter dads que a lógica de negóci slicita. Pr exempl bter a lista de filmes, a lógica de negóci slícita à camada de acess as dads, a lógica de negóci executa uma funçã declarada n respectiv mdel que devlve s dads pretendids. Mdels implementam acess as dads Existem váris mdels de acess as dads, geralmente um pr cada tabela, mdel aparece sem relacinad cm a tabela e cntém s métds necessáris a extracçã desses dads. Os mdels cmeçam sempre a sua declaraçã pr: <? class Channel extends AppMdel { var $name='channel'; A variável name existe pr uma questã de cmpatibilidade cm versões anterires d PHP, nme da classe é nme da tabela à qual mdel está assciada cm inicial maiúscula. Seguidamente existe a indicaçã de qual é a cnfiguraçã de base de dads, declarada pela seguinte frase var $usedbcnfig = 'default'. Estas cnfigurações encntram-se declaradas n ficheir database.php que está na pasta cnfig. Ns métds ds mdels, prcediment é sempre declarar a query, executar e retrnar resultad, nã send efectuads na mair parte ds cass qualquer tip de peraçã sbre s dads, deixand-se essa tarefa para a lógica d negóci.
As classes Channel, Radi, Music e Vide sã semelhantes n seu funcinamente, pr esse fact fi apenas cmentada a classe Channel. Cntrladres implementam a lógica de negóci Os cntrladres existentes na interface tratam s dads recebids pela camada de acess as dads e enviam-ns para a camada de apresentaçã. Os cntrladres têm nme d mdel a que se referem n plural e em letras minúsculas, except a primeira, acrescentand Cntrller a nme, send nme d ficheir tda em minúsculas separand nme d cntrladr e a palavra cntrller pr _. A declaraçã de um cntrladr é feita da seguinte frma: class ChannelsCntrller extends AppCntrller { var $name="channels"; var $scaffld; var $uses = array("channel","makepage"); var $helpers = array('html','myhtml'); Mais uma vez a variável name, aparece pr uma questã de cmpatibilidade; a variável scaffld se estiver declarada permite us de uma aplicaçã que permite adicinar, remver e editar regists através de uma interface php, já existente na Framewrk; a variável uses cntém um array (um vectr) de nmes de mdels que sã utilizadres n presente cntrladr. Finalmente na declaraçã de um cntrladr aparece a variável helpers, que indica quais as biblitecas de ajuda que estã a ser usadas nas views que dependem deste cntrladr. O prcediment geral ns cntrladres é verificar se utilizadr já efectuu lgin, se sim deixa prsseguir, cas cntrári redireccina- para a página de lgin, segue um exempl desse prcediment: if(!$this->sessin->check('user_id')) $this->redirect("/makepages/lgin"); Depis de verificad se utilizadr já tinha efectuad lgin, deduz-se se na sessã já estiver guardad id d user, lê da sessã ID d utilizadr, d grup e d idima assciad a este utilizadr, segue-se exempl: $user_id=$this->sessin->read('user_id'); $grup_id=$this->sessin->read('grup_id'); $language_id=$this->sessin->read('language_id');
Depis de efectuads estes dis passs brigatóris segue-se a declaraçã de variáveis a usar nas views, variáveis cm valres cnsultads na base de dads, segue-se um exempl: $this->set("canais",$this->channel->btercanaisdtip($tip,$grup_id)); Guarda-se na variável canais resultad retrnad pel métd btercanaisdtip cm s parâmetrs tip e grup_id, d mdel Channel. Existe um cntrladr muit imprtante na interface, que é cntrladr makepages, dad que este é respnsável pelas principais funcinalidades, nmeadamente a geraçã das páginas de acrd cm as pções, u cnfigurações de um determinad utilizadr, que estã patentes em base de dads. Para esta geraçã de páginas persnalizadas cntribuem métds cm s seguintes: $this->set("titul",$this->makepage->btertitul ("telefne", $grup_id,$language_id)); $this->set("menus",$this->makepage->btermenus ("telefne",$grup_id, $language_id)); Nestes métds é indicad qual grup para qual estams a gerar a página, bem cm idima e nme da página. Este retrna s parâmetrs para este utilizadr que pertence a um grup, nmeadamente s menus e títuls das páginas. Os cntrladres, channels, radis, vídes e musics funcinam da mesma frma assim fi apenas cmentad channels. Os classes lcalizadas na pasta vendrs têm uma funçã imprtantíssima, dad que sã elas que efectuam cmunicaçã cm exterir, nmeadamente s serviçs de click t call e a cmunicaçã cm servidr de IPTV, bem cm representam entidades u métds auxiliares, usads em váris cntrllers. Uma das funcinalidades da interface que recrre a uma classe destas que cmunica cm servidr IPTV é a ds agendaments, prvavelmente a funcinalidade da interface que apresenta mais pnts fracs e que para funcinar precisa de muita lógica, dad depender e mexer esta cm váris serviçs. O que implica um agendament? [1] Apresentar uma página a utilizadr da interface que permita agendar gravações, nmeadamente, ter uma dada de iníci, superir u igual à actual; ter uma lista de canais nde ele pde efectuar agendaments; ter uma lista de durações, que utilizadr pde seleccinar, tend sid definida uma duraçã máxima de agendament, esta limitaçã nã existe n códig, existe apenas d pnt de vista das durações que utilizadr pde seleccinar; ter uma lista de canais dispníveis, nde utilizadr pde realizar agendaments.
Esta é a infrmaçã que utilizadr necessita para agendar, a partir daqui a lógica é tda n servidr. [2] Depis de seleccinads s dads d agendament a infrmaçã é enviada para servidr, a data e hra é tratada para frmat crrespndente, é identificada a duraçã e frmatada a data de fim da gravaçã, assim cm identificar canal, nmeadamente endereç nde se pde gravar canal pretendid. [3] Depis de frmata a data de inici e fim, bem cm as durações e endreç d canal, esta infrmaçã é enviada para vendr Agendament.php, esta classe é respnsável pr receber s dads e gerar s cmands a enviar para servidr IPTV que permitem agendar e efectuar a gravaçã ds cnteúds pretendids. Sã gerads três principais cmands enviads para servidr IPTV, um que efectua a gravaçã de um canal para um ficheir, um que inicia esta gravaçã e utr que termina esta gravaçã, cmand que termina esta gravaçã é respnsável pr limpar s agendaments d servidr, u seja remver cmand que permitir guardar em ficheir, remver cmand de inici e cmand de fim. [4] Seguidamente é necessári armazenar em base de dads s agendaments e a infrmaçã d víde que agendament irá prprcinar, é acrescentad na tabela ds agendaments, infrmaçã sbre este agendament, bem cm infrmaçã na tabela ds vídes dispníveis para visualizaçã, definind uma data a partir da qual víde se encntra dispnível para ser visualizad. A partir dessa data e hra filme encntra-se na interface d utilizadr e pde ser seleccinad. [5] Para que agendament se efective existe mais uma cmpnente que já se referiu, nmeadamente aquele que carrega para servidr IPTV tds s agendaments cada vez que cmputadr reinicia. NOTA: Esta funcinalidade ds agendaments cm já fi referid é bastante crítica, tend alguns prblemas de sincrnizaçã ds ficheirs em disc cm a infrmaçã em base de dads. Será necessári incrementar a sincrnizaçã através de ferramentas externas, cm a que fi realizada para carregar tds s agendaments aquand d rebt.
Alguns cnceits: Layut Aspect que é cmum a várias páginas, pr exempl fact de tdas terem um rdapé cm imagem, fact de tdas terem uma tabela cm determinadas pções, a esclha d layut a usar é feita n métd d cntrladr e refere-se à view que apresenta resultad prduzid pr esse métd. Vistas implementam a camada de visualizaçã ds dads As vistas rganizam-se em pastas, crrespndend nme da pasta a nme d cntrladr a que se referem n plural e escrit apenas cm letras minúsculas, sem a palavra cntrller, pr exempl a pasta das views d cntrladr channels_cntrller tem nme channels e cntém dentr dessa pasta um ficheir pr cada métd declarad n cntrladr. Existe uma lógica na camada de visualizaçã ds dads que se repete, que tem a ver cm a geraçã de páginas de menus, nmeadamente n menu inicial e ns utrs menus. A lógica cncretiza-se sempre da mesma frma, métd d cntrladr que crrespnde à view cnsulta na base de dads títul e s menus existentes para a página referida e envia-s à view, esta escreve titul e psterirmente elabra uma tabela cm tds s menus. A frma de elabrar a tabela é sempre recrrend a fr u freach. Pasta Webrt, dentr das views Esta cntém 4 pastas, css, files, img e js, dentr da css é guardad estil da página, dentr da js sã guardads tds s javascript, neste cas apenas javascript d calendári e dentr da pasta img sã guardadas tdas as imagens da interface. Maires limitações e cuidads a ter: Sincrnizaçã da base de dads; Prtecçã cntra SQL Injectin (prtecçã d códig); Aspects de segurança diverss;
SCRIPT DE ARRANQUE Sã executadas as perações necessárias após rebt case "$1" in start) rute add -net 224.0.0.0/4 dev eth5 ech "/usr/sbin/asterisk &" su rt ech "ASTERISK"; ech "java -Dfile.encding=Cp1252 -jar /hme/luis/actualizarfilmes/actualizarfilmes.jar" su luis ech "FILMES ACTUALIZADOS"; ech "java -jar /hme/luis/vigilancia/remvervigilancia.jar" su luis ech "VIGILANCIA REMOVIDA" ech "java -jar /hme/luis/mms/actualizarmms.jar" su luis ech "MMS ACTUALIZADOS"; ech "java -jar /hme/luis/calcspace/calcspace.jar" su luis ech "ESPACO CALCULADO"; ech "java -jar /hme/luis/eliminarvides/eliminarvides.jar" su luis ech "VIDEOS ELIMINADOS"; ech "java -jar /hme/luis/iptvserver/iptvcnfiguratin.jar > /hme/luis/iptvserver/vlm.cfg" su luis esac *) ech "SCRIPT GERADO"; ech "vlc -I telnet --vlm-cnf /hme/luis/iptvserver/vlm.cfg &" su luis ech "SERVIDOR IPTV ARRANCOU"; ech "/hme/luis/live &" su rt ech "SERVIDOR VOD ARRANCOU"; ;;
Alguns aspects slts imprtantes: - Na tabela vídes existe uma cluna chamada datahra, que crrespnde à data/hra a partir d qual víde está dispnível para visualizaçã;
Instalaçã das placas de recepçã terrestre Para instalaçã e cnfiguraçã das placas de recepçã terrestre, efectuar dwnlad d firmware das placas em http://ivtvdriver.rg/index.php/firmware. Ficheirs d firmware http://dl.ivtvdriver.rg/ivtv/firmware/firmware.tar.gz. Em seguida vams instalar sftware da placa, dependend da versã d kernel, pdems verificar nesta página qual a versã recmendada: http://ivtvdriver.rg/index.php/main_page cm estams a usar kerner 2.6.24, efectuams dwnlad da versã 1.0.3, u psterir. Efectuams make e encntrams um err, para reslver err fi necessári cpiar ficheir ivtv.h para a pasta ds Linux headers, subpasta media, em seguia fizems make cm utilizadr nrmal, make install cm rut e ficu instalad. Psterirmente efectuams dwnlad d scantv e fizems uma prcura das frequências para testar n vlc que entretant fi instalad se estava tud crrect cm as placas de recepçã. Prgramas instalads: Mysql Freeradius Freeradius mysql Php5 Apache Asterisk Vlc Ppp-server - http://www.raringpenguin.cm/files/dwnlad/rp-pppe-3.8.tar.gz