OkHttpHttp2音频流,我可以控制发送的字节吗



我正在尝试使用OkHttp发送音频流,下面是这里的示例,但问题是,如果我使用管道,我无法控制字节如何发送到服务器,这会导致音频中断,因为服务器对字节流很敏感。

通过监听端口,我发现使用Pipe发送了错误的区块大小预期:

4,626中,4.1255,4.1091,

现实:1460中,1460中,1460中,2109中,1460

有没有一种方法可以操作如何使用PipeBody发送数据?尝试在sink.write(data)之间添加Thread.sleepflush(),但没有看到任何更改。

您需要更频繁地刷新接受管道数据并在HTTP请求中发送数据的代码。

替换此:

@Override public void writeTo(BufferedSink sink) throws IOException {
sink.writeAll(pipe.source());
}

有了这个:

@Override public void writeTo(BufferedSink sink) throws IOException {
sink.writeAllFrequentFlush(pipe.source());
}

然后编写一个函数,对每个机会进行刷新。这个是从Okio writeAll函数派生而来的。

fun BufferedSink.writeAllFrequentFlush(source: Source): Long {
var totalBytesRead = 0L
while (true) {
val readCount: Long = source.read(buffer, 8192L)
if (readCount == -1L) break
totalBytesRead += readCount
emit()
}
return totalBytesRead
}

最新更新