roChannelManager
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)