Forum Linux.général Diffuser le flux audio d'une vidéo sur une machine distante ?

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
1
17
déc.
2013

Bonjour à tous,

Je dispose chez moi d'un petit serveur Debian branché sur des enceintes, et faisant, entre autres, tourner MPD. J'essaie depuis des mois de trouver une solution me permettant de pouvoir regarder un film sur mon ordinateur portable et de diffuser le son (et le son uniquement) sur le serveur afin de pouvoir bénéficier d'une meilleure qualité de son. J'ai essayé plein de trucs, mais rien ne semble fonctionner correctement.

Le moins insatisfaisant pour l'instant est d'utiliser Pulseaudio/RTP mais, outre le fait que cela fonctionne une fois sur dix, je n'ai à ce jour pas réussi à faire en sorte qu'il n'y ait pas de latence. Celle-ci, je le comprends bien, est plus ou moins inévitable, mais ne serait-il pas possible d'ajouter un cache/de régler le buffer afin de retarder la vidéo pour qu'elle soit synchronisée avec le son ?

Merci à tous d'avance.

  • # un bout de solution

    Posté par  . Évalué à 2.

    je n'ai à ce jour pas réussi à faire en sorte qu'il n'y ait pas de latence. Celle-ci, je le comprends bien, est plus ou moins inévitable, mais ne serait-il pas possible d'ajouter un cache/de régler le buffer afin de retarder la vidéo pour qu'elle soit synchronisée avec le son ?

    utilises un lecteur video (VLC par exemple)
    qui permet de regler le decalage (avant/arriere) entre le son et l'image
    selon que l'image à de l'avance ou du retard sur le son.

    dans ton cas j'imagine que le son arrive apres l'image,
    il faut donc avancer le son par rapport à l'image affiché

    • [^] # Re: un bout de solution

      Posté par  (site web personnel) . Évalué à 1.

      Merci, je n'y avais pas pensé. Donc j'installe vlc avec l'interface web sur mon serveur ? Mais pourrais-je dans ce cas faire en sorte que vlc joue le son sur le serveur plutôt que de le streamer ?

      • [^] # Re: un bout de solution

        Posté par  . Évalué à 2.

        tu installes VLC sur ton portable puisque c'est lui qui joue la video et l'audio.

        tu regles VLC pour envoyer le son vers la carte audio/RTP/le streamer que tu veux ou celui que tu utilises deja.

        • [^] # Re: un bout de solution

          Posté par  (site web personnel) . Évalué à 1.

          Merci pour ta réponse. J'ai encore des soucis avec le RTP, ça marche par intermittence et la qualité est mauvaise, mais je vais creuser. L'autre souci est que mes fichiers sont stockés sur le serveur, je les ouvre via NFS; ça marche globalement bien mais de temps en temps la vidéo freeze un peu, ce qui me forcerait à rechanger le délai sur VLC.

          • [^] # Re: un bout de solution

            Posté par  (site web personnel) . Évalué à 1.

            De plus, j'ai peur qu'en terme de débit, ça coince, étant donné qu'il y a des flux dans les deux sens. Peut-être est-ce un problème insoluble.

          • [^] # Re: un bout de solution

            Posté par  . Évalué à 1.

            alors il te faut faire l'inverse est utilisé toutes les fonctions DLNA

            à savoir c'est ton serveur qui joue la video et le son,
            et seule l'image passe au travers du reseau pour etre afficher chez toi.

            du coup juste installer vlc sur le serveur,
            lancer depuis ton poste un truc du genre

            ssh -X user@server vlc /chemin/vers/la/video
            • [^] # Re: un bout de solution

              Posté par  (site web personnel) . Évalué à 1.

              Alors ça j'ai testé, mais ça lagge beaucoup, même en changeant les algos de chiffrage et en utilisant la compression. Mais a priori, c'est la solution qui me plaît le plus.

              • [^] # Re: un bout de solution

                Posté par  . Évalué à 1.

                comme dit plus haut, ensuite ca depend du type de reseau, filaire (100Mbps ? 1Gbps ?), wifi (54Mbps, 108Mbps, 300Mbps ?)

                pour le chiffrage j'en mettrais aucun si c'est en reseau interne
                voir meme plutot qu'un tunnel, un simple
                export DISPLAY=IP_du_PC:0.0 vlc /chemin/vers/ma/video

                avec peut-etre (avant le lancement sur le serveur) un deblocage coté PC avec
                xhost +IP_du_serveur

                • [^] # Re: un bout de solution

                  Posté par  (site web personnel) . Évalué à 1.

                  Hum, il n'aime pas trop. VLC ne trouve pas de serveur X.

                  Merci pour ta réponse.

                  • [^] # Re: un bout de solution

                    Posté par  . Évalué à 2.

                    j'ai du me gourer dans la ligne, en fait il faut faire en 3 etapes.

                    1. sur ta machine : xhost +
                    2. sur le serveur : export DISPLAY=IP-de-la-machine:0.0
                    3. toujours sur le serveur : vlc /chemin/vers/la/video
                    • [^] # Re: un bout de solution

                      Posté par  (site web personnel) . Évalué à 3.

                      Ou avec un ligne

                      DISPLAY=IP-de-la-machine:0.0 vlc /chemin/vers/la/video
                      

                      On peux surcharger toute variable d'environnement en la mettant devant la commande séparer d'un espace. Mais alors ne pas faire export !

        • [^] # Re: un bout de solution

          Posté par  . Évalué à 2.

          cvlc qui est la version sans couche X de VLC

          Ça donnerait un truc du genre à partir du serveur

          cvlc mon-film.mp4 --sout 'duplicate{dst=display,dst=std{access=udp,dst=192.168.1.10:1234}}'
          

          et coté de ton portable

          vlc udp://@:1234
          

          C'est à adapter et tester, la syntaxe de VLC est (était) épouvantable.

          https://wiki.videolan.org/Documentation:Streaming_HowTo/Command_Line_Examples/

  • # gstreamer ?

    Posté par  . Évalué à 2.

    Avec pipeline gstreamer. D'après ce lien :
    https://upsilon.cc/~zack/blog/posts/2007/02/rhythmbox_gstreamer_pipeline/

    on the local machine run
    $ gst-launch tcpserversrc host=0.0.0.0 port=3000 ! decodebin ! audioconvert ! alsasink
    on the remote machine run
    $ gst-launch filesrc location=yourfile.mp3 ! tcpclientsink host=localmachine port=3000

    Voir aussi http://linuxfr.org/news/gstreamer-degaine-la-version-1-2

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.