Тот факт, что вы буферизуете, не должен иметь никакого значения, если ваши выборки имеют правильную отметку времени. Если вы не отметили время (например, вызовите SetTime с NULL, как в
pSample->SetTime(NULL, NULL);
образцы будут предоставлены средствами визуализации как можно быстрее. Если вы установите метки времени, средства визуализации будут отображать кадр соответствующим образом (относительно текущего времени потока). Возможно, ваша буферизация вызывает опоздание образцов? В любом случае, установка меток времени в NULL - хороший способ проверить, все ли носители получены и находятся ли они в порядке.
Итак, чтобы ответить на ваш вопрос, да, вам нужно установить временные метки на образцах: в режиме реального времени вы не можете удалить временные метки. Дрожание в сети приведет к тому, что время поступления образцов будет отличаться, и отметки времени должны быть установлены правильно, если вы хотите просматривать поток (ы) правильно. Вам не нужно ждать какое-то время, прежде чем передавать сэмплы в FillBuffer, если установлена метка времени, средство визуализации позаботится о правильном воспроизведении сэмплов.
Мой подход, который работал довольно хорошо, заключается в следующем:
В исходном фильтре RTSP выполните требуемую буферизацию. Затем, после заполнения буфера, рассчитайте смещение, которое будет использоваться для каждого образца.
Необходимо учитывать временную метку RTP первого полученного синхронизированного с RTCP сэмпла (ts_0) и DirectShow StreamTime (st_0) в тот момент времени, когда вы начинаете воспроизведение сэмплов. К тому времени, когда вы начнете передавать выборки по конвейеру, время потока, скорее всего, больше не будет равно нулю ....
Временная метка DirectShow ts_new для каждого семпла будет затем рассчитана как
ts_new_x = ts_x - ts_0 + st_0 + 50ms
Эти 50 мс полезны, чтобы установить временную отметку образца в будущем. Причина этого заключается в том, чтобы избежать опоздания образцов, поступающих к рендереру.
Время окончания сэмпла может быть установлено как ts_new_x + 1. IIRC в любом случае это игнорируется, но не указывайте меня на этом.
Я бы порекомендовал прочитать все разделы в http://msdn.microsoft.com/en-us/library/windows/desktop/dd407202(v=vs.85).aspx пару раз, если вы этого еще не сделали. Я обнаружил, что это очень полезно во время реализации.
Кроме того, не стесняйтесь взглянуть на версию исходного кода фильтра RTSP с открытым исходным кодом Я написал. Его главная цель состояла в том, чтобы осветить некоторые аспекты написания живого исходного фильтра RTSP DirectShow и поддерживает PCM, AMR и MP3. Я добавил небольшую поддержку H.264, но так и не смог завершить эту часть (IIRC смог воспроизвести видеопотоки live555).