我正在尝试构建(受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,但我不需要无损压缩,就我而言,有损更好。
我要遵循两个规则:
最佳答案
FFmpeg适用于Pipe协议(protocol),并且相同的功能已移植到ffmpy,因此可以将数据写入stdin并从stdout读取。您可能还必须提供一些时序结构来处理同步和适当的缓冲区管理,但我认为没有理由无法使其正常工作。
ffmpy:using the pipe
protocol
使用FFmpeg on a rasberry pi进行实时音频流
关于python - 快速压缩音频数据的方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39881122/