roChannelManager
19 min
puede usar este objeto para administrar el escaneo y la sintonización de canales rf el método rovideoplayer también tiene capacidades de escaneo de canales creación de objetos el objeto rochannelmanager se crea sin parámetros createobject("rochannelmanager") ifuserdata setuserdata(user data as object) establece los datos del usuario que se devolverán cuando se generen eventos getuserdata() as object devuelve los datos del usuario que se establecieron previamente mediante setuserdata() devolverá invalid si no se ha establecido ningún dato ifmessageport setport(port as romessageport) ifchannelmanager la interfaz ifchannelmanager proporciona una api síncrona y asíncrona api síncrona scan(parameters as roassociativearray) as boolean realiza un escaneo de canales en la entrada rf para frecuencias atsc y qam, y crea un mapa de canales basado en lo que encuentra el objeto rochannelmanager almacena una lista de todos los canales obtenidos mediante el método createchanneldescriptor() (descrito a continuación) la lista se borra en cada llamada a escanear() de forma predeterminada, pero este comportamiento puede reemplazarse cada canal tarda aproximadamente un segundo en escanearse; puede limitar el alcance del escaneo de canales con los siguientes parámetros \["channelmap"] = "atsc" o "qam" limita el escaneo de frecuencias a qam o atsc \["modulationtype"] = "qam64" o "qam256" limita el tipo de modulación del escaneo a qam64 o qam256 \["firstrfchannel"] = integer y/o \["lastrfchannel"] = integer limita el escaneo al rango de canales especificado el extremo superior del rango de canales es un parámetro opcional \["channelstore"] = "discard all" o "merge" controla cómo el script maneja la información previa del escaneo de canales la configuración predeterminada es discard all, que borra todos los datos de canales antes del escaneo por otro lado, merge sobrescribe los datos únicamente de los canales especificados en el escaneo getchannelcount() as integer devuelve el número de canales encontrados clearchanneldata() as boolean borra todos los datos almacenados del escaneo de canales, incluidos aquellos que persisten en el registro este método también cancela cualquier llamada a asyncscan() que se esté ejecutando actualmente getcurrentsnr() as integer devuelve la snr (en centibelios) del canal sintonizado actualmente exporttoxml() as string serializa el contenido de los canales rf en xml puede escribir el xml en un archivo que podrá utilizarse posteriormente en las mismas u otras unidades consulte a continuación un ejemplo de salida xml importfromxml(a as string) as boolean recupera el contenido del canal rf almacenado como xml el formato del xml se controla mediante etiquetas de versión ejemplo \<?xml version="1 0" encoding="utf 8" standalone="yes" ?> \<!doctype boost serialization> \<boost serialization signature="serialization archive" version="7"> \<channellist class id="0" tracking level="0" version="0"> \<channelcount>2\</channelcount> \<channel class id="1" tracking level="0" version="0"> \<rfchannel>42\</rfchannel> \<modulationtype>7\</modulationtype> \<spectralinversion>0\</spectralinversion> \<majorchannelnumber>1\</majorchannelnumber> \<minorchannelnumber>1\</minorchannelnumber> \</channel> \<channel> \<rfchannel>42\</rfchannel> \<modulationtype>7\</modulationtype> \<spectralinversion>0\</spectralinversion> \<majorchannelnumber>1\</majorchannelnumber> \<minorchannelnumber>2\</minorchannelnumber> \</channel> \</channellist> enablescandebug(filename as string) as boolean permite que toda la depuración del escaneo se escriba en un archivo de texto de forma predeterminada, no hay salida de depuración de un escaneo puede cerrar el archivo de depuración pasando una cadena vacía ejemplo c=createobject("rochannelmanager") c enablescandebug("tmp\ /scandebug txt") v = createobject("rovideoplayer") aa = createobject("roassociativearray") aa\["rfchannel"] = 12 aa\["virtualchannel"] = "24 1" print v playfile(aa) c enablescandebug("") createchanneldescriptor(a as object) as object crea una matriz asociativa que puede pasarse al método rovideoplayer playfile() (para sintonizar un canal) o analizarse para obtener metadatos el objeto de canal generado puede basarse en uno de los siguientes elementos índice \["channelindex"] = 0 número de canal virtual como una cadena en un arreglo asociativo \["virtualchannel"] = "12 1" nombre del canal como una cadena \["channelname"] = "kcbs" los canales se ordenan internamente por canal virtual, por lo que podría usar un script de channel index para implementar el comportamiento estándar de subir/bajar canal estas son las entradas generadas en el arreglo virtualchannel channelname centrefrequency modulationtype videopid videocodec audiopid audiocodec spectralinversion channelmap firstrfchannel lastrfchannel las últimas tres entradas de este arreglo le permiten usar el mismo roarray como parámetro para escanear() y playfile() los valores del primer y último canal rf se establecen en el mismo valor para que solo se escanee un canal rf este tipo de escaneo puede realizarse al mismo tiempo que se reproduce el canal porque no requiere volver a sintonizar ejemplo c=createobject("rochannelmanager") aa=createobject("roassociativearray") aa\["channelmap"] = "qam" aa\["firstrfchannel"] = 10 aa\["lastrfchannel"] = 15 c scan(aa) cinfo = createobject("roassociativearray") cinfo\["channelindex"] = 0 desc = c createchanneldescriptor(cinfo) print desc v = createobject("rovideoplayer") v playfile(desc) c scan(desc) api asíncrona asyncscan(parameters as roassociativearray) as boolean inicia un escaneo de canales en la entrada rf y devuelve los resultados inmediatamente por lo demás, el comportamiento y los parámetros de este método son idénticos a escanear() cuando se completa o cancela, asyncscan() genera un rochannelmanagerevent , que admite ifuserdata y produce dos tipos de eventos 0 – escaneo completo se genera al completarse un escaneo no se suministran datos adicionales 1 – progreso del escaneo se genera con cada sintonización que se realiza durante el escaneo getdata() devuelve el porcentaje de finalización del escaneo cancelscan() as boolean cancela cualquier escaneo asíncrono que se esté ejecutando actualmente este método no genera un rochannelmanagerevent ejemplo síncrono c = createobject("rochannelmanager") ' scan the channels aa = createobject("roassociativearray") aa\["channelmap"] = "atsc" aa\["firstrfchannel"] = 12 aa\["lastrfchannel"] = 50 c scan(aa) ' start at the first channel index = 0 cinfo = createobject("roassociativearray") cinfo\["channelindex"] = index desc = c createchanneldescriptor(cinfo) ' play the first channel v = createobject("rovideoplayer") v playfile(desc) ' play the second channel index = index + 1 cinfo\["channelindex"] = index desc = c createchanneldescriptor(cinfo) v playfile(desc) ejemplo asíncrono c = createobject("rochannelmanager") p = createobject("romessageport") c setport(p) ' scan the channels aa = createobject("roassociativearray") aa\["channelmap"] = "atsc" aa\["firstrfchannel"] = 12 aa\["lastrfchannel"] = 50 c asyncscan(aa) loop msg = wait(2000,p) if msg = 0 then goto scan complete goto loop scan complete ' start at the first channel index = 0 cinfo = createobject("roassociativearray") cinfo\["channelindex"] = index desc = c createchanneldescriptor(cinfo) ' play the first channel v = createobject("rovideoplayer") v playfile(desc) ' rescan the current channel, and update the desc\["channelstore"] = merge c scan(desc)