Javascript 分割Ogg Opus文件流

Javascript 分割Ogg Opus文件流,javascript,audio,google-speech-api,ogg,opus,Javascript,Audio,Google Speech Api,Ogg,Opus,我正在尝试发送一个OGG_OPUS编码流到谷歌的语音到文本流服务。 由于谷歌对他们的流请求有一个时间限制,我必须以固定的时间间隔将音频流路由到另一个谷歌语音到文本流会话 从我读到的内容来看,OGG流中的页面无法独立读取,因为页面中的数据是通过考虑上一页和下一页的数据来计算的。 如果是这样的话,我们是否可以在某一点切断流,并用剩余的数据重新创建一个全新的流? 在某个点停止并在新流中发送数据是不起作用的,因为初始OGG头数据包在第二个流中也不可用 我知道这个问题可以用PCM数据来解决,因为它没有编码

我正在尝试发送一个OGG_OPUS编码流到谷歌的语音到文本流服务。 由于谷歌对他们的流请求有一个时间限制,我必须以固定的时间间隔将音频流路由到另一个谷歌语音到文本流会话

从我读到的内容来看,OGG流中的页面无法独立读取,因为页面中的数据是通过考虑上一页和下一页的数据来计算的。 如果是这样的话,我们是否可以在某一点切断流,并用剩余的数据重新创建一个全新的流? 在某个点停止并在新流中发送数据是不起作用的,因为初始OGG头数据包在第二个流中也不可用

我知道这个问题可以用PCM数据来解决,因为它没有编码,一个PCM流可以简单地在任何一点分裂成一个新的流。由于高比特率,我不能使用PCM流,而且我不喜欢使用无损质量,因为我正在传输语音数据流

参考资料:

可以分割Opus音频文件

只要文件以流开头(BOS)标题和注释页开头,就可以独立读取Ogg页面。您可以通过创建新文件将一个Ogg文件拆分为多个文件,这些文件以Ogg头页开始,之后有Ogg数据/音频页。例如,此Ogg Opus文件:

*********************************************************
*          *              *              *              *
*  Header  *  Audio Data  *  Audio Data  *  Audio Data  *
*   Page   *    Page 1    *    Page 2    *    Page 3    *
*          *              *              *              *
*********************************************************
可以拆分为2个文件:

***************************
*          *              *
*  Header  *  Audio Data  *
*   Page   *    Page 1    *
*          *              *
***************************

******************************************
*          *              *              *
*  Header  *  Audio Data  *  Audio Data  *
*   Page   *    Page 2    *    Page 3    *
*          *              *              *
******************************************
关于可以分割并跨越多个页面的音频段,您是正确的。我假设,如果一个页面包含不完整的音频片段,可能会损失几毫秒,但这不应该破坏语音识别。不幸的是,我的本地测试使用了由
opusenc
util生成的Opus文件,它没有创建跨页面分割段的页面,这似乎是分割文件的好方法


显示如何查找页面边界。

您有任何测试代码或opus文件吗?请尝试下面的
OpusFileSplitter
。。。