最近公司技服同事问这视频流中时间戳是个啥,有什么用,为啥要3600的递增,单位是什么,我整理了一遍打了好长一段话给他说明了,不想浪打字,后续有人在问也方便解释,故记录一下。
时间戳(pts): 视音频播放使用到。视频就是一张一张的图片的集合,播放视频就是把这些图片按时间间隔顺序显示出来,时间戳就是这个时间顺序,每一张图都有个时间戳,这个时间戳就会告诉播放器在什么时候把它显示到屏幕上,屏幕不断的切换显示的图片我们就看到视频了。根据人眼的记忆性,要想人看到动画视频不觉得卡顿,要求每秒钟至少刷新25次以上,也就是说每秒要有25张以上图片,他们的播放间隔不能大于1/25秒,也就是40毫秒。那时间戳就可以毫秒(ms)为单位,四十四十的递增,那ps流和rtp中的时间戳为什么是3600的递增呢,那是单位不同,那个单位与采样率有关。
采样率:假如让你记录一天的气温,你每隔一小时测量记录一次,这就是采样,一天采样24次,采样频率就是24次每天,换算为采样率就是把单位换为次每秒(也就是hz了),你的采样率就是24/(24*60*60) 次每秒(hz)。你的采样间隔就是1小时=3600秒。假如现在让你记录1秒钟的视频,采样90000次(采样率90000hz),然后分25段记录,也就是25张图,那么每张图的间隔就90000/25=3600个采样间隔。这就是3600的来由,他的单位是采样间隔,你的采样间隔就是1/90000秒,所以每张图的间隔时间是3600 * (1/90000) = 0.04秒=40毫秒。
h264编码的视频采样率规定就是90000hz,音频的时间戳也是这样,但音频采样率低得多,理应不会以3600递增,以G711采样率8000为例,如果一秒分25个音频包,时间戳应该是(40*1/8000)*1000 = 240递增,但是不管是国标过检还是对接海大宇平台或相机,音频包都是3600递增,后来一个同事查到,是历史原因,大概就都这样用了就将错就错的回事吧!