为 iOS VideoToolbox 的不完整 H264 流合成 SPS 和 PPS
Synthesize SPS and PPS for incomplete H264 stream for iOS VideoToolbox
我有一台 AXIS IP 摄像机 (M1054),它通过 RTSP 发送 H264/RTP 流。
不幸的是,他们根本不发送 SPS 和 PPS NALU,他们只传输(碎片化的)Codec 切片。
我正在尝试使用 iOS VideoToolbox
框架解码该流,该框架需要 H264 SPS 和 PPS 元组才能正确设置 CMFormatDescription
.
我想知道如何通过查看实际的 H264 切片来合成必要的参数集?
更新:我捕获了一个示例会话,其中 mplayer
设法通过 Wireshark 显示流。捕获文件 is here,您可以看到整个 RTSP 设置以及几秒钟的 RTP。
RTP 由 3 组流组成。
- 媒体 RTP
- 用于控制连接的RTSP
- 用于发送方确认和时间戳的 RTCP。
虽然 SPS/PPS 通常在流内的带内并通过 RTP 传输 - 它不需要在那里(并且可能不应该在那里)。 SPS/PPS 作为设置过程 (RTSP) 的一部分进行传输。我通常推荐 运行 http://www.live555.com/ in the debugger to learn about the details of the process - but http://www.live555.com/ 目前已下架。
在极少数情况下,您可以从众所周知的受限 H.264 流中重新创建 SPS/PPS。但一般情况下你不能。所以 SPS/PPS 是 H.264 流的元数据,没有冗余存储在其他任何地方。
因此,如果您熟悉设置过程 - RTSP - 将会非常明显。
我有一台 AXIS IP 摄像机 (M1054),它通过 RTSP 发送 H264/RTP 流。
不幸的是,他们根本不发送 SPS 和 PPS NALU,他们只传输(碎片化的)Codec 切片。
我正在尝试使用 iOS VideoToolbox
框架解码该流,该框架需要 H264 SPS 和 PPS 元组才能正确设置 CMFormatDescription
.
我想知道如何通过查看实际的 H264 切片来合成必要的参数集?
更新:我捕获了一个示例会话,其中 mplayer
设法通过 Wireshark 显示流。捕获文件 is here,您可以看到整个 RTSP 设置以及几秒钟的 RTP。
RTP 由 3 组流组成。
- 媒体 RTP
- 用于控制连接的RTSP
- 用于发送方确认和时间戳的 RTCP。
虽然 SPS/PPS 通常在流内的带内并通过 RTP 传输 - 它不需要在那里(并且可能不应该在那里)。 SPS/PPS 作为设置过程 (RTSP) 的一部分进行传输。我通常推荐 运行 http://www.live555.com/ in the debugger to learn about the details of the process - but http://www.live555.com/ 目前已下架。
在极少数情况下,您可以从众所周知的受限 H.264 流中重新创建 SPS/PPS。但一般情况下你不能。所以 SPS/PPS 是 H.264 流的元数据,没有冗余存储在其他任何地方。
因此,如果您熟悉设置过程 - RTSP - 将会非常明显。