我在客户端使用Media Foundation通过RTSP服务器显示来自AXIS Camera的实时mpeg4流。
如果设置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-Frames的任何属性?
任何帮助都将受到高度赞赏....
更新(2012/02/22):
我运行了一些统计数据,发现有时I帧从未到达客户端,即假设GOV = 15,所以每15帧应该是I帧,但有时(不规则间隔)客户端收到I帧后28或30或59个P帧。
任何指针??
谢谢,
Prateek