我在客户端使用 Media Foundation 通过 RTSP 服务器显示来自 AXIS 摄像机的实时 mpeg4 流。
如果我设置 GOV @ camera = 1,客户端视频工作得很好,即相机只会发送 I 帧。但是如果 GOV 增加并且相机也开始发送 P 帧,我的视频会突然定期失真。我不能总是设置 GOV = 1,因为它会消耗大量带宽。
以下是我向媒体基金会提供样本的 RequestSample 方法的代码:
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 帧,但有时(不定期)客户端在 28 或 30 之后收到一个 I 帧或 59 个 P 帧。
任何指针??
谢谢,
普拉泰克