垂直方向的 H.264 流显示损坏的视频

Vertically oriented H.264 stream shows corrupted video

我有一个垂直方向(走廊模式)的 IP 监控摄像头,并且已针对此方向配置了摄像头。当我在 SDP 响应中解码 SPS 时,它正确显示帧大小为 1080 的宽度和 1920 的高度。我的软件读取 RTSP/RTP 视频流,然后将其提供给 Microsoft H.264 MFT 解码器并显示它通过 DX9。我的软件适用于普通的水平视频输入,但当我尝试使用垂直相机时,显示已损坏。这是它的外观的屏幕截图。一种可能性是我需要旋转框架,但似乎已经完成相机设置并且 SPS 格式的框架尺寸似乎证实了这一点。另外,当我在摄像机的网络界面和 VLC 中查看视频时,它可以正确显示。有谁知道为什么会发生这种情况以及我该如何纠正?谢谢。

效果特定于视频的宽度,而不是确切的方向。帧缓冲区实际上可能比帧更大(更宽),并且您可能在处理的某个步骤中忽略了这一点。视频为 1080 像素宽,根据视频硬件的对齐要求,视频缓冲区可能是例如1152 或 1536 像素宽。您应该将考虑到这种对齐的数据逐行复制到较大缓冲区的左上角。

该问题没有代码或详细信息来猜测问题的确切位置。例如,这可能是将数据上传到纹理的步骤。 DirectX 9 和其他版本、DirectShow、Media Foundation - 所有以这种方式或其他方式支持扩展步幅概念的 API,因为这是视频内存中数据的典型布局要求(也适用于 SIMD 处理)。

仅供参考,讨论了一些具有类似效果的其他问题:

  • Broken output from libavcodec/swscale, depending on resolution