Я использую Media Foundation на стороне клиента для отображения живого потока mpeg4 с камеры AXIS через сервер RTSP.
Клиентское видео работает очень хорошо, если я установил GOV @ camera = 1, то есть камера будет отправлять только I-кадры. Но если GOV увеличивается, и камера начинает отправлять P-кадры, мое видео внезапно искажается через равные промежутки времени. Я не могу установить GOV = 1 для всегда, потому что он потребляет много пропускной способности.
Ниже приведен код метода RequestSample, в котором я предоставляю образцы для Media Foundation:
RTPFrame frame = null;
byte[] frameBytes = null;
frame = _VideoJitter.GetNextFrame();
frameBytes = frame.GetFrameAsBytes();
frame.FrameType= RTPFrame.PredictFrameType(frameBytes);
_videoEncapsulatedSample.ReadSampleFrom(frameBytes);
videoSample = _videoEncapsulatedSample.MfSample;
long timestamp = nextSampleTimestamp ?? 0;
videoSample.SetSampleTime(timestamp);
duration_video = (long)GetPresentationTime(frame);
videoSample.SetSampleDuration(duration_video);
nextSampleTimestamp = timestamp + duration_video;
if (frame.FrameType == FrameType.IFrame)
{
videoSample.SetUINT32(MFAttributesClsid.MFSampleExtension_CleanPoint, 1);
}
return videoSample;
Мне нужно установить какой-либо атрибут для обработки P-кадров ??
Любая помощь будет принята с благодарностью ....
Обновление (2012/02/22):
Я запустил некоторую статистику и обнаружил, что иногда I-кадры никогда не доходят до клиента, т.е. предположим, что GOV = 15, поэтому каждый 15-й кадр должен быть I-кадром, но иногда (с нерегулярными интервалами) клиент получает I-кадр после 28, 30 или 59 P-кадров.
Любые указатели ??
Спасибо
Prateek