垂直方向的 H.264 流显示损坏的视频
Posted
技术标签:
【中文标题】垂直方向的 H.264 流显示损坏的视频【英文标题】:Vertically oriented H.264 stream shows corrupted video 【发布时间】:2018-04-26 23:58:48 【问题描述】:我有一个垂直定向(走廊模式)的 IP 监控摄像头,并且该摄像头已针对该方向进行了配置。当我在 SDP 响应中解码 SPS 时,它正确显示帧大小为 1080 的宽度和 1920 的高度。我的软件读取 RTSP/RTP 视频流,然后将其馈送到 Microsoft H.264 MFT 解码器并通过DX9。我的软件适用于正常的水平视频输入,但当我尝试使用垂直相机时,显示已损坏。这是它的外观的屏幕截图。一种可能性是我需要旋转框架,但似乎已经完成了相机设置并且 SPS 格式的框架尺寸似乎证实了这一点。另外,当我在相机的网络界面和 VLC 中查看视频时,它会正确显示。有谁知道为什么会发生这种情况以及我该如何纠正?谢谢。
【问题讨论】:
【参考方案1】:效果特定于视频的宽度,而不是特定于方向。帧缓冲区可能实际上比帧更大(更宽),并且您应该在处理的某些步骤中忽略了这一点。视频的宽度为 1080 像素,根据视频硬件的对齐要求,视频缓冲区可能是例如1152 或 1536 像素宽。您应该将考虑到这种对齐的数据逐行复制到较大缓冲区的左上角。
该问题没有代码或细节来猜测问题究竟发生在哪里。例如,这可能是将数据上传到纹理的步骤。 DirectX 9 和其他版本、DirectShow、Media Foundation - 所有 API 都以这种或其他方式支持扩展步幅的概念,因为这是视频内存中数据的典型布局要求(也适用于 SIMD 处理)。
仅供参考,讨论了一些具有类似效果的其他问题:
Broken output from libavcodec/swscale, depending on resolution Dxsnap not displaying the video properly after first time open【讨论】:
我发现到目标表面的步幅不正确。还不知道为什么。感谢 Roman 引导我朝着正确的方向前进!以上是关于垂直方向的 H.264 流显示损坏的视频的主要内容,如果未能解决你的问题,请参考以下文章