在Python中压缩音频流数据,Java中解压缩

-1 投票
1 回答
1223 浏览
提问于 2025-04-18 04:24

我成功地通过TCP从运行在树莓派上的Python程序向一个安卓应用传输音频,现在我想使用压缩功能,但它只对字符串有效,对音频流的数据却不行(只能听到噪音)。以下是我的Python代码:

    while True:
      data = stream.read(CHUNKS)
      outData = StringIO()
      d = GzipFile( mode="w", fileobj = outData)
      d.write(data)
      d.close()
      conn.send((outData.getvalue()))

这是我的安卓代码:

    speaker = newAudioTrack(AudioManager.STREAM_VOICE_CALL,sampleRate,channelConfig,audioFormat,minBufSize,AudioTrack.MODE_STREAM);
    speaker.play();
    DataInputStream ds = new DataInputStream(connectionSocket.getInputStream());
    GZIPInputStream gzip = new GZIPInputStream(ds);
    while (true) {
    gzip.read(buffer, 0, buffer.length);
    speaker.write(buffer, 0, buffer.length);}

有没有人知道为什么这样不行?另外,还有没有其他方法可以实现我想要的效果?

1 个回答

0

这个问题可能和GZIP没有关系:

AudioTrack 只适用于未压缩的音频,具体可以参考这里:

它允许将PCM音频缓冲区流式传输到音频输出

你可以试试 MediaPlayer,比如:

MediaPlayer player = new MediaPlayer();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setDataSource("http://...");
player.prepare();
player.start();

不过这可能不是你需要的,因为你是想使用Socket

在这种情况下,你可以使用临时文件,具体可以参考这个帖子

或者使用本地HTTP服务器将InputStream流式传输到Android上的MediaPlayer

希望这些能帮到你,祝你好运 :)

撰写回答