Входные данные: поток ogg / vorbis, поступающий от микросхемы кодировщика встроенной системы.
Проблема: создание выходных фрагментов за одну секунду без перекодирования.
Проблема: поток обрабатывается читайте "посередине", поэтому первая страница с BOS (Beginning of Stream) недоступна. Поскольку микросхема кодера всегда имеет одни и те же параметры, я бы хотел воссоздать страницу BOS, используя страницу BOS потока, который был прочитан с начала (эталонный поток).
Я пытаюсь использовать vcut . Я изменил его так, чтобы он создавал бесконечные куски за одну секунду. Это было легко, и это работает с файлами и потоками с BOS. Я также взломал его, чтобы записать в файл первые страницы ссылочного потока, а затем прочитать их, прежде чем читать рабочий поток без BOS. Таким образом, vs-> заголовки заполняются. Когда я обнаруживаю изменение серийного номера страницы, я изменяю его так, чтобы 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;
}
Однако, этот гигантский взлом c не работает. Как решить эту проблему?