海康rtsp抓包分析

海康h264 rtp/rtsp/rtcp包分析
1、DESCRIBE rtsp://192.168.0.186:554/mpeg4/ch01/main/av_stream RTSP/1.0
CSeq:0
Accept:application/sdp
User-Agent:NKPlayer-1.00.00.081112

说明:DESCRIBE:命令类型
rtsp://192.168.0.186:554/mpeg4/ch01/main/av_stream:被请求的流地址
RTSP/1.0:RTSP版本,固定1.0
CSeq:命令序列号,后面的命令递增,形成完整的视频请求命令链,如果不连续,表面命令乱序
Accept:接受的负载(body)格式,这里是sdp
User-Agent:用户代理,就是用户的播放方式,这里是用海康SDK请求流抓的包,用的是NKPlayer,作用不大
2、RTSP/1.0 401 Unauthorized
CSeq: 0
WWW-Authenticate: Digest realm="c056e3f5d007", nonce="17a6accbfba1e0534b5856e9c942bfd4", stale="FALSE"
WWW-Authenticate: Basic realm="c056e3f5d007"
Date:  Wed, Apr 06 2016 17:13:41 GMT

401:状态码
Unauthorized:对状态码的描述,这里是未鉴权的意思
CSeq:因为是回复包,所以cseq要和请求包一致
WWW-Authenticate:服务器提供的鉴权方式,这里是Digest(摘要算法)和Basic(base64)两种加密方式
Date:服务器当前时间
3、DESCRIBE rtsp://192.168.0.186:554/mpeg4/ch01/main/av_stream RTSP/1.0
CSeq:1
Accept:application/sdp
Authorization: Digest username="admin", realm="c056e3f5d007", nonce="17a6accbfba1e0534b5856e9c942bfd4", uri="rtsp://192.168.0.186:554/mpeg4/ch01/main/av_stream", response="2593e5f13edb6b31bbe9ef4f043a93dd"
User-Agent:NKPlayer-1.00.00.081112

这个包主要是鉴权
4、RTSP/1.0 200 OK
CSeq: 1
Content-Type: application/sdp
Content-Length: 584


v=0
o=- 1459962821590000 1459962821590000 IN IP4 192.168.0.186
s=Media Presentation
e=NONE
b=AS:5100
t=0 0
a=control:*
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:5000
a=recvonly
a=control:trackID=1
a=rtpmap:96 H264/90000
a=fmtp:96 profile-level-id=420029; packetization-mode=1; sprop-parameter-sets=Z00AH5pkAoAt/zUBAQFAAAD6AAAw1AE=,aO48gA==
m=audio 0 RTP/AVP 8
c=IN IP4 0.0.0.0
b=AS:50
a=recvonly
a=control:trackID=2
a=rtpmap:8 PCMA/8000
a=Media_header:MEDIAINFO=494D4B48010100000400010011710110401F000000FA000000000000000000000000000000000000;
a=appversion:1.0

鉴权成功,返回流的描述信息(在负载sdp中)
Content-Length:负载长度(字节)
以下是SDP中需要关心的地方
o= 主要是IN后面的,代表流拥有者的IP
t=0 0:时间范围,0代表实时,数字或ntp时间可以用来播放录像
m=video 0 RTP/AVP 96:m是流描述的起始,后面跟的都是该流的参数,直到下一个m=(另一个流)。
video:代表以下是视频流
0:发送端口,0是默认采用setup中的端口
RTP/AVP:数据传输方式,默认UDP,RTP/AVP/TCP是TCP方式
96:视频类型,文档中是动态类型,一般是H264
c=IN IP4 0.0.0.0:流的IP地址,没有的话就是默认(当前服务器的IP)
a=recvonly:只接收标志,一般都有
a=control:trackID=1:具体流的uri,这里是视频流的,在setup的时候需要配置该地址,没有rtsp://的时候,直接把control
的值加到请求流地址后面
a=rtpmap:96 H264/90000:视频流信息,96视频类型,H264/90000视频类型/采样率,时间戳的增加是以采样率的倒数为单位,
比如每秒25帧,则每两帧(不是两RTP包)的时间戳间隔是:(1/25)*90000=3600(无单位)
a=fmtp:96 profile-level-id=420029; packetization-mode=1; sprop-parameter-sets=Z00AH5pkAoAt/zUBAQFAAAD6AAAw1AE=,aO48gA==
这个比较麻烦,里面是视频宽高信息,但是经过哥伦布算法计算,又经过BASE64编码:【引述】使用RTP传输H264的时候,需要
用到sdp协议描述,其中有两项:Sequence Parameter Sets (SPS) 和Picture Parameter Set (PPS)需要用到,那么这两项从哪
里获取呢?答案是从H264码流中获取.在H264码流中,都是以"0x00 0x00 0x01"或者"0x00 0x00 0x00 0x01"为开始码的,找到开
始码之后,使用开始码之后的第一个字节的低5位判断是否为7(sps)或者8(pps), 及data[4] & 0x1f == 7 || data[4] & 0x1f
 == 8.然后对获取的nal去掉开始码之后进行base64编码,得到的信息就可以用于sdp.sps和pps需要用逗号分隔开来。
m=audio 0 RTP/AVP 8:这里开始是音频流的描述
a=Media_header:这是海康解码器需要的解码头内容的16进制值
5、SETUP rtsp://192.168.0.186:554/mpeg4/ch01/main/av_stream/trackID=1 RTSP/1.0
CSeq:2
Authorization: Digest username="admin", realm="c056e3f5d007", nonce="17a6accbfba1e0534b5856e9c942bfd4", uri="rtsp://192.168.0.186:554/mpeg4/ch01/main/av_stream", response="090de5bf265f6b46ef75ba1edf0ec843"
Transport:RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=0
User-Agent:NKPlayer-1.00.00.081112

setup是客户端发起的配置,服务器做适配。
setup后面的uri:代表要配置的流uri(从上一个指令中获取的)
Transport:该字段只能用于setup。第一部分是传输类型,RTP代表是RTP协议,后面没有TCP则是默认的UDP传输,第二部分是组播or多播or广播,第三部分在TCP时起作用,UDP时不需要。
当采用UDP传输时,没有interleaved参数(不起作用),而是用client-port:8000-80001,是客户端接收UDP包的端口范围
interleaved:TCP时,RTP和RTCP复用一个连接,所以用该参数区分,前一个值(0)是RTP包,后一个值(1)是RTCP包
每个RTP/RTCP包的前面都是一个4字节的rtp interleaved frame包,该包第一个字节固定“$"(dollar符),第二个字节是
interleaved值,第三四个字节代表后面的RTPorRTCP包的长度。
ssrc:校验码,不是很重要
6、RTSP/1.0 200 OK
CSeq: 2
Session:        655067628;timeout=60
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=270b89ec;mode="play"
Date:  Wed, Apr 06 2016 17:13:41 GMT

session:很关键,以后所有的命令都要附加该值
timeout:客户端超时时间,单位秒
ssrc:服务器返回的校验码
mode:可以是play,record,默认是play
Transport:如果是UDP,这里会回复server-port:35555-35556,代表流发送端口
7、SETUP rtsp://192.168.0.186:554/mpeg4/ch01/main/av_stream/trackID=2 RTSP/1.0
CSeq:3
Authorization: Digest username="admin", realm="c056e3f5d007", nonce="17a6accbfba1e0534b5856e9c942bfd4", uri="rtsp://192.168.0.186:554/mpeg4/ch01/main/av_stream", response="090de5bf265f6b46ef75ba1edf0ec843"
Session:655067628;timeout=60
Transport:RTP/AVP/TCP;unicast;interleaved=2-3;ssrc=0
User-Agent:NKPlayer-1.00.00.081112
8、RTSP/1.0 200 OK
CSeq: 3
Session:        655067628;timeout=60
Transport: RTP/AVP/TCP;unicast;interleaved=2-3;ssrc=4d4ecc5d;mode="play"
Date:  Wed, Apr 06 2016 17:13:41 GMT



和5.6中一样,这里是配置的另一个流(音频流)
9、PLAY rtsp://192.168.0.186:554/mpeg4/ch01/main/av_stream RTSP/1.0
CSeq:4
Authorization: Digest username="admin", realm="c056e3f5d007", nonce="17a6accbfba1e0534b5856e9c942bfd4", uri="rtsp://192.168.0.186:554/mpeg4/ch01/main/av_stream", response="f36c8321dc8a9b379e92e68cdf33774e"
Session:655067628;timeout=60
Range:npt=0.000000-0.000000
User-Agent:NKPlayer-1.00.00.081112


play后面的uri和DESCRIBE中的一样,是流的uri,而5,6,7,8中的是对流的子通道的设置
Range:是视频播放时间,这里采用npt时间格式,实时视频都是0,录像回放是录像的时间
10、RTSP/1.0 200 OK
CSeq: 4
Session:        655067628
RTP-Info: url=trackID=1;seq=18990,url=trackID=2;seq=1788
Date:  Wed, Apr 06 2016 17:13:41 GMT

RTP-Info:是服务器对子通道的描述,seq是基础包序号,从收到的第一包数据开始累加1,有时候这里会带基础时间戳,根据采样率
信息判断收到的帧的时间戳
<think>好的,我现在需要回答用户的问题:如何检测网络摄像头是否支持RTSP协议。首先,我得回忆一下RTSP协议的基本知识,以及相关的检测方法。根据用户提供的引用内容,RTSP常用于实时流媒体传输,比如视频监控,像海康、大华的摄像头都有特定的RTSP地址格式。用户想知道如何检测他们的摄像头是否支持这个协议。 首先,我应该考虑用户可能采取的具体步骤。常见的检测方法包括查阅设备文档、检查管理界面、使用RTSP URL测试、抓包分析以及使用工具如ffmpeg或VLC。这些都是比较直接的方法。比如,用户提到的引用[2]和[3]中给出了RTSP地址的示例,说明不同品牌的摄像头可能有不同的URL结构,所以检查厂商的文档很重要。 然后,需要详细说明每个步骤。比如,在设备管理界面中,用户可能需要登录到摄像头的Web管理页面,寻找RTSP相关的设置或开启选项。引用[4]提到海康摄像头可能需要通过ffmpeg转流,这可能意味着某些情况下直接取流会有问题,但检测支持性可能还是可以通过尝试URL来实现。 另外,使用VLC或ffmpeg测试RTSP流是一个实际的方法。比如,用户可以用VLC打开网络流,输入RTSP地址,如果成功播放,就说明支持。引用[3]提到预览可以使用RTSP协议取流,所以这个测试是可行的。同时,引用[2]给出了具体的RTSP地址格式,用户可以根据这个格式替换自己的摄像头信息进行测试。 还需要考虑网络配置,比如摄像头IP、端口是否正确,防火墙是否开放了554端口,因为RTSP默认使用这个端口。引用[2]中的URL包含了端口号554,这也是需要注意的地方。如果端口被阻挡,即使摄像头支持RTSP也无法连接。 此外,抓包工具如Wireshark可以帮助检测是否有RTSP协议的通信。如果用户发送RTSP请求后,摄像头有响应,说明支持。但这种方法可能对普通用户来说有点复杂,所以作为备选方案。 总结下来,我需要将这些步骤分点列出,结构清晰,并引用相关的引用内容来支持说明。同时,用户可能需要生成相关问题,比如如何构造RTSP地址,或者处理无法连接的情况,这些可以作为相关问题放在最后。 最后,确保回答符合系统级指令,比如使用正确的中文,LaTeX格式(虽然这里可能用不到数学公式,但需要检查),以及引用标识的正确添加。比如在提到RTSP应用时引用[^1],提到海康RTSP地址时引用[^2],测试方法引用[^3]和[^4]。</think>### 检测网络摄像头是否支持 RTSP 协议的步骤 #### 1. **查阅设备文档或厂商资料** - 通过摄像头型号在官网或说明书中查找“RTSP协议支持”“流媒体协议”等关键词,明确设备是否支持RTSP[^1]。 - **示例**:海康摄像头型号如DS-2CD2143G0-I,其RTSP地址格式为: $$rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0$$ #### 2. **登录摄像头管理界面** - 访问摄像头Web管理页面(通过浏览器输入摄像头IP),检查配置项是否有“RTSP开关”“流媒体服务”或“RTSP端口设置”(默认端口554)[^3]。 #### 3. **使用标准RTSP URL测试** - 根据厂商提供的地址格式构造RTSP链接,替换实际参数(IP、用户名、密码、通道号等)。 **通用格式**: $$rtsp://username:password@ip:port/path$$ - **工具测试**: - **VLC播放器**:打开“媒体”→“打开网络串流”→输入RTSP地址→ 成功播放则表示支持。 - **ffmpeg命令**: ```bash ffmpeg -i rtsp://admin:admin@192.168.1.66:554/stream ``` 若返回流信息而非“协议不支持”,则验证成功。 #### 4. **网络抓包分析** - 使用Wireshark捕获摄像头流量,发送RTSP请求(如`OPTIONS`命令),观察是否返回`RTSP/1.0 200 OK`响应[^1]。 #### 5. **常见问题排查** - **端口连通性**:使用`telnet ip 554`检查端口是否开放。 - **权限问题**:确保用户名密码正确,且账户有RTSP访问权限。 - **编码格式兼容性**:部分摄像头需特定编码(如H.264),需在管理界面确认。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值