Kodi-vStream / venom-xbmc-addons

Addon de Streaming français pour Xbmc
GNU General Public License v3.0
497 stars 275 forks source link

Bande annonce alternative YouTube #3925

Open DavidHenryThoreau opened 2 years ago

DavidHenryThoreau commented 2 years ago

Depuis que l'extension 'plugin.video.youtube impose d'avoir un compte pour accèder à l'API j'utilise https://github.com/lekma/plugin.video.invidious au lieu de YouTube.

Est-ce qu'il serait possible d'ajouter dans les paramètres de configuration de modifier le type d'extension pour voir les bandes annonce ? invidious au lieu de youtube ?

ERROR <general>: EXCEPTION: Unknown addon id 'plugin.video.youtube'

TmpName commented 2 years ago

Ben tout le code est dans le fichier resources/hosters/youtube.py

Il y a 2 modes de fonctionnement, via le plugin youtube et via yt1s qui ne marche plus.

C'est pas trop dur a faire, on peut faire un check sur un plugin et si il n'est pas dispo basculer sur le second.

Par contre je ne trouve pas d'info sur comment utiliser le plugin tu n'aurais pas l'url d'appel dans les logs ?

Dans le fichier c'est la ligne (pour le plugin youtube, il me faudrait celle du plugin invidious) api_call = 'plugin://plugin.video.youtube/play/?video_id=' + videoID

alKODIque commented 2 years ago

Je ne connaissais pas mais je suis heureuse de coonnaître maintenant l'existance de cet addon ;)

J'ai installé dans le but de tester mais je crois que nous sommes limité par région... Par contre, ça fonctionne très bien!!

Il y a probablement des paramètres à voir sur le github du développeur pour la configuration car dans l'état actuel, nous ne pouvons pas modifier la langue. La zone est grisée dans les paramètres..

Ceci dit, voici la ligne que tu demandes @TmpName : VideoPlayer::OpenFile: plugin://plugin.video.invidious/?action=video&videoId=

Mais l'addon demande la dépendance Inter-Addon Procedur Call lors de l'installation. J'ai du installer depuis le dépôt sinon j'avais un échec d'installation.

Je joins aussi mon log au cas ou tu veuilles voir ce que ça dit lors d'une recherche :) (Voir à partir de la ligne 424)

kodi.log

TmpName commented 2 years ago

Alors essayez de remplacer le host youtube.py par

# -*- coding: utf-8 -*-
# vStream https://github.com/Kodi-vStream/venom-xbmc-addons
# type
# https://www.youtube.com/embed/etc....
# https://www.youtube.com/watch?v=etc...
# http://www.youtube-nocookie.com/v/etc...
# https://youtu.be/etc...

import time

from resources.hosters.hoster import iHoster
from resources.lib.handler.requestHandler import cRequestHandler
from resources.lib.comaddon import VSlog

import xbmcaddon

class cHoster(iHoster):

    def __init__(self):
        iHoster.__init__(self, 'youtube', 'Youtube')

    def _getMediaLinkForGuest(self):

        # 0 = Plugin invidious
        # 1 = Plugin Youtube

        MODE = 0

        api_call = ''

        if MODE == 0 and not xbmcaddon.Addon('plugin.video.invidious'):
            VSlog('Plugin Invidious non installe')
            MODE = 1

        if MODE == 1 and not xbmcaddon.Addon('plugin.video.youtube'):
            VSlog('Plugin Youtube non installe')

        if 'plugin'  in self._url:
            api_call = self._url
        else:
            videoID = self.__getIdFromUrl(self._url)
            if MODE == 1:
                api_call = 'plugin://plugin.video.youtube/play/?video_id=' + videoID
            else:
                api_call = 'plugin://plugin.video.invidious/?action=video&videoId=' + videoID

        if api_call:
            return True, api_call
        else:
            return False, False

    def __getIdFromUrl(self, sUrl):
        id = ''
        if 'plugin' not in sUrl:
            id = sUrl
            id = id.replace('http:', '')
            id = id.replace('https:', '')
            id = id.replace('//', '')
            id = id.replace('www.youtube.com', '')
            id = id.replace('www.youtube-nocookie.com', '')
            id = id.replace('/embed/', '')
            id = id.replace('/watch?v=', '')
            id = str(id)
        else:
            id = sUrl

        return id

Si le plugin Invidious est installé, il est prioritaire, sinon ca bascule tout seul sur le plugin youtube. Il y a 2 / 3 message en logs qui peuvent etre utiles

TmpName commented 2 years ago

Personne pour tester ?

alKODIque commented 2 years ago

Personne pour tester ?

Désolée, de mon côté j'avoue ne pas avoir vu l'intérêt puisque je possède déjà ma clé API Youtube personnelle et que je n'ai aucun probl;me avec les BA.. Je ne souhaite donc pas installer un addon supplémentaire qui ne me servira pas ;)

Par contre, si tu as besoin pour tester et que personne d'autre ne se manifeste, je peux intaller et tester pour toi, ça va me faire plaisir

sizanic commented 2 years ago

Et moi, personnellement je n'ai pas de clef API mais les bandes annonces ont toujours démarrés. Je n'ai jamais compris ce débat autour des bandes annonces 😄

TmpName commented 2 years ago

Lol, ben moi pareil ^^, flemme d'installer un plugin en plus. Mais si certain veulent utiliser ce plugin, je peux indiquer comment tester en modifiant le fichier.

DavidHenryThoreau commented 2 years ago

Alors essayez de remplacer le host youtube.py par

# -*- coding: utf-8 -*-
# vStream https://github.com/Kodi-vStream/venom-xbmc-addons
# type
# https://www.youtube.com/embed/etc....
# https://www.youtube.com/watch?v=etc...
# http://www.youtube-nocookie.com/v/etc...
# https://youtu.be/etc...

import time

from resources.hosters.hoster import iHoster
from resources.lib.handler.requestHandler import cRequestHandler
from resources.lib.comaddon import VSlog

import xbmcaddon

class cHoster(iHoster):

    def __init__(self):
        iHoster.__init__(self, 'youtube', 'Youtube')

    def _getMediaLinkForGuest(self):

        # 0 = Plugin invidious
        # 1 = Plugin Youtube

        MODE = 0

        api_call = ''

        if MODE == 0 and not xbmcaddon.Addon('plugin.video.invidious'):
            VSlog('Plugin Invidious non installe')
            MODE = 1

        if MODE == 1 and not xbmcaddon.Addon('plugin.video.youtube'):
            VSlog('Plugin Youtube non installe')

        if 'plugin'  in self._url:
            api_call = self._url
        else:
            videoID = self.__getIdFromUrl(self._url)
            if MODE == 1:
                api_call = 'plugin://plugin.video.youtube/play/?video_id=' + videoID
            else:
                api_call = 'plugin://plugin.video.invidious/?action=video&videoId=' + videoID

        if api_call:
            return True, api_call
        else:
            return False, False

    def __getIdFromUrl(self, sUrl):
        id = ''
        if 'plugin' not in sUrl:
            id = sUrl
            id = id.replace('http:', '')
            id = id.replace('https:', '')
            id = id.replace('//', '')
            id = id.replace('www.youtube.com', '')
            id = id.replace('www.youtube-nocookie.com', '')
            id = id.replace('/embed/', '')
            id = id.replace('/watch?v=', '')
            id = str(id)
        else:
            id = sUrl

        return id

Si le plugin Invidious est installé, il est prioritaire, sinon ca bascule tout seul sur le plugin youtube. Il y a 2 / 3 message en logs qui peuvent etre utiles

Après avoir remplacé le youtube.py par le code modifié : J'ai ces informations dans les journaux avec le thème fTV (impossible de voir les bandes annonce) : 2022-09-19 13:05:56.282 T:826 INFO <general>: VideoPlayer::OpenFile: plugin 2022-09-19 13:05:56.282 T:4476 INFO <general>: Creating InputStream 2022-09-19 13:05:56.282 T:4476 ERROR <general>: CVideoPlayer::OpenInputStream - error opening [plugin] 2022-09-19 13:05:56.282 T:4476 INFO <general>: CVideoPlayer::OnExit() 2022-09-19 13:05:56.397 T:826 INFO <general>: CVideoPlayer::CloseFile() 2022-09-19 13:05:56.397 T:826 INFO <general>: VideoPlayer: waiting for threads to exit 2022-09-19 13:05:56.397 T:826 INFO <general>: VideoPlayer: finished waiting WARNING <general>: CGUIWindowManager - HandleAction - ignoring action 0, because topmost modal dialog animation is running

Avec le thème Estuary de base ça fonctionne bien je peux voir les bandes annonces.

TmpName commented 2 years ago

Ha parce que ca depend des themes aussi ?

sizanic commented 2 years ago

Si le bouton de lancement d'une ba ne fonctionne pas avec un certain thème, ça peut vouloir dire tout simplement que ce skin propose son propre bouton avec sa propre action de lancement d'une BA. Et ce n'est donc pas l'action de vStream. Et donc vStream n'y peut rien.

DavidHenryThoreau commented 2 years ago

C'est noté pour le thème, comme je le disais au-dessus, l'intégration invidious fonctionne bien avec le thème de base, si c'est possible d'intégrer la prise en charge de invidious dans le script host youtube.py :+1:

TmpName commented 2 years ago

Pourquoi pas, de toute facon ca ne ralentira pas le code. Je te fais ca de suite, avec le principe du precedent code.

DavidHenryThoreau commented 1 year ago

C'est ajouté dans la version Version 2.1.0

sizanic commented 1 year ago

j'ai enfin testé pour voir ce que ça donne.

Déjà, si j'ai bien compris, il faut paramétrer le nom d'une instance. ça m'a permis de voir les Tendances et les Populaires.

MAIS impossible de lancer une bande annonce depuis vStream !

J'ai raté quelque chose ?

TmpName commented 1 year ago

Ca vient peut etre de moi. J'avais fais une bourde sur le fichier du hoster YT du coup j'ai remodifié le fichier.

DavidHenryThoreau commented 1 year ago

Il est impossible de visualiser les bandes annonces avec Invidious :

2023-08-03 15:03:24.720 T:1216    error <general>: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
                                                    - NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
                                                   Error Type: <class 'AttributeError'>
                                                   Error Contents: Invalid action 'play_video'
                                                   Traceback (most recent call last):
                                                     File "/storage/.kodi/addons/plugin.video.invidious/lib/plugin.py", line 223, in <module>
                                                       dispatch(*argv)
                                                     File "/storage/.kodi/addons/plugin.video.invidious/lib/plugin.py", line 219, in dispatch
                                                       InvidiousPlugin(url, int(handle)).dispatch(**parseQuery(query))
                                                     File "/storage/.kodi/addons/plugin.video.invidious/lib/plugin.py", line 27, in dispatch
                                                       super(InvidiousPlugin, self).dispatch(**kwargs)
                                                     File "/storage/.kodi/addons/script.module.iapc/lib/iapc/tools/plugin.py", line 63, in dispatch
                                                       raise AttributeError(__invalid_action__.format(name)) from None
                                                   AttributeError: Invalid action 'play_video'
                                                   -->End of Python script error report<--
sizanic commented 1 year ago

Parce que tu n'utilises pas la dernière version de Invidious.

DavidHenryThoreau commented 1 year ago

J'utilise la dernière version présente dans le dépôt : la 2.2.4 : https://github.com/lekma/repository.lekma/tree/master/nexus/plugin.video.invidious

2023-08-08 18:01:13.090 T:1227     info <general>:      [PLUGIN] vStream: load site cGui and call function viewBA
2023-08-08 18:01:13.920 T:1227     info <general>:      [PLUGIN] vStream: SQLITE 3 as DB engine for tmdb
2023-08-08 18:01:15.249 T:1227     info <general>:      [PLUGIN] vStream: playertype from config: dvdplayer
2023-08-08 18:01:15.250 T:1227     info <general>:      [PLUGIN] vStream: player initialized
2023-08-08 18:01:16.089 T:1228    error <general>: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
                                                    - NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
                                                   Error Type: <class 'AttributeError'>
                                                   Error Contents: Invalid action 'play_video'
                                                   Traceback (most recent call last):
                                                     File "/storage/.kodi/addons/plugin.video.invidious/lib/plugin.py", line 223, in <module>
                                                       dispatch(*argv)
                                                     File "/storage/.kodi/addons/plugin.video.invidious/lib/plugin.py", line 219, in dispatch
                                                       InvidiousPlugin(url, int(handle)).dispatch(**parseQuery(query))
                                                     File "/storage/.kodi/addons/plugin.video.invidious/lib/plugin.py", line 27, in dispatch
                                                       super(InvidiousPlugin, self).dispatch(**kwargs)
                                                     File "/storage/.kodi/addons/script.module.iapc/lib/iapc/tools/plugin.py", line 63, in dispatch
                                                       raise AttributeError(__invalid_action__.format(name)) from None
                                                   AttributeError: Invalid action 'play_video'
                                                   -->End of Python script error report<--

2023-08-08 18:01:16.260 T:1072    error <general>: Playlist Player: skipping unplayable item: 0, path [plugin://plugin.video.invidious/?action=play_video&video_id=wx0mwd9l93Q]
sizanic commented 1 year ago

Le depot "lekma" ?

Pour moi, la version officielle est celle qui est référencée par Kodi : https://kodi.wiki/view/Add-on:Invidious

Disponible dans le dépot de kodi : image

DavidHenryThoreau commented 1 year ago

https://github.com/TheAssassin/kodi-invidious-plugin

This repository has been archived by the owner on Apr 30, 2023. It is now read-only.

Lors de précédents tests cette version ne permettait pas de visualiser des vidéos, et le dépôt est en lecture seule, c'est pourquoi j'ai trouvé une autre extension mise à jour et fonctionnelle.

TmpName commented 1 year ago

"fonctionnelle" ? Du coup ca c'est moins sur.

Apparement celle qui est read only marchait y a quelques mois, quand on a rajoute le code. Et si on passe par kodi on arrive sur celle de @sizanic , pas sur que la tienne soit officielle.

sizanic commented 1 year ago

La derniere issue du repo TheAssassin fait justement référence à ce conflit d'addon, car ils utilisent le même addon-id https://github.com/TheAssassin/kodi-invidious-plugin/issues/26

En réponse, cette issue du repo "Lekma" sur le même sujet affirme que maintenant il n'y plus de sujet car l'autre repo ont archivé leur addon (ce qui revient à dire qu'ils le retirent du marché).

https://github.com/lekma/plugin.video.invidious/issues/81

Je suis prêt à reconnaitre, au vu des derniers développements par la team Lekma, qu'il faudrait maintenant passer sur celui-ci.

Il faudrait que la team Kodi dé-réference l'ancien (qu'elle l'enleve de leur repo).

TmpName commented 1 year ago

Il y en a ici qui sont avec la vielle version archivée ?