我正在开发一个Silverlight应用程序,该应用程序实现了一个自定义MediaStreamSource,它为MediaElement提供了基本的H.264 NAL单元。我的流以关键帧开始,但我注意到平均需要大约20帧来渲染一个图像。我的H.264编码器的GOP大小设置为8。此视频来自安全摄像头,正在实时流应用程序中查看。
主要问题是,这会在现实生活中发生事件和实际渲染图像之间产生相当大的延迟。预计会有一个小的延迟,但事实证明,从接收第一帧到第一张图像的渲染时间约为3秒。理论上第一个关键帧不应该包含足够的信息来解码图像吗?为了测试我有一个示例Silverlight应用程序,它从文件加载捕获的H.264流并在内部缓冲整个文件,这样一旦MediaStreamSource打开,它立即消耗~20帧并使图像几乎没有延迟。
任何Microsoft / Silverlight / H.264专家都会详细说明为什么会发生这种情况?