嗨,我正在从Android设备上读取原始音频,我想使用Okio将其写入一个文件中,如下所示:
BufferedSink sink = Okio.buffer(Okio.sink(file));我有一个回调来检索音频数据,然后将音频数据写入bufferedSink
@Override
public void onAudioData(byte[] data) {
sink.write(data);
}但是有时,当我听音频文件时,最后的帧丢失了,所有文件的长度都是8182字节或倍数。
如果我使用FileOutputStream,一切都很好,但这是第一种方法,我未来的目的是使用Okio管道和OkHttp来流音频。有人知道为什么会这样吗?
发布于 2018-07-02 10:04:31
您的代码并没有显示sink的全部用法,但似乎在完成它之后,您并没有关闭它。因此,只有那些已满的内部段( 8192字节长,所以文件大小应该是这个数字的倍数)才会写入磁盘,而最后一个没有写入磁盘。作为一种解决方案,您应该close()您的Sink。
https://stackoverflow.com/questions/51101248
复制相似问题