2012-03-22 3 views
-1

Можете ли вы сказать мне, что лучший способ реализации кругового буфера с постоянной задержкой времени между входом и выходом в c на linux. Я пишу в буфер в потоке и читаю его по другому. Мне нужно сохранить постоянную разницу во времени между чтением и записью, а поток записи имеет переменный битрейт. Теперь я добавляю timpestamps каждые несколько пакетов, чтобы синхронизировать их, и я получаю временные метки из другого потока, который использует clock_gettime каждые 1 мс.c круговой буфер с постоянной задержкой времени для mpeg-ts

+1

Непонятно, что вы здесь задаете. –

+0

Я спрашиваю, что является лучшим способом реализовать круговой буфер с постоянной задержкой времени между записью и чтением в c under linux – ostryck

+0

@ostryck Я рекомендую вам прочитать http://stackoverflow.com/questions/how-to-ask, а затем вернитесь и отредактируйте свой вопрос. – JustinDoesWork

ответ

1

Общий подход правильный, как вы предложили. Тем не менее, есть много вещей, которые необходимо позаботиться -

  1. Источник нить подчиняясь CBuf и тонуть нить удаления из CBuf.

  2. CBuf должен быть достаточно большим, чтобы данные не терялись.

  3. CBuf должен быть заблокирован обоими темами, чтобы не повредить.

  4. Данные CBuf должны быть указаны с отметкой времени. Эти метки времени должны быть достаточно точными, чтобы не вызвать дрожание передачи.

  5. Потолочная труба должна быть отложена, чтобы обеспечить ее отсутствие.

  6. Нить источника и стока должна выводить время только из общего источника времени, чтобы не было дрейфа между их соответствующей скоростью потока и оттока.

Возможно, если вы думаете о Передавая его в какой-то аппаратной системе снаружи, метка времени точность 1 мс, является довольно низким, поскольку соблюдение передачи MPEG нужно 500 нс. Однако, если вы используете аппаратный адаптер для передачи, тогда обычно он заботится об этом.

+0

спасибо за объяснение, это было именно то, что я искал – ostryck

Смежные вопросы