jmarcet / movistar-u7d

Movistar IPTV U7D to flussonic catchup proxy
GNU General Public License v2.0
65 stars 19 forks source link

No se muestra ninguna programación en Jellyfin #20

Closed jagbarcelo closed 2 years ago

jagbarcelo commented 2 years ago

Corriendo en un contenedor Docker de https://registry.hub.docker.com/r/jellyfin/jellyfin/

Funcionando bien para la version anterior de movistar-u7d (de aproximadamente 1 mes) y con esta configuración:

image

Muestra los siguientes errores en el log:

[2022-02-07 20:22:36.637 +01:00] [INF] [98] Emby.Server.Implementations.LiveTv.TunerHosts.M3UTunerHost: Found m3u channel: "-1 ch-number=\"124\" tvg-id=\"4990.movistar.tv\" group-title=\"U7D - TDT Movistar.es\" tvg-logo=\"http://192.168.1.8:8888/Logos/4990.jpg\",El Toro TV HD"
[2022-02-07 20:22:36.638 +01:00] [INF] [98] Emby.Server.Implementations.LiveTv.TunerHosts.M3UTunerHost: Found m3u channel: "-1 ch-number=\"126\" tvg-id=\"3603.movistar.tv\" group-title=\"U7D - TDT Movistar.es\" tvg-logo=\"http://192.168.1.8:8888/Logos/3603.jpg\",DKISS"
[2022-02-07 20:22:36.638 +01:00] [INF] [98] Emby.Server.Implementations.LiveTv.TunerHosts.M3UTunerHost: Found m3u channel: "-1 ch-number=\"127\" tvg-id=\"3443.movistar.tv\" group-title=\"U7D - TDT Movistar.es\" tvg-logo=\"http://192.168.1.8:8888/Logos/3443.jpg\",Ten"
[2022-02-07 20:22:36.638 +01:00] [INF] [98] Emby.Server.Implementations.LiveTv.TunerHosts.M3UTunerHost: Found m3u channel: "-1 ch-number=\"159\" tvg-id=\"5029.movistar.tv\" group-title=\"U7D - TDT Movistar.es\" tvg-logo=\"http://192.168.1.8:8888/Logos/5029.jpg\",8tv"
[2022-02-07 20:22:36.638 +01:00] [INF] [98] Emby.Server.Implementations.LiveTv.TunerHosts.M3UTunerHost: Found m3u channel: "-1 ch-number=\"999\" tvg-id=\"3103.movistar.tv\" group-title=\"U7D - TDT Movistar.es\" tvg-logo=\"http://192.168.1.8:8888/Logos/3103.jpg\",Movistar Plus+"
[2022-02-07 20:22:36.639 +01:00] [INF] [39] Emby.Server.Implementations.LiveTv.Listings.XmlTvListingsProvider: xmltv path: "http://192.168.1.8:8888/guia.xml"
[2022-02-07 20:22:36.641 +01:00] [ERR] [39] Emby.Server.Implementations.LiveTv.EmbyTV.EmbyTV: Error adding metadata
System.Xml.XmlException: System does not support 'utf8' encoding. Line 1, position 31.
 ---> System.ArgumentException: 'utf8' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. (Parameter 'name')
   at System.Text.EncodingTable.InternalGetCodePageFromName(String name)
   at System.Text.EncodingTable.GetCodePageFromName(String name)
   at System.Text.Encoding.GetEncoding(String name)
   at System.Xml.XmlTextReaderImpl.CheckEncoding(String newEncodingName)
   --- End of inner exception stack trace ---
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.CheckEncoding(String newEncodingName)
   at System.Xml.XmlTextReaderImpl.ParseXmlDeclaration(Boolean isTextDecl)
   at System.Xml.XmlTextReaderImpl.Read()
   at System.Xml.XmlReader.ReadToDescendant(String name)
   at Jellyfin.XmlTv.XmlTvReader.GetChannels()
   at Emby.Server.Implementations.LiveTv.Listings.XmlTvListingsProvider.GetChannels(ListingsProviderInfo info, CancellationToken cancellationToken)
   at Emby.Server.Implementations.LiveTv.EmbyTV.EmbyTV.GetEpgChannels(IListingsProvider provider, ListingsProviderInfo info, Boolean enableCache, CancellationToken cancellationToken)
   at Emby.Server.Implementations.LiveTv.EmbyTV.EmbyTV.AddMetadata(IListingsProvider provider, ListingsProviderInfo info, IEnumerable`1 tunerChannels, Boolean enableCache, CancellationToken cancellationToken)
   at Emby.Server.Implementations.LiveTv.EmbyTV.EmbyTV.GetChannelsAsync(Boolean enableCache, CancellationToken cancellationToken)
[2022-02-07 20:22:36.645 +01:00] [INF] [39] Emby.Server.Implementations.LiveTv.LiveTvManager: Refreshing guide with 7 days of guide data
[2022-02-07 20:22:36.646 +01:00] [INF] [39] Emby.Server.Implementations.LiveTv.Listings.XmlTvListingsProvider: xmltv path: "http://192.168.1.8:8888/guia.xml"
[2022-02-07 20:22:36.647 +01:00] [ERR] [39] Emby.Server.Implementations.LiveTv.EmbyTV.EmbyTV: Error adding metadata
System.Xml.XmlException: System does not support 'utf8' encoding. Line 1, position 31.
 ---> System.ArgumentException: 'utf8' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. (Parameter 'name')
   at System.Text.EncodingTable.InternalGetCodePageFromName(String name)
   at System.Text.EncodingTable.GetCodePageFromName(String name)

Y no aparece absolutamente nada en la guía de programas, para ningún canal, en ningún día:

image

NOTA: Estoy corriendo la rama no_aiodns

jagbarcelo commented 2 years ago

El fichero guia.xml empieza con las siguientes líneas:

<?xml version='1.0' encoding='utf8'?>
<tv date="20220207210505" generator_info_url="http://wiki.xmltv.org/index.php/XMLTVFormat">
[...]

Según se indica en este hilo y según W3C parece que debería ser:

<?xml version='1.0' encoding='utf-8'?>
[...]
jmarcet commented 2 years ago

Vaya, gracias de nuevo por tus aportaciones 😄

Aunque uso Jellyfin, no para acceder a la TV en concreto porque no encontré forma de evitar que me haga transcode de todo.

Sé de dónde proviene el cambio, lo recuerdo bien. En un rato lo miro.

jmarcet commented 2 years ago

No salgo de mis sorpresas.

El motivo del cambio que provocó esto es que pasé de usar el método dump() del ElemenTree a usar el método tostring() y pasa algo muy curioso con éste último. Si le paso como argumento encoding="utf8" el mismo ElementTree me escribe la cabecera del xml, si le paso cualquier otra cosa, incluído encoding="utf-8" no me la escribe y se la tengo que poner a mano.

Me di cuenta del cambio en su momento, pero como era el propio ElementTree que estaba escribiendo la cabecera y tanto Kodi como TiviMate y OTT lo entendían todo correctamente, pues lo dejé así. No me di cuenta de que Jellyfin fallaba.

Para que veas, este será el arreglo que hace que Jellyfin funcione de nuevo bien:

@@ -1400,7 +1411,8 @@ async def main():
             ElTr.indent(xml)
         except AttributeError:
             pass
-        guide = ElTr.tostring(xml, encoding="utf8")
+        guide = b"<?xml version='1.0' encoding='utf-8'?>\n"
+        guide += ElTr.tostring(xml, encoding="utf-8")

         if args.guide:
             with open(args.guide, "wb") as f:
jmarcet commented 2 years ago

Ya subí el fix, actualicé también la rama no_aiodns.

Al final no le añado la declaración de xml a mano, había otro argumento para forzarlo:

diff --git a/tv_grab_es_movistartv b/tv_grab_es_movistartv
index adfd8bf..e8989fe 100755
--- a/tv_grab_es_movistartv
+++ b/tv_grab_es_movistartv
@@ -1401,7 +1401,7 @@ async def main():
             ElTr.indent(xml)
         except AttributeError:
             pass
-        guide = ElTr.tostring(xml, encoding="utf8")
+        guide = ElTr.tostring(xml, encoding="utf-8", xml_declaration=True)

         if args.guide:
             with open(args.guide, "wb") as f:
jmarcet commented 2 years ago

Gracias por tus aportes @jagbarcelo !

jagbarcelo commented 2 years ago

Incluso ahora que el encabezado indica 'utf-8', Jellyfin sigue sacando las mismas excepciones indicando 'utf8' (sin guión).

root@pi-u7d:/home# head guide.xml
<?xml version='1.0' encoding='utf-8'?>
<tv date="20220208144948" generator_info_url="http://wiki.xmltv.org/index.php/XMLTVFormat">
  <channel id="3103.movistar.tv">
    <display-name>Movistar Plus+</display-name>
  </channel>
  <channel id="2543.movistar.tv">
    <display-name>La 1 HD</display-name>
  </channel>
  <channel id="4455.movistar.tv">
    <display-name>La 2 HD</display-name>
root@pi-u7d:/home#
[2022-02-08 14:51:38.704 +01:00] [ERR] [81] Emby.Server.Implementations.LiveTv.LiveTvManager: Error getting programs for channel "Movistar Plus+"
System.Xml.XmlException: System does not support 'utf8' encoding. Line 1, position 31.
 ---> System.ArgumentException: 'utf8' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. (Parameter 'name')
   at System.Text.EncodingTable.InternalGetCodePageFromName(String name)
   at System.Text.EncodingTable.GetCodePageFromName(String name)
   at System.Text.Encoding.GetEncoding(String name)
   at System.Xml.XmlTextReaderImpl.CheckEncoding(String newEncodingName)
   --- End of inner exception stack trace ---
   at System.Xml.XmlTextReaderImpl.Throw(Exception e)
   at System.Xml.XmlTextReaderImpl.CheckEncoding(String newEncodingName)
   at System.Xml.XmlTextReaderImpl.ParseXmlDeclaration(Boolean isTextDecl)
   at System.Xml.XmlTextReaderImpl.Read()
   at System.Xml.XmlReader.ReadToDescendant(String name)
   at Jellyfin.XmlTv.XmlTvReader.GetChannels()
   at Emby.Server.Implementations.LiveTv.Listings.XmlTvListingsProvider.GetChannels(ListingsProviderInfo info, CancellationToken cancellationToken)
   at Emby.Server.Implementations.LiveTv.EmbyTV.EmbyTV.GetEpgChannels(IListingsProvider provider, ListingsProviderInfo info, Boolean enableCache, CancellationToken cancellationToken)
   at Emby.Server.Implementations.LiveTv.EmbyTV.EmbyTV.GetEpgChannelFromTunerChannel(IListingsProvider provider, ListingsProviderInfo info, ChannelInfo tunerChannel, CancellationToken cancellationToken)
   at Emby.Server.Implementations.LiveTv.EmbyTV.EmbyTV.GetProgramsAsync(String channelId, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken)
   at Emby.Server.Implementations.LiveTv.LiveTvManager.RefreshChannelsInternal(ILiveTvService service, IProgress`1 progress, CancellationToken cancellationToken)
[2022-02-08 14:51:38.708 +01:00] [INF] [81] Emby.Server.Implementations.ScheduledTasks.TaskManager: "Refresh Guide" Completed after 0 minute(s) and 3 seconds
[2022-02-08 14:51:38.711 +01:00] [INF] [81] Emby.Server.Implementations.ScheduledTasks.TaskManager: ExecuteQueuedTasks

He editado directamente el fichero guide.xml con vi para hacer un quick & dirty fix y le he puesto UTF-8 en mayúsculas.

He vuelto a Jellyfin y forzado la descarga de la guía y ahora sí la ha tomado bien. Tal vez el problema no era tanto que utf llevara o no llevara guión, sino más bien que estuviera o no en mayúsculas (o las 2 cosas).

image

jmarcet commented 2 years ago

Incluso ahora que el encabezado indica 'utf-8', Jellyfin sigue sacando las mismas excepciones indicando 'utf8' (sin guión).

Me cuesta creerlo. Si te digo que lo probé con Jellyfin es porque lo he hecho, estaba fallando como bien me indicaste y ha dejado de hacerlo.

Uso Jellyfin de la rama estable, 10.7:

image

Pero bueno, es cierto que originalmente usaba UTF-8, y veo que no mientes, no entiendo por qué mi Jellyfin admite utf-8 y el tuyo no, pero lo he dejado como originalmente, UTF-8.

¿Cómo tienes instalado el Jellyfin? ¿Qué versión es?

jagbarcelo commented 2 years ago

Puse los datos al principio del hilo:

Corriendo en un contenedor Docker de https://registry.hub.docker.com/r/jellyfin/jellyfin/

  • Server: jellyfin
  • Version: 10.7.7
  • Operating System: Linux
  • Architecture: X64

Todo eso corre en un Synology con DSM 7.0.1-42218 Update 2 y el paquete de Docker instalado que hace de anfitrión para el contenedor de Jellyfin.

jmarcet commented 2 years ago

Vaya, yo uso la rama estable pero lo buildeo localmente porque tengo un par de parches en el Jellyfin. Nada que ver con el xml este en cuestión.

¿Ahora te vuelve a funcionar todo correctamente, no?

jagbarcelo commented 2 years ago

Correcto. Después de unas horas funcionando y de dejar que Jellyfin descargara varias veces la guía, no ha saltado ninguna excepción. UTF-8 en mayúsculas soluciona el problema.