Media Foundation: поток mpeg4 с камеры искажается, когда длина GOV больше 1 - PullRequest
1 голос
/ 21 февраля 2012

Я использую 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

...