2017-03-29 5 views
0

Je souhaite configurer un client vidéo basé sur Ubuntu 16.04/Gnome/VLC 2.2.2. Il devrait lire une seule vidéo en plein écran directement après le démarrage sur deux écrans. La vidéo est contrôlée via l'interface Web VLC.Afficher la vidéo sur deux écrans avec VLC

Tout fonctionne correctement sur un seul écran. Cependant, avec plusieurs écrans, je rencontre le problème que le mode plein écran ne s'affiche que sur l'un d'entre eux.

Il y a plusieurs façons j'essayé de le réparer:

1) Utilisez le mode plein écran normal. Affiche uniquement la vidéo sur un écran

2) Utilisez le filtre Vidéo Wall comme décrit ici: http://windows7themes.net/en-us/stretch-videomovie-across-2-monitors/ Cela a de multiples problèmes. Plus souvent qu'autrement, il ne montre pas la vidéo correctement. Il y a une erreur de sortie dans l'une des fenêtres. Je ne sais pas non plus comment positionner automatiquement ces fenêtres et les mettre en mode plein écran (pseudo). La lecture de certaines discussions sur cette fonctionnalité me fait penser qu'il est actuellement cassé.

3) Redimensionner la fenêtre pour remplir tout l'écran (manuellement) Cela fonctionne en général. Cependant, il montre encore une fenêtre autour de la vidéo et les éléments de bureau de Gnome. Est-il possible de corriger cela et de dimensionner/positionner la vidéo automatiquement au démarrage?

Comment puis-je faire fonctionner cela?

Répondre

0

Après avoir essayé plusieurs façons, c'est la solution que je fini avec:

  • diviser la vidéo en deux parties
  • Démarrer deux instances de vlc
  • Faire chaque plein écran sur l'un des écrans
  • non à chaque instance vlc un port HTTP différent pour contrôler
  • Copier l'interface web de vlc dans mon propre site web (quelques javascript, images, fichiers html et css)
  • Gérez les appels à "/requests/status.xml" sur mon serveur Web. C'est ce que l'interface Web vlc appelle pour obtenir l'état actuel du lecteur et envoyer des commandes.
  • Transmettez les requêtes plain.xml à l'une des instances, transférez tout avec une commande aux deux instances de vlc.

C'est pour démarrer deux instances vlc en plein écran:

vlc --http-port 8080 --http-password vlc123 --loop --video-x=0 --video-y==100 --fullscreen --qt-fullscreen-screennumber=1 '/path/to/my/video1' & 

vlc --http-port 8090 --http-password vlc123 --loop --video-x=2000 --video-y==100 --fullscreen --qt-fullscreen-screennumber=2 '/path/to/my/video2' & 

Et voici le proxy CherryPy:

class VlcProxy(object): 
    @cherrypy.expose 
    def index(self, **args): 
     command_parameter = "" 
     if args.has_key("command"): 
      command_parameter = "?command=" + args["command"] 
      if args.has_key("val"): 
       command_parameter += "&val=" + args["val"] 
      # if there is a command, send it to both running vlc instances 
      url = videoclient_baseurl + ":8090/requests/status.xml" + command_parameter 
      thread.start_new_thread(self.request, (url, "", "vlc123")) 

     # if it is only a status, then one response is enough 
     response = self.request(videoclient_baseurl + ":8080/requests/status.xml" + command_parameter, "", "vlc123") 
     return response 

Ce n'est pas & propre solution facile je m'y attendais, mais il fonctionne bien jusqu'à présent. L'inconvénient est que vous avez besoin de proxy les appels vlc et les vidéos pourraient (en théorie) désynchroniser. Cependant, dans mon scénario, cela ne s'est jamais produit. La bonne partie est que l'interface web vlc fait maintenant partie de mon application. Je n'ai pas besoin de mettre à jour vlc si je veux juste repositionner un bouton.