Audio 如何确定作品流的结尾?

Audio 如何确定作品流的结尾?,audio,voip,pcm,opus,Audio,Voip,Pcm,Opus,我正在写一个程序,它读取通过UDP传输的Opus数据包的非连续流——换句话说,我可能会得到30秒的音频,30分钟的空闲,然后是2分钟的音频 我已经能够使用来解码、保存和播放音频,但是我还没有找到一种方法来确定流是否完整。我曾看到有人提到一个标志,表明流是完整的(例如,Ogg页面有一个标志),但我对音频不够熟悉,无法确定我得到的是Ogg编码的,还是我应该更深入地研究实际的Opus数据包本身。这似乎也没什么帮助 值得一提的是,是程序在进行传输(我的接收代码是Python)。我认为Opus数据包本身是

我正在写一个程序,它读取通过UDP传输的Opus数据包的非连续流——换句话说,我可能会得到30秒的音频,30分钟的空闲,然后是2分钟的音频

我已经能够使用来解码、保存和播放音频,但是我还没有找到一种方法来确定流是否完整。我曾看到有人提到一个标志,表明流是完整的(例如,Ogg页面有一个标志),但我对音频不够熟悉,无法确定我得到的是Ogg编码的,还是我应该更深入地研究实际的Opus数据包本身。这似乎也没什么帮助


值得一提的是,是程序在进行传输(我的接收代码是Python)。

我认为Opus数据包本身是无状态音频,这些数据包的所有组织都将发生在它们的封装/容器中(Ogg、WebM等)。据我所知,Opus是一种不包含预定义持续时间的流媒体格式

通过读取“,”可以潜在地使用序列号来标识新“逻辑Ogg位流”的开始,并在遇到新序列号时确定位流的“结束”。“”(Ogg规范RFC 3533,其父Ogg Opus规范RFC 7845)

使用
opusenc
opusinfo
对Ogg Opus文件进行编码时,您将看到以序列号列出的位流:

$opusinfo audio-test.opus
正在处理文件“audiotest.opus”。。。
新逻辑流(#1,序列号:30b7344f):类型opus
...
作品流1:
...
逻辑流1结束

我想在这篇评论之前说一句话,我完全不适合这里,我在做有根据的猜测,而不是有根据的陈述。您提到数据包本身是无状态的,但似乎表明了另一种情况:“Opus是一个有状态的编解码器,具有重叠的块,因此Opus数据包不是彼此独立编码的。”您链接的页面是一个文件,但我指的是一个流。我错过什么了吗?序列号也包括在流中吗?哈,我有严重的诵读困难症,完全误解了这部分。序列号包含在Ogg比特流中,我不相信它们在Opus数据包中。我刚刚更新了答案以显示这一点。另外,有关权威答案,请参阅。他们总是非常积极和乐于助人。感谢您的及时回复(两次)。因为这不是一个真正的答案(尽管很有帮助),我已经投票支持您的回复,并将通过IRC与他们联系。不用担心,我不需要积分/积分。很乐意帮忙!当你发现它时,是否愿意发布,以便社区中的其他人也能受益?电子邮件列表也可以存档/搜索,因此电子邮件与IRC的对比可能会让其他人受益更多。