59 votes

Comment puis-je configurer des flux audio en direct vers un appareil compatible DLNA ?

Existe-t-il un moyen de diffuser la sortie en direct de la carte son de notre ordinateur de bureau 12.04.1 LTS amd64 vers un périphérique externe compatible DLNA dans notre réseau ? La sélection de contenu multimédia dans des répertoires partagés à l'aide de Rygel, miniDLNA et uShare est toujours possible, mais jusqu'à présent, nous n'avons pas réussi à obtenir un flux audio en direct vers un client via DLNA.

Pulseaudio prétend avoir un serveur multimédia DLNA/UPnP qui, avec Rygel, est censé faire exactement cela. Mais nous n'avons pas réussi à le faire fonctionner.

Nous avons suivi les étapes décrites dans live.gnome.org , cette réponse ici, et aussi dans un autre guide similaire .


Sur 12.04 LTS nous pouvons sélectionner le périphérique audio local, ou notre flux GST-Launch dans le client DLNA mais Rygel affiche le message suivant et le client indique qu'il a atteint la fin de la liste de lecture :

(rygel:7380): Rygel-WARNING **: rygel-http-request.vala:97: Invalid seek request

Il n'y avait aucun moyen d'écouter des flux audio en direct sur le client.


Seulement après une mise à jour de la distribution vers 14.04 LTS nous avons pu sélectionner un flux en direct sur nos restituteurs DLNA à partir de paramètres bien définis. décrit dans la réponse ci-dessous . Pourtant, nous devions choisir un courant établi après nous avons lancé rygel et nous n'avons pas pu pousser un nouveau flux vers nos appareils UPnP. Les métadonnées audio n'ont pas été transmises.


Existe-t-il d'autres alternatives pour envoyer l'audio de notre carte son en direct vers un client DLNA ?

69voto

Massimo Points 1346

Pulseaudio-DLNA

J'ai créé un petit serveur qui découvre tous les serveurs de rendu upnp dans votre réseau et les ajoute comme puits à pulseaudio. Ainsi vous pouvez contrôler chaque application via pavucontrol pour qu'elle soit jouée sur vos appareils upnp.

C'est le genre de confort que j'ai toujours voulu avoir en traitant avec des périphériques upnp sous linux.

L'application peut être installée à partir des sources ou du paquet DEB. téléchargeable depuis git ou après que nous ayons ajouté la version officielle du projet ppa:qos/pulseaudio-dlna à nos sources avec :

sudo apt-get update && sudo apt-get install pulseaudio-dlna

Nous lançons ensuite pulseaudio-dlna depuis la ligne de commande avec les options suivantes :

pulseaudio-dlna [--host <host>] [--port <port>] [--encoder <encoder>] [--renderer-urls <urls>] [--debug]
pulseaudio-dlna [-h | --help | --version]

Voir également le pulseaudio-dlna "À propos" pour plus.

Lorsqu'un moteur de rendu DLNA est présent, nous pouvons le sélectionner dans le menu son en tant que récepteur de sortie :

enter image description here

8voto

Brabster Points 18764

Le Pavucontrol est la pièce manquante de ce puzzle ! J'avais également tout configuré correctement et l'appareil externe (LG TV) montrait que le son était joué mais je n'entendais aucun son. Aujourd'hui, j'ai installé Pavucontrol et lorsque je l'ai ouvert, j'ai trouvé l'option permettant de canaliser le son via le serveur DLNA. L'option DLNA ne s'affiche que lorsque le son est émis par un lecteur vers pulseaudio. enter image description here

4voto

Don Points 89

Je suis désolé de ne pas pouvoir vous aider avec Rygel, mais il existe peut-être une alternative qui pourrait vous convenir.

Le principe est d'obtenir un programme pour enregistrer le flux dans un fichier audio, puis de lancer miniDLNA avec une configuration personnalisée qui pointe vers le répertoire dans lequel se trouve le flux.

Exemple : Disons que nous travaillons dans ~/stream/. Créer ~/stream/minidlna.conf

network_interface=wlan0
media_dir=/home/<user>/stream/
friendly_name=Live Audio Stream
db_dir=/home/<user>/stream/
album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg
inotify=no
enable_tivo=no
strict_dlna=no
notify_interval=900
serial=12345678
model_number=1

Enregistrez ensuite le flux dans un fichier audio dans ce répertoire. En cherchant sur Google "FFmpeg record sound card audio", on obtient cette commande

ffmpeg -f alsa -i default -acodec flac ~/stream/OutputStream.flac

mais je n'ai pas eu beaucoup de chance avec ça. Une autre option est vlc si vous avez une interface graphique disponible et que cela ne fonctionne pas.

Puis démarrez le miniDLNA dans une autre fenêtre de terminal :

minidlna -d -f ~/stream/minidlna.conf -P ~/stream/minidlna.pid

Il devrait localiser OutputStream.flac et être ensuite accessible depuis votre périphérique réseau.

J'espère que si vous n'avez pas encore trouvé de solution, cela vous a donné quelques idées.

4voto

Adam Points 71

Une idée que j'ai eue pour diffuser "ce que j'entends" vers un restituteur DLNA (comme WDTV) a été de serveur le flux avec VLC comme flux http avec pulse://alsa_output.xxx.monitor comme entrée et le transcoder en MP3 ou FLAC. Ensuite, je voulais utiliser un point de contrôle DLNA pour permettre au moteur de rendu de lire ce flux. VLC sert correctement le flux transcodé, mais il ne permet pas de définir le type mime, et le moteur de rendu refuse de le lire.

L'idée suivante a été d'écrire un serveur http en Python qui sert le flux à la place. Il obtient le flux audio de pulse avec parec et l'encode avec flac (ou lame ou ce que vous voulez) et définit le type mime correctement.

Il fonctionne avec le script suivant (très simple) :

#!/usr/bin/python

import BaseHTTPServer
import SocketServer
import subprocess

PORT = 8080
# run "pactl list short |grep monitor" to see what monitors are available
# you may add a null sink for streaming, so that what is streamed is not played back locally
# add null sink with "pactl load-module module-null-sink"
MONITOR = 'null.monitor'
MIMETYPE = 'audio/flac'
ENCODER = 'flac - -c --channels 2 --bps 16 --sample-rate 44100 --endian little --sign signed'
BUFFER = 65536

class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_HEAD(s):
    print s.client_address, s.path, s.command
    s.send_response(200)
    s.send_header('content-type', MIMETYPE)
    s.end_headers()
def do_GET(s):
    s.do_HEAD()
    pa = subprocess.Popen('parec -d {} | {}'.format(MONITOR, ENCODER), shell = True, bufsize = BUFFER, stdout = subprocess.PIPE)
    while True:
        data = pa.stdout.read(1024)
        if len(data) == 0: break
        s.wfile.write(data)
    print 'stream closed'

httpd = SocketServer.TCPServer(("", PORT), Handler)

print "listening on port", PORT

try:
httpd.serve_forever()
except KeyboardInterrupt:
pass

httpd.server_close()

Réglez les paramètres, exécutez-la et faites pointer le moteur de rendu DLNA sur votre machine. Cela a fonctionné pour moi avec un WDTV comme moteur de rendu et un téléphone Android avec BubbleUPnP comme point de contrôle (vous pouvez saisir l'URL du flux lorsque vous ajoutez manuellement un nouvel élément à la liste de lecture). Mais cela devrait fonctionner avec tous les appareils compatibles DLNA.

4voto

mdonatas Points 833

NOTE : Cette solution fonctionne, mais un une solution plus récente et probablement meilleure a été proposé par Massimo.

Voici une réponse pour Ubuntu 14.04 (également testé et fonctionnant sur 15.04 ), par souci d'exhaustivité :

  1. installez tous les paquets nécessaires : sudo apt-get install rygel rygel-preferences rygel-gst-launch

  2. créer le fichier ~/.config/rygel.conf qui contient les éléments suivants :

    [GstLaunch]
    enabled=true
    title=@REALNAME@'s stream
    launch-items=myaudioflac;myaudiompeg
    
    myaudioflac-title=FLAC audio on @HOSTNAME@
    myaudioflac-mime=audio/flac
    myaudioflac-launch=pulsesrc device=upnp.monitor ! flacenc quality=8
    
    myaudiompeg-title=MPEG audio on @HOSTNAME@
    myaudiompeg-mime=audio/mpeg
    myaudiompeg-launch=pulsesrc device=upnp.monitor ! lamemp3enc target=quality quality=6
    
    [Playbin]
    enabled=true
    title=Audio/Video playback on @REALNAME@'s computer
    
    [general]
    interface=
    upnp-enabled=true
    
    [MediaExport]
    uris=
  3. Exécutez les commandes suivantes à partir de la ligne de commande (elles peuvent être placées dans un script si vous le souhaitez) :

    pactl load-module module-http-protocol-tcp
    pactl load-module module-rygel-media-server 
    rygel &
  4. Exécuter le paprefs et assurez-vous que les deux options DLNA sont activées (cochées) dans l'onglet "Network Server".

  5. Faites jouer de la musique sur votre ordinateur. Exécutez le pavucontrol et dans l'onglet "Playback", changez le périphérique de sortie en "DLNA/UPnP Streaming".

À ce stade, vous devriez être en mesure de lire les flux MPEG et FLAC à partir d'un client DLNA (restituteur / point de contrôle).

REMARQUE : il se peut que vous deviez redémarrer votre ordinateur (ou redémarrer l'impulsion) pour que les choses commencent à fonctionner.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X