如何设置实时音频流到 DLNA 兼容设备?

如何设置实时音频流到 DLNA 兼容设备?

有没有办法将声卡的实时输出从我们的 12.04.1 LTS amd64 桌面传输到我们网络中兼容 DLNA 的外部设备?使用 Rygel、miniDLNA 和 uShare 在共享目录中选择媒体内容始终没问题 - 但到目前为止,我们完全无法通过 DLNA 将实时音频流传输到客户端。

Pulseaudio 声称拥有一款 DLNA/UPnP 媒体服务器,与 Rygel 配合使用可以实现这一功能。但我们无法让它运行。

我们遵循了live.gnome.org这个答案在这里,还有另一个类似指南


12.04 LTS我们可以在 DLNA 客户端中选择本地音频设备或 GST-Launch 流,但 Rygel 显示以下消息,并且客户端指出它已到达播放列表的末尾:

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

无法在客户端上收听实时音频流。


仅在发行版升级到14.04 长期支持我们可以从设置中很好地选择 DLNA 渲染器上的直播以下答案概述。尽管如此,我们还是需要选择一个成熟的流我们启动了 rygel,但无法将新流推送到我们的 UPnP 设备。音频元数据未传输。


还有其他方法可以将我们声卡的音频作为实时流发送到 DLNA 客户端吗?

答案1

Pulseaudio-DLNA

我创建了一个小型服务器,它可以发现您网络中的所有 upnp 渲染器,并将它们添加为 pulseaudio 的接收器。因此,您可以通过 pavucontrol 控制每个应用程序在您的 upnp 设备上播放。

这正是我在 Linux 下处理 upnp 设备时一直想要的那种舒适感。

该应用程序可以从源代码或 DEB 包安装可从 git 下载,或者在我们添加了项目的官方ppa:qos/pulseaudio-dlna向我们的消息来源提供:

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

然后我们从命令行运行 pulseaudio-dlna,使用以下选项:

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

另请参阅pulseaudio-dlna“关于”了解更多信息。

当存在 DLNA 渲染器时,我们可以从声音菜单中选择它作为输出接收器:

在此处输入图片描述

答案2

Pavucontrol 是这个拼图中缺少的物品!我也正确设置了所有东西,外部设备(LG 电视)显示正在播放声音,但我没有听到任何声音。今天我安装了 pavucontrol,当我打开它时,我发现可以通过 DLNA 服务器传输声音的选项。只有当播放器向 pulseaudio 输出声音时,才会显示 DLNA 选项。 在此处输入图片描述

答案3

很抱歉我无法完全帮助您解决 Rygel 问题,但可能有其他方法可以满足您的需求。

其原理是获取一个程序将流录制到音频文件,然后使用指向该流所在目录的自定义配置启动 miniDLNA。

例如:假设我们在 ~/stream/ 中工作。创建 ~/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

然后将流保存到该目录中的音频文件。谷歌搜索“FFmpeg 录制声卡音频”会得到这个命令

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

但我运气不太好。另一个选择是 vlc,如果你有可用的 GUI,但它不起作用。

然后在另一个终端窗口中启动 miniDLNA:

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

应该找到 OutputStream.flac 然后可以从您的网络设备访问。

如果您还没有解决这个问题,希望这能给您提供一些想法。

答案4

注意:此解决方案有效,但更新且可能更好的解决方案由 Massimo 提出。

这是答案对于 Ubuntu 14.04(也经过测试并正在15.04),为了完整性:

  1. 安装任何需要的软件包: sudo apt-get install rygel rygel-preferences rygel-gst-launch

  2. ~/.config/rygel.conf创建包含以下内容的文件:

    [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. 从命令行执行以下命令(如果需要,可以将这些命令放入脚本中):

    pactl load-module module-http-protocol-tcp
    pactl load-module module-rygel-media-server 
    rygel &
    
  4. 运行该paprefs命令,并确保在“网络服务器”选项卡上启用(选中)两个 DLNA 选项。

  5. 在电脑上播放一些音频。运行pavucontrol程序,在“播放”选项卡上,将输出设备更改为“DLNA/UPnP 流媒体”。

此时,您应该能够从 DLNA 客户端(渲染器/控制点)播放 MPEG 和 FLAC 流。

注意:您可能需要重新启动计算机(或重新启动脉冲)才能开始工作。

相关内容