大华、海康和华为等NVR录像机gb28181平台倍速播放原理

最近做NVR倍速播放的web功能,大致了解了一下这些平台有关倍速播放的时候是如何发送视频数据的。
基本原理如下:
因为这些平台都不会牵扯到编解码,所以只能在编码后的数据进行处理,原始的编码数据来源于相机(大部分),所以对于安防,编码的源头在相机端,这是一个大致前提。

平台收到相机编码后的数据后,如果要进行倍速播放,那怎么发送数据呢?策略如下:
1、4倍以下,按照全帧率4倍码流发送数据,即1s发送100帧(假设25fps),注意这里对dts和pts不做任何修改。
2、4倍以上,只发送I帧数据。这里也不修改dits和pts.

我们收到数据后直接播放会出现什么问题呢?
1、如果我们收到的100fps,但是此时dts和pts却没有改变,播放器播放的时候会出现跳秒和花屏现象。为什么呢?
这是因为dts和pts没有修改,播放器还是按照正常dts和pts速率来解码播放,导致缓存长满,这时候播放器一般会丢包处理,丢包后刚好这一段数据中包含I帧,那么就会出现花屏现象。
2、如果按照只接受I帧来收数据,如果不修改dts和pts就会出现非常严重的卡顿,因为还是按照原来的dts和pts来解码播放。
所以这时候就必须修改dts和pts,同时将编码端的gop调整到25左右,不然,如果gop是50那么2s才会发一帧数据,假设8倍速率,也就是4帧每秒,这可不行,最好设置为gop25,那么8倍就是8帧,16倍就是16帧,凑合着可以看呢。

如果你要对接NVR28181平台的倍速播放功能,就是拉流后对dts和pts进行修改,因为只有P帧(假设相机编码没有B帧),dts=pts。

对于rtsp,如果让服务器发送倍速码流,增加scale头域就可以了。

Play in 2× Speed:
PLAY rtsp://10.17.133.46:554/ISAPI/streaming/tracks/101?starttime=20170313T230652Z&endtime=20170314T025706Z RTSP/1.0
CSeq:6
Authorization: Digest username="admin", 
realm="4419b66d2485", 
nonce="a0ecd9b1586ff9461f02f910035d0486", 
uri="rtsp://10.17.133.46:554/ISAPI/streaming/tracks/101?starttime=20170313T230652Z&endtime=20170314T025706Z", 
response="fb986d385a7d839052ec4f0b2b70c631"
Session:2049381566;timeout=60
Scale:2.000
User-Agent:NKPlayer-1.00.00.081112

RTSP/1.0 200 OK
CSeq: 6
Session: 2049381566
Scale: 2.000
RTP-Info: url=trackID=1;seq=1,url=trackID=2;seq=1
Date: Tue, Mar 14 2017 10:57:24 GMT

你可能感兴趣的:(音视频资料,vr,华为)