Introducción

movistar+ tiene dos tipos de EPG (guía electrónica de programación): una guía abreviada (con información del programa en curso y los dos siguientes) y la guía completa En este artículo nos centraremos en la EPG abreviada, llamada «present and following».

movistar+ no sigue exactamente el estándar de DVB-IP. Aunque utiliza DVBSTP para el envío de la información al decodificador, utilizada un payloadId diferente del del estándar (0xF0) para la información EPG, además de utilizar un XML «abreviado».

Recepción de la lista de servidores EPG

Una vez que se ha obtenido la lista de los service providers (demarcaciones) de 239.0.2.129:3937 y payloadId 0x01, se extrae la dirección DVBSTP multicast que trasmite la información de canales, paquetes y servidores EPG. En concreto, de la etiqueta <Push> (línea 9).

<?xml version="1.0" encoding="UTF-8"?>
<ServiceDiscovery xmlns="urn:dvb:ipisdns:2006"
xmlns:tva="urn:tva:metadata:2005" xmlns:mpeg7="urn:tva:mpeg7:2005"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:dvb:ipisdns:2006 C:\DVB_IPI\sdns.xsd">
  <ServiceProviderDiscovery Version="9">
    <ServiceProvider DomainName="DEM_1.imagenio.es" Version="192">
      <Offering>
        <Push Address="239.0.2.140" Port="3937"> </Push>
      </Offering>
    </ServiceProvider>
    <ServiceProvider DomainName="DEM_4.imagenio.es" Version="192">...</ServiceProvider>
    ...
    <ServiceProvider DomainName="DEM_19.imagenio.es" Version="193">...</ServiceProvider>
  </ServiceProviderDiscovery>
</ServiceDiscovery>

Tras recibir el XML de servidores EPG de la dirección multicast del service provider seleccionado, utilizando el payloadId 0x06, se obtienen dos servidores EPG, identificados con la etiqueta <BCG>. Uno, con el Id «p_f» se corresponde con la guía abreviada, mientras que el otro, con el Id «EPG» contiene la EPG completa.

<?xml version="1.0" encoding="UTF-8"?>
<ServiceDiscovery xmlns="urn:dvb:ipisdns:2006"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <BCGDiscovery DomainName="DEM_4.imagenio.es" Version="79">
    <BCG Id="p_f">
      <Name Language="eng">MiViewTV Present/Following</Name>
      <TransportMode>
        <DVBSTP Port="3937" Address="239.0.2.143" />
      </TransportMode>
      <TargetProvider>DEM_4.imagenio.es</TargetProvider>
    </BCG>
    <BCG Id="EPG">
      <Name Language="eng">MiViewTV ProgramGuide</Name>
      <TransportMode>
        <DVBBINSTP Source="EPG_0_BIN.imagenio.es" Port="3937" Address="239.0.2.130">...</DVBBINSTP>
        <DVBBINSTP Source="EPG_1_BIN.imagenio.es" Port="3937" Address="239.0.2.131"e>
        <DVBBINSTP Source="EPG_0_BIN.imagenio.es" Port="3937" Address="239.0.2.130">...</DVBBINSTP>
        <DVBBINSTP Source="EPG_2_BIN.imagenio.es" Port="3937" Address="239.0.2.132"e>
        <DVBBINSTP Source="EPG_0_BIN.imagenio.es" Port="3937" Address="239.0.2.130">...</DVBBINSTP>
        <DVBBINSTP Source="EPG_3_BIN.imagenio.es" Port="3937" Address="239.0.2.133"e>
        <DVBBINSTP Source="EPG_0_BIN.imagenio.es" Port="3937" Address="239.0.2.130">...</DVBBINSTP>
        <DVBBINSTP Source="EPG_4_BIN.imagenio.es" Port="3937" Address="239.0.2.134"e>
        <DVBBINSTP Source="EPG_0_BIN.imagenio.es" Port="3937" Address="239.0.2.130">...</DVBBINSTP>
        <DVBBINSTP Source="EPG_5_BIN.imagenio.es" Port="3937" Address="239.0.2.135"e>
        <DVBBINSTP Source="EPG_0_BIN.imagenio.es" Port="3937" Address="239.0.2.130">...</DVBBINSTP>
        <DVBBINSTP Source="EPG_6_BIN.imagenio.es" Port="3937" Address="239.0.2.136"e>
        <DVBBINSTP Source="EPG_0_BIN.imagenio.es" Port="3937" Address="239.0.2.130">...</DVBBINSTP>
        <DVBBINSTP Source="EPG_7_BIN.imagenio.es" Port="3937" Address="239.0.2.137"e>
        <DVBBINSTP Source="EPG_0_BIN.imagenio.es" Port="3937" Address="239.0.2.130">...</DVBBINSTP>
      </TransportMode>
    </BCG>
  </BCGDiscovery>
</ServiceDiscovery>

Estructura de la información EPG

La EPG se componente de una serie de segments («archivos»), correspondiendo cada uno a un canal concreto. A su vez, para cada canal se obtiene, normalmente, una lista de 3 programas: el programa actual, el siguiente al actual y el siguiente al siguiente.

El identificador de canal se obtiene del atributo serviceIDRef de la etiqueta <Schedule>.

Aunque movistar+ solo envía la información de un canal concreto en un segmento dado, podría perfectamente enviar la información de varios canales, utilizando varias etiquetas <Schedule>.

Es importante saber que movistar+ no transmite la información EPG de los canales en HD o 4K si existe uno equivalente en SD, pues la programación es la misma. Por defecto, en la definición de un canal se indica su equivalente en SD.

<?xml version="1.0" encoding="UTF-8"?>
<TVAMain xml:lang="eng" xmlns="urn:tva:metadata:2005"
xmlns:mpeg7="urn:tva:mpeg7:2005"
xmlns:howRel="urn:tva:metadata:cs:HowRelatedCS:2002"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <ProgramDescription>
    <ProgramLocationTable>
      <Schedule serviceIDRef="18.imagenio.es" Version="230">
        <ScheduleEvent>
          <Program crid="crid://imagenio.es/45997503/50994610/50994610" ProgramInfo="0" />
          <InstanceDescription>
            <Title>El mundo desde el aire T8 Ep. 9 - De Corolla a New Bern...</Title>
            <Genre href="urn:miviewtv:cs:GenreCS:2007:128.138">
              <Name>Viajes</Name>
            </Genre>
            <ReleaseInformation>
              <ReleaseDate>
                <Episode>9</Episode>
                <Season>8</Season>
                <Year>2016</Year>
              </ReleaseDate>
            </ReleaseInformation>
            <ParentalGuidance>
              <mpeg7:ParentalRating href="urn:dvb:metadata:cs:ParentalGuidanceCS:2007:2">
                <mpeg7:Name>
                  Suitable
                  for all audiences
                </mpeg7:Name>
              </mpeg7:ParentalRating>
            </ParentalGuidance>
          </InstanceDescription>
          <PublishedStartTime>2020-08-18T12:38:00.000Z</PublishedStartTime>
          <PublishedDuration>PT27M</PublishedDuration>
          <ImmediateViewing value="false" />
          <NetworkRecordOperator>default|STOVER</NetworkRecordOperator>
          <UserActionList>
            <mpeg7:ActionType>
              <mpeg7:Name>FastForward</mpeg7:Name>
            </mpeg7:ActionType>
          </UserActionList>
          <EpisodeOf crid="crid://imagenio.es/45997503/0/0">
            <Title>
              El
              mundo desde el aire
            </Title>
          </EpisodeOf>
          <EventStartTime>2020-08-18T12:38:00.000Z</EventStartTime>
          <EventDuration>PT27M</EventDuration>
        </ScheduleEvent>
        <ScheduleEvent>..</ScheduleEvent>
        <ScheduleEvent>..</ScheduleEvent>
      </Schedule>
    </ProgramLocationTable>
  </ProgramDescription>
</TVAMain>

Análisis de la información de un programa concreto

Dentro de cada XML, correspondiente a un canal concreto, la etiqueta <ScheduleEvent> recoge la información de un programa concreto, indicando nombre, hora de emisión, duración, etc…

Pasemos a analizar cada una de las etiquetas.

  • <Program> Proporciona un identificador único del programa, mediante el atributo crid. Más abajo analizamos su estructura.
  • <InstanceDescription> Contiene varias etiquetas con información del programa (la descripción).
    • <Title> El título (nombre) del programa.
    • <Genre> El género del programa. El atributo href indica el tipo de género (codificado para poder filtrar por género), mientras que la etiqueta <Name> proporciona una descripción del género para ser mostrada al usuario.
    • <ReleaseInformation> Contiene, dentro de la etiqueta <ReleaseDate> información sobre el año, temporada y capítulo.
    • <ParentalGuidance> Utilizado para el control parental. Especifica el rango de edad aconsejado para el programa (calificación). Al igual que con <Genre>, el atributo href indica la calificación (codificado para poder filtrar por calificación), mientras que la etiqueta <Name> proporciona la descripción para ser mostrada al usuario.
  • <PublishedStartTime> La fecha programa de comienzo, en formato DateTime de XML. movistar+ indica las horas en la zona horaria UTC (también conocido como GMT; España está en la zona CET, que es una hora más yen verano en CEST, que son dos horas más).
  • <PublishedDuration> La duración programada, en formato TimeSpan de XML.
  • <ImmediateViewing> Indica si el programa el el que está en curso, o no.
  • <NetworkRecordOperator> Las opciones de grabación, incluyendo si se puede comenzar desde el principio (STOVER, correspondiente al botón amarillo del mando).
  • <UserActionList> Lista de acciones que puede ejecutar el usario, tal y como adelantar el programa.
  • <EpisodeOf> Especifica a qué serie pertenece el programa. El crid especifica, de forma unívoca, la serie.
  • <EventStartTime> La hora a la que se va a emitir el programa. Suele ser la misma que la indicada en <PublishedStartTime>. Esta información permite a los grabadores ajustar el comienzo de la grabación si difiere de la publicada inicialmente.
  • <EventDuration> La duración real del programa. Es análogo a <EventStartTime>.

¿Qué es el crid?

El crid es un identificador unívoco de un programa o una serie. El estándar indicada que debe tener formato de URL, con protocolo crid:// y como servidor un identificador del proveedor de servicios. La estructura del path no está definida en el estándar y cada proveedor utiliza su propia estructura.

En el caso concreto de movistar+, el servidor siempre es imagenio.es.

En cuando al path, vemos que consta de 3 partes. La primera identifica la serie a la que pertenece el episodio o bien la serie en sí misma; en el caso de un programa «suelto» se asume que pertenece a una serie «ficticia».

A continuación, generalmente duplicado, el identificador del episodio. Si se trata de un programa «suelto» se indica con 0/0. En el caso de identificar una serie, siempre lleva el valor 0/0.

Se puede encontrar la especificación formal del esquema CRID en el RFC 4078 de la IETF, titulado The TV-Anytime Content Reference Identifier (CRID).


p

La presente información  es esencialmente correcta a fecha de publicación del artículo. movistar+ puede cambiar tanto la estructura de los archivos XML, su organización o la forma de enviar la información.

La información está obtenida mediante el análisis de la información que recibe el decodificador de movistar+, complementada con información de elaboración propia y (parcialmente) de documentos de especificación técnica (TS) de la ETSI (European Telecommunications Standards Institute) «DVB Services over IP Based Networks».