Доброе время суток всем.
Стоит задача вещания по сети участка экрана. В качестве source фильтра — фильтр на базе PushSourceDesktop. Приложение должно сграбить в битмап картинку, сжать в MPEG и отправить по UDP в локальную сеть. Граф строится следующий:
PushSourceDesktop -> MPEG Encoder -> Multiplexer -> NetRenderer.
Проблемы:
1. Такой граф успешно доставляет информацию, смотрю в VLC плеере, все хорошо первые несколько секунд, потом начинается запаздывание показа. В конечном итоге присланное показывается спустя секунд 20 при времени жизни кадра в видео рендерере 1/5 сек.
2. Если нагрузить серверный камп, то на клиенте показывается только первый кадр, остальное отбрасывается (считается как drop frames)
3. Если из графа убрать мультиплексер, то теряются все кадры. Наблюдаю квадрат Малевича другими словами.
Полагаю, что проблема с TimeStamps, однако source фильтр делает засечки так, как это указывалось в сэмпле D9 SDK:
// Set the timestamps that will govern playback frame rate.
// If this file is getting written out as an AVI,
// then you'll also need to configure the AVI Mux filter to
// set the Average Time Per Frame for the AVI Header.
// The current time is the sample's start.
REFERENCE_TIME rtStart = m_iFrameNumber * (m_rtFrameLength);
REFERENCE_TIME rtStop = rtStart + m_rtFrameLength;
pSample->SetTime(&rtStart, &rtStop);
m_iFrameNumber++;
// Set TRUE on every sample for uncompressed frames
pSample->SetSyncPoint(TRUE);
Кто-нибудь сталкивался с такими проблемами? Буду благодарен за любые комментарии.