相机的pts和dts跳跃问题

时间:2014-03-14 07:07:26

标签: video camera ffmpeg

我在我的代码中使用ffmpeg库来捕获来自摄像头的rtsp流并用flv编写。如果我只从一台摄像机捕获流,而摄像机只有视频流,那么没有任何错误,我得到了第一个包含pts和dts 1698557894的数据包和其他数据包' pts和dts慢慢增加。但如果相机有视频和音频流,那么就会发生奇怪的事情。例如,视频数据包pts和dts以1698557894开始并缓慢增加,音频从0开始然后缓慢增加,并且在~50个数据包跳转到值151004317并缓慢增加之后。另一种情况,当音频以0开始并缓慢增加时,视频从1785662594开始,并且~70个数据包跳转到234722并缓慢增加。这种行为不允许flv段muxer写入文件,它只返回一些EINVAL值。

此外,如果我尝试从两个摄像头捕获流,第一个摄像头只有视频而另一个摄像头有视频和音频,然后是第一个摄像头数据包' pts和dts都可以。但另一台相机的视频和音频pts / dts值非常不同。 av_read_frame返回视频数据包,其pts / dts值为1811924055,在flv muxer和音频4456027604中重新调整为557003451,重新调整为557003451,但这些值必须几乎相等!

所以,问题是: 0)为什么这些跳跃会在捕获开始时发生?它是相机的问题还是只是一些问题? 1)经过一段时间后会出现这样的跳跃吗?我应该怎么处理? 2)为什么相机的视频和音频具有如此不同的pts / dts值?

1 个答案:

答案 0 :(得分:0)

那里有很多事情要发生。坦率地说,我会把它写成错误实现的RTMP流。但是我可以提出一些可以帮助你前进的观点。第一个RTMP始终使用1kHz时钟,可以使用24或32位时间戳。所以时间戳溢出很常见,分别是4.6小时和49.7天。下一个RTMP可以指定时间增量,因此它可能会溢出24位,并且在它回绕到0(或者实际上是0 + delta)之前,接下来的几个帧将超过16777215。最后4456027604超过32位。所以ffmpeg在你获得它们之前对时间戳做了些什么,或者你的代码中有错误。祝你好运!