我目前正在python中开发一个VOIP工具,作为客户端 - 服务器,如下所示:
CHUNK = 1024
p = pyaudio.PyAudio()
stream = p.open(format = pyaudio.paInt16,
channels = 1,
rate = 44100,
input = True,
frames_per_buffer = CHUNK)
while 1:
connection.sendVoice(stream.read(CHUNK))
我怎样才能将发送的数据压缩到备用连接,可能会提高速度......
答案 0 :(得分:3)
import time, sys,io
import pymedia.audio.sound as sound
import pymedia.audio.acodec as acodec
import pymedia.muxer as muxer
def voiceRecorder( secs, name ):
f = open(name,'wb')
secs = secs*5
dm= muxer.Demuxer('mp3')
snds= sound.getODevices()
rt = 44100
cparams= { 'id': acodec.getCodecID( 'mp3' ),
'bitrate': 128000/4,
'sample_rate': rt,
'channels': 2 }
ac= acodec.Encoder( cparams )
snd= sound.Input( rt, 2, sound.AFMT_S16_LE )
snd.start()
start_time = time.time()
while snd.getPosition()<= secs:
s= snd.getData()
if s and len( s ):
for fr in ac.encode( s ):
f.write( fr)
else:
time.sleep(.25)
snd.stop()
if __name__ == "__main__":
if len( sys.argv )!= 3:
print 'Usage: voice_recorder <seconds> <file_name>'
else:
voiceRecorder( int( sys.argv[ 1 ] ), sys.argv[ 2 ] )
答案 1 :(得分:1)
哇我的计算是你发送了2KB多一点,确切地说是每个循环的2.0480KB音频到你的套接字连接:
(16 * 44.1 / 8) * 1024/44100 = 2.0480
如果您将块更改为chunk
,那么发送较少数据的一种简单方法是减少512
大小,现在您只发送1KB以上的数据。
另一种方法是在python中使用zlib
包在通过套接字发送后压缩stream.read
数据,但是不要忘记在另一端解压缩。