输入:来自嵌入式系统的编码器芯片的 ogg/vorbis 流。
问题:在没有转码的情况下创建一秒的输出块。
问题:正在“中间”读取流,因此带有 BOS(流开始)的第一页不可用。由于编码器芯片始终具有相同的参数,我想使用从一开始读取的流(参考流)的 BOS 页面重新创建 BOS 页面。
我正在尝试使用vcut。我对其进行了修改,以便它创建一秒钟的无限块。这很简单,并且可以使用 BOS 处理文件和流。我还破解了它,以便我将参考流的第一页写入文件,然后在读取没有 BOS 的生产流之前读取它们。这样,vs->headers 就被填充了。当我检测到页面序列号发生变化时,我会对其进行更改,以使 vcut 和 libogg 不会惊慌失措:
int process_page(vcut_state *s, ogg_page *page) {
...
else if(vs->serial != ogg_page_serialno(page))
{
// fprintf(stderr, _("Multiplexed bitstreams are not supported.\n"));
vs->stream_in.serialno = ogg_page_serialno(page);
vs->serial = ogg_page_serialno(page);
vs->granulepos = -1;
vs->initial_granpos = 0;
// ogg_stream_init(&vs->stream_in, vs->serial);
// vorbis_info_init(&vs->vi);
// vorbis_comment_init(&vs->vc);
s->vorbis_init = 1;
}
但是,这个巨大的 hack 不起作用。如何解决这个问题?