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