【问题标题】:Fast way to compress audio data?压缩音频数据的快速方法?
【发布时间】:2016-10-05 18:19:44
【问题描述】:

我正在尝试构建(受 teampeak 启发)一个通过 UDP 通信的 voip 程序。

这是我的来源(服务器):

import pyaudio
import socket

CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100

p = pyaudio.PyAudio()

stream = p.open(format=FORMAT,
                channels = CHANNELS,
                rate = RATE,
                output = True,
                frames_per_buffer = CHUNK,
                )

udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp.bind(("0.0.0.0", 4444))

while True:
    soundData, addr = udp.recvfrom(CHUNK * CHANNELS * 2)
    stream.write(soundData, CHUNK)
    print len(soundData)

udp.close()

客户:

import pyaudio
import socket


CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100

p = pyaudio.PyAudio()

stream = p.open(format = FORMAT,
                channels = CHANNELS,
                rate = RATE,
                input = True,
                frames_per_buffer = CHUNK,
                )

udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

while True:
    udp.sendto(stream.read(CHUNK), ("127.0.0.1", 4444))

udp.close()

它在 LAN 上运行良好,但在 WAN 中音频非常糟糕。

我认为原始音频不适合 voip,我正在寻找一种使用有损算法或编码器(mp3、AAC、ogg)压缩音频的方法

我尝试了 LZMA,但我不需要无损压缩,在我的情况下有损更好。

我有两条规则要遵守:

  1. 程序必须是跨平台的,所以我需要一种“跨平台”的方式来压缩/解压(在python里面)

  2. 音频质量应该不错(不低于原始音频的 50%)

【问题讨论】:

  • 您知道 WAN 上的音频是否因为带宽限制或压缩/解压缩速度而变差?如果是前者,加速后者可能无济于事。
  • 由于带宽限制,WAN 中的音频很糟糕(发送的字节数太大),我的音频尚未压缩,我需要通过压缩/编码减少字节数。
  • 因此加快压缩/解压缩的速度并不像在不牺牲太多质量的情况下尽可能地压缩它重要——在这种情况下,我建议您搜索支持 Python 接口的音频编码器(可以打包为两个独立的东西)。找到跨平台的东西将是最大的挑战,因为可能会涉及到基于 C 的扩展。
  • ffmpy 可能有用(FFmpeg 是处理音频的跨平台解决方案)。
  • ffmpy 对 osx 和 linux 有好处,但是我如何在不安装的情况下在 windows 中使用它呢?

标签: python audio encoding compression


【解决方案1】:

FFmpeg 适用于 Pipe 协议,并且相同的功能已移植到 ffmpy,因此可以将数据写入标准输入并从标准输出读取。您可能还必须提供一些计时结构来处理同步和适当的缓冲区管理,但我认为这没有理由不能工作。

ffmpy:using the pipe protocol

FFmpeg on a rasberry pi 的实时音频流

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2016-02-03
    • 2019-01-22
    • 2015-08-25
    • 2019-06-26
    • 2011-08-25
    • 1970-01-01
    相关资源
    最近更新 更多