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 ?

3voto

michael23 Points 698

Le script Python d'Adam est juste ce dont j'avais besoin. Brillant. Rygel avec gst-launch ne fonctionne pas avec un de mes moteurs de rendu, mais ce script fonctionne avec les deux. Dans mon cas, je prends un flux audio en entrée de squeezelite (pour squeezebox) et l'envoie à un moteur de rendu. Le script fonctionne également dans sa forme originale pour prendre l'entrée d'un moniteur pulseaudio si c'est ce qui est nécessaire.

Sachant peu de choses sur tout cela, j'ai réussi à faire quelques ajouts au script qui :

i) permettre son exécution à partir d'un Shell Shell et être terminé par un SIGTERM/SIGKILL (l'instruction 'except' inclut maintenant 'systemexit')

ii) permet au script d'être arrêté et redémarré et de réutiliser le même port (comme c'était le cas, le script redémarré avait tendance à échouer en disant qu'il ne pouvait pas ouvrir le port si le moteur de rendu l'avait toujours ouvert) - (la déclaration allow_reuse_address = True)

iii) faire une version qui prend l'entrée de stdin et la rééchantillonne en utilisant sox pour la sortir au format wav (sur le port 8082)

Donc ma version ressemble à ça :

#!/usr/bin/python

import BaseHTTPServer
import SocketServer
import subprocess

PORT = 8082

MIMETYPE = 'audio/x-wav'
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('sox -t raw -r 96000 -b 24 -L -e signed -c 2 - -t wav -r 44100 -b 16 -L -e signed -c 2 - ', 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'

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

print "listening on port", PORT

try:
 httpd.serve_forever()

except (KeyboardInterrupt, SystemExit):
 pass

httpd.server_close()

1voto

ElectricSid Points 3

Je ne sais pas si cela vous sera utile, mais j'ai écrit un article sur la façon de faire fonctionner cette fonction sous Ubuntu 12.10 :

http://dpc.ucore.info/blog/2012/11/07/dlna-streaming-in-ubuntu-12-dot-10/

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