【问题标题】:How to stream semi-live audio over internet如何通过互联网流式传输半实时音频
【发布时间】:2023-03-31 06:07:01
【问题描述】:

我想写 Skype 之类的东西,即我在一台计算机上有一个恒定的音频流,然后重新压缩它以适合潜在互联网连接的格式,在另一端接收它并玩吧。

我们还假设互联网连接相当现代且快速,即 DSL 或类似的,没有通过电话等的慢速连接。所涉及的计算机也将是相当现代的(2GHz 或更高的双核 Intel CPU)。

我知道如何处理机器上的音频。我不知道如何以有效的方式传输音频。

挑战是:

  1. 我想获得良好的全线音频质量。

  2. 应该接收流而不丢包。然而,接收流可能会有一点延迟(第二个延迟是可以接受的)。我想传输软件可以首先确定平均(和最大)延迟,然后启动流并告诉接收器在开始播放音频之前等待最大延迟。这样一来,如果延迟没有变得更高,整个流将可以在另一端播放而不会卡顿或掉线。

  3. 如果由于意外的 IP 延迟或阻塞,流确实被切断,我希望能够注意到这一点,以便我可以采取措施(例如中止流)并最终开始新的传输。

如果我想使用现成的软件进行压缩和传输,我有哪些选择?我真的没有打算编写自己的音频压缩引擎。 OTOH,我打算在垂直市场上销售解决方案,这意味着我可以负担每份几美元的许可费,但不是 100 美元。

我想最简单的解决方案是只打开一个 TCP 流,来回发送一些数据包以确定它们的运行时间(或者甚至为此使用 UDP),然后使用结果作为我的最大延迟值的指南,然后简单地以原始形式(未压缩的 16 位立体声)触发音频数据,以及通过 TCP 连接的计时码。接收器读取数据并以预定延迟播放。这可能只适用于我期望的快速连接类型。

我只是想知道是否有更好的解决方案来实现这一目标,具有更好的性能(更低的延迟)和更少的数据(压缩)。

顺便说一句,我首先尝试在 OS X 上实现它,但如果成功的话,我可能也想在 Windows 上实现它。

【问题讨论】:

    标签: macos audio audio-streaming


    【解决方案1】:

    对于通过 Internet 传输音频,您可能应该考虑使用 RTP。它用于 SIP、H.323 和许多其他使用它来传输音频内容。您甚至可能只想看看使用 SIP 库。它已经拥有你想要的很多东西。 SIP 如果你有一个好的编解码器和足够的带宽,质量会非常好。

    【讨论】:

    • 谢谢,这应该让我开始更多地了解我的选择
    【解决方案2】:

    VLC支持各类音视频转码。可能是你想要check out的东西。

    【讨论】:

      【解决方案3】:

      我知道线程有点老了,但是,我想与您分享的一个见解是:由于您需要延迟,您不能使用 TCP 来执行您正在尝试执行的操作 - 您说过1 秒是可以接受的,我认为超过 1 秒是不行的。

      您使用 TCP 的延迟不是通过 PING 来确定的。 TCP的问题在于,当您连接并接受一定的延迟时,连接的任何问题都会缩小TCP窗口,所有接收到的数据都将被丢弃,底层协议将不得不处理它。此时,您将失去 1 秒的实时优势,流将被丢弃。

      TCP 适用于可以接受较大延迟(例如 10 秒或更长时间)的情况,这将允许您在重新建立连接之前始终有足够的数据来吃和播放。

      如果我和你一样,我会尝试以下方法:

      • UDP 传输
      • 一些低延迟编码 - 例如 AAC-LD,但 mp3 也可以
      • 在 UDP 上设置了一些数学开销,因此如果一个数据包丢失,音频流可以恢复。

      顺便说一句,mp3 的帧长为 40 毫秒。借助一些“魔法”,您可以掩盖一些丢帧。

      【讨论】:

        【解决方案4】:

        ShoutCAST + SAM 广播公司或 Winamp。会很容易做到这一点。

        【讨论】:

          【解决方案5】:

          如果您希望使用 icecast2 创建自己的互联网广播电台 你可以:

          • 在您的 VPS 上安装 icecast
          #sudo apt-get install icecast
          • 在你的 VPS 上也安装 ezstream
          #sudo apt-get install ezstream
          • 使用您的文件创建播放列表文件

          playlist.m3u(您可以阅读更多表格wikipedia

          #EXTM3U #EXTINF:123,示例艺术家 - 示例标题 示例.mp3 #EXTINF:321,示例艺术家 - 示例标题 例子.ogg
          • 创建一个 ezstream 配置文件 xml

          config.xml

          <ezstream>
              <url>http://localhost:8000/stream</url>
              <!--
                If a different user name than "source" should be used, set it in
                <sourceuser/>:
               -->
              <!-- <sourceuser>mr_stream</sourceuser> -->
              <sourcepassword>hackme</sourcepassword>
              <format>MP3</format>
              <filename>playlist.m3u</filename>
              <stream_once>1</stream_once>
              <svrinfoname>My Stream</svrinfoname>
              <svrinfourl>http://www.oddsock.org</svrinfourl>
              <svrinfogenre>RockNRoll</svrinfogenre>
              <svrinfodescription>This is a stream description</svrinfodescription>
              <svrinfobitrate>128</svrinfobitrate>
              <svrinfochannels>2</svrinfochannels>
              <svrinfosamplerate>44100</svrinfosamplerate>
              <svrinfopublic>0</svrinfopublic>
          </ezstream>
          

          或者你可以试试这个:nodejs application

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-12
            • 2020-11-01
            • 2012-11-20
            • 2012-04-03
            • 1970-01-01
            • 2012-04-25
            • 1970-01-01
            • 2014-01-03
            相关资源
            最近更新 更多