如何将运行在Linux Web服务器上的Pure Data中的音频流式传输到浏览器?

时间:2016-07-14 14:56:27

标签: ubuntu-14.04 audio-streaming ubuntu-server puredata

我正在开发一个项目,我有一个Pd扩展补丁(使用大量的外部设备,所以我在没有额外配置的Pd扩展中运行/补丁)运行交互式声音艺术装置。现在,作曲家/艺术家将在多用户互动网站上在线运行。我的想法是:

  1. 在网络服务器上运行Pd扩展补丁
  2. 让用户与补丁交互(通过websockets) (得到的工作 - 基于补丁的文本输出,这是有效的)
  3. 将补丁中的音频流传输到用户的浏览器
  4. 3号是我被困的地方。我无法将PureData中的音频转换为可以流式传输到Web浏览器的内容。我昨天使用[oggcast~]对象,它使用Icecast2(http://icecast.org),但它无法连接。我正在考虑将它发送到websocket或从node.js通过socket.io或某种WebRTC库,但我仍然需要从Pu​​reData中获取它。

    我找到了一个可能工作的解决方案 IF 我有一个声卡来传输音频。但是没有声卡,因为它只是一个Web服务器。

    它确实需要是服务器端,因为有很多音频文件使用,有些非常长。如果多个人可以互动并听到彼此的互动,那么这将是一个巨大的优势。所以不幸的是,WebPd和任何其他浏览器端PD到javascript解决方案都已淘汰。

    有什么想法吗?

2 个答案:

答案 0 :(得分:0)

好的,所以我有足够的时间来研究,测试和做事。这是我发现的:

libpd和python

Python是一种出色的服务器端语言,支持websockets和其他通信协议。它还使用libpd - 纯数据库/包装器,可用于许多编程语言,包括python。缺点是它最适用于pd香草物品。虽然我听说你可以添加外部支持,但这并不容易。我正在按照这条路走向解决方案...

WebPD

这不是服务器端解决方案,因此您无法获得社区/协作体验的好处,每个人都可以同时听到。

Javascript库,允许您加载puredata补丁并通过Web Audio API运行它。工作正常,但支持非常有限的对象!虽然我只能使用标准的pd vanilla对象来使这个补丁运行良好,但我仍然不能让这个补丁与webpd一起使用。

icecast streaming

这很好用,除了有很多延迟。 6-12秒!我们可以在下面的icecast.xml设置中将其减少到6s。其余的只能通过改变源代码和重新编译来减少mp3cast~pd外部,但是可能会出现缓冲/流媒体问题......如果有人想试试这个 - 请告诉我! :)

有一个名为mp3cast~

的纯数据对象(包含在pd扩展中)
  1. 安装这些软件包:

    pd-extended
    

    alsa声音驱动程序:

    alsa
    alsa-tools
    libasound2-dev
    

    流媒体和依赖项:

    curl
    libxml2
    libxslt
    lame
    icecast2    // This will also launch a setup program in your command line - it will ask you to enter three separate passwords - delete the default (make sure you delete ALL THE WAY to the beginning of the line) then enter your password, each time
    
  2. 加载alsa虚拟驱动程序

    在“/ etc / modules”(Ubuntu 14.04)中添加行:

    snd-dummy
    

    在Ubuntu命令行中输入:

    sudo modprobe snd-dummy            // loads dummy sound card into the kernel
    sudo adduser <yourusername> audio  // adds you to the audio group
    sudo init 6           // reboots ubuntu (any other method of restarting is fine)
    
  3. 配置icecast2 在/etc/icecast2/icecast.xml

    编辑文件

    编辑此项以将延迟减少6秒:     0     0 连接预缓冲器,以便在启动流时不会出现任何问题。这很好,但增加了额外的6s(默认情况下保留为65535)。

    使用您的主机名或IP地址以及将在浏览器中输入的端口(或连接到前端代码中)来编辑此位置:          111.111.111.111              8000     

    您还可以更改密码,显示位置和联系人,挂载点(默认情况下为/ stream)等。但以上只是需要完成的工作。然后按照mp3cast~help文件中的说明进行操作。

  4. 启动它: 启动icecast2服务器:     sudo /etc/init.d/icecast2 start 启动pd补丁:     sudo pd-extended -nogui -noadc -rt -alsa /path/to/patch/pdPatch.pd& amp;

    国旗:   -nogui需要!这将它设置为NO GUI,因为服务器上没有   -noadc因为我们没有收到音频,所以就是不要使用它   -rt给它实时优先级   -alsa force alsa声卡 - 可能没有必要,但是很好的做法 &安培; - 允许您在pd-extended继续运行时继续使用命令行

答案 1 :(得分:0)

我建议遵循以下技巧:

1。使用modprobe snd-aloop

生成虚拟alsa设备
$ sudo modprobe snd-aloop
$ # (assuming you already have two soundcards: hw:0 and hw:1)

2。准备循环设备(可选)

$ aplay -D hw:2,0,0 Testsong.wav

这会将循环设备切换到某些设置,如Signed 16 bit Little Endian, Rate: 44100 Hz, stereo。这有助于pd不使用我们的费率。

3。让pd在循环设备上播放

现在让pd输出到hw2。

4。使用ffserver从循环设备流式传输

第二步是使用ffserver(或任何其他流媒体服务器)并指示它使用alsa设备hw:2,1,0