【发布时间】:2013-01-23 17:09:54
【问题描述】:
我正在通过 RTP 从一个主流终端录制 H.264 单个 nalu 数据包流并播放它。
问题是,当我使用我正在开发的 RTP 模块将其播放并发送到终端时,视频会跳过并且我在帧之间出现模糊部分。我不知道它会发生什么或可能会发生什么。这是一些数据:
视频以 15 fps 的速度录制和播放 帧之间的 rtp 时间戳增量为 6000 (90000khz/15fps) rtp 数据包之间的时间间隔约为 66.66 mili secs (1000milis/15fps),如果不增加时间戳,则为 2 milis(对于图片参数集和其他与时间无关的数据包)。
所有这些数据都是用wireshark嗅探收集的。
所以,对我来说,流看起来很健康,但由于某种原因,播放效果很差。这是一个显示回放的视频链接。
也许观看视频的人可以认出这是怎么回事。
感谢您的帮助!
【问题讨论】:
-
您是否会丢失帧,即您是否检查过 RTP 序列号中没有间隙?如果您通过 UDP 发送,通常有助于增加操作系统的 UDP 套接字缓冲区大小 (SO_RCVBUF)。
-
@Ralf 感谢您的快速回答,丢包似乎不是问题,但我认为我在抖动缓冲区和时钟偏差方面遇到了问题。根据wireshark流分析:最大delta = 67.19 ms at packet no. 179 最大抖动 = 2981129.32 毫秒。平均抖动 = 90532.21 毫秒。最大偏差 = 47698223.33 毫秒。总 RTP 数据包 = 908(预期 908) 丢失的 RTP 数据包 = 0 (0.00%) 序列错误 = 0 持续时间 23.87 秒(961328 毫秒时钟漂移,对应于 3714017 Hz(+4026.69%)
-
@Ralf 好吧,我终于破解了。那里有两个问题。第一个终端在我录制时重置了 rtp 时间戳,这使我的计数器溢出并在播放时弄乱了我的时间戳。另一个与 Ralf 指出的有关,数据包没有被丢弃,但由于缓冲区错误,RTP 数据包被截断,因此 h.264 比特流信息丢失。现在视频正在顺利播放:D
-
我正在尝试做类似的事情。现在卡住了。你能一步一步地提供这个吗?这将非常有帮助。