垂直方向的 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 流显示损坏的视频的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 FMS 直播 H.264 视频

H.264码流分析

视频编解码·学习笔记6. H.264码流分析工程创建

确定 H.264 帧的持续时间

Firefox 31.1.0 无法播放某些 H.264 视频

[音视频] 音视频基础知识