【问题标题】:Python broadcast to shoutcast (DNAS) or icecastPython广播到shoutcast(DNAS)或icecast
【发布时间】:2018-04-17 16:16:18
【问题描述】:

我一直在寻找解决方案,但我完全陷入困境。 icecast/shoutcast 库似乎都是 Python 2.7,这是一个问题,因为我使用的是 3.6

关于从哪里开始广播和身份验证的任何想法都会非常有用。我正在寻找流式传输 mp3 文件。

TIA。

【问题讨论】:

  • 一定要SHOUTcast吗?如果您可以改用 Icecast,它只是一个 HTTP PUT 请求。 SHOUTcast 来源是非标准的。
  • @Brad icecast 也可以,但我还是不知道如何通过 PUT 请求进行流式传输。

标签: python python-3.x streaming audio-streaming shoutcast


【解决方案1】:

使用liquidsoap 生成您的音频流并将它们输出到shoutcast 和/或icecast2 服务器。我目前有 Liquidsoap、shoutcast、icecast2 和 apache2 都在同一个 Ubuntu 18.04 服务器上运行。 Liquidsoap 生成音频流并将其输出到shoutcast 和icecast2。听众可以使用他们的浏览器访问端口 8000 上的shoutcast 流或端口 8010 上的 icecast2 流。它可以 24 x 7 正常工作。

您可以拥有多个流,并且liquidsoap 具有许多功能,包括播放列表和基于时间(时钟)的操作。有关从 mp3 或其他格式的音频文件创建音频流的示例,请参阅liquidsoap 文档。最好的液体皂是免费的。

【讨论】:

    【解决方案2】:

    首先,您需要对音频流进行编码。您需要实时运行此流,并且它需要具有恒定的采样率。仅通过管道传输 MP3 文件是不够的……它们可能具有可能破坏流的 ID3 标签,并且它们可能具有不同的采样率。为互联网流媒体提供恒定比特率也是理想的(但这不是流工作所必需的)。

    最后,你基本上会得到一个大的、永无止境的 MP3 文件,它的创建速度与播放速度相同。

    接下来,您只需对 Icecast 服务器进行 HTTP PUT。看到这个问题:Is there any way to do HTTP PUT in python

    Icecast 通常使用basic auth

    如果您想让自己更轻松(尽管控制较少),请使用 FFmpeg:

    ffmpeg -re -i [some playlist] -f mp3 -method PUT http://example.com/some-stream
    

    example.com 是您的 Icecast 服务器)

    【讨论】:

    • 使用 ffmpeg 效果很好,因为我项目的其他部分也使用它。你能解释一下我将如何通过回调进行身份验证和调用 ffmpeg 吗?
    • 像这样使用 ffmpeg:ffmpeg -i "[file]" -f mp3 -method PUT http://[usr]:[pswd]@[host]:8000/stream.mp3 结果:av_interleaved_write_frame(): Unknown error Error writing trailer of http://[usr]:[pswd]@[host]:8000/stream.mp3: Error number -10053 occurredsize= 7kB time=00:00:00.50 bitrate= 107.4kbits/s speed=43.9x video:0kB audio:6kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 4.768518% Conversion failed! 有什么想法吗?
    • @MattCowley 啊,是的,你需要在输入之前-re。速度应该是 1 倍。 :-) 此外,转换总是会“失败”,因为它是流的结尾。如果您从永久来源阅读,则没有问题。而且,您的 auth in-URL 应该没问题。很遗憾,我不会编写 Python,因此无法帮助您处理 Python 回调。
    • 谢谢! ffmpeg 如何获取播放列表?我目前正在使用单个轨道循环 ffmpeg 调用,但这会导致流在轨道之间死亡,并且需要刷新客户端才能再次收听。
    • @MattCowley 检查输入 concat,但也许对于您的情况,您应该有单独的 FFmpeg 进程...一个将文件解码为 PCM,然后将 PCM 数据传输到您的编码过程中中。您还可以使用 VLC 之类的东西进行播放,使用 FFmpeg 进行输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多