rtsp连接断开_海康RTSP客户端连接分析
【C3-DESCRIBE】
Request: DESCRIBE rtsp://192.168.1.145:554/MPEG-4/ch2/main/av_stream RTSP/1.0\r\n
CSeq: 4\r\n
Authorization: Digest username="admin", realm="4419b727ab09", nonce="66bb9f0bf5ac93a909ac8e88877ae727", uri="rtsp://192.168.1.145:554/MPEG-4/ch2/main/av_stream", response="108084646408d21aa255664781c886fc"\r\n
User-Agent: LibVLC/2.1.3 (LIVE555 Streaming Media v2014.01.21)\r\n
Accept: application/sdp\r\n
\r\n
发送具有认证标识的信息到服务器,去获取服务器的资源列表。怎样的格式算正确认证的信息?这个关键在于response字段。[S2-REPLY]中反馈了两个信息realm="4419b727ab09", nonce="66bb9f0bf5ac93a909ac8e88877ae727",
**************************************response区域的计算规则如下***********************************
(1)当password为MD5编码,则
response = md5(::md5(:));
(2)当password为ANSI字符串,则
response = md5(md5(::)::md5(:));
***********************************************************************************************************
其中 password=密码,nonce=服务器返回的nonce,cmd=当前命令(DESCRIBE、SETUP等),realm=服务器返回的reaml,uri=请求的uri地址.当服务器接收到response为108084646408d21aa255664781c886fc的时候,服务器也会用这一套公式去计算,当发现计算出的值与客户端提供的值吻合的时候,则表明用户名和密码校验成功!
/*MD5加密函数*/ int md5_hash(const void *buff, size_t len, char *hexsum);
/*发送具有response认证的describe命令函数*/ void RtspRequest::SendRegisterRequest(string requestType) { string requestCmd; char cseq[256]; char session[256]; char author[500] = { 0 }; char acc[200] = { 0 }; char szInput[200] = { "" }; char szOutput[200] = { 0 }; char szMd5Pwd[200] = { 0 }; char szmd5methorduri[200] = { 0 }; m_CSeq++; if (m_SetupName.length()) { requestCmd = requestType; requestCmd += " "; requestCmd += m_RequestsMrl; requestCmd += "/"; requestCmd += m_SetupName; requestCmd += " RTSP/1.0"; m_SetupName = ""; } else { requestCmd = requestType; requestCmd += " "; requestCmd += m_RequestsMrl; requestCmd += " RTSP/1.0"; } //当password为ANSI字符串 response = md5(md5(::)::md5(:)); //md5(::)=md5(admin:4419b727ab09:12345)=fa47d934c754db5ebebd9b42a4412073 sprintf_s(szInput, 200, "%s:%s:%s", m_uername.c_str(), m_realm.c_str(), m_password.c_str()); md5_hash(szInput, strlen(szInput), szMd5Pwd); //md5(:)=md5(DESCRIBE:rtsp://192.168.1.145:554/MPEG-4/ch2/main/av_stream) =0b0a4e77e852876bdfdf6ecb72ba3900 sprintf_s(szInput, 200, "DESCRIBE:%s", m_RequestsMrl.c_str()); md5_hash(szInput, strlen(szInput), szmd5methorduri); //md5(md5(::)::md5(:)); //=md5(fa47d934c754db5ebebd9b42a4412073:66bb9f0bf5ac93a909ac8e88877ae727:0b0a4e77e852876bdfdf6ecb72ba3900) //=108084646408d21aa255664781c886fc //关于这一条,http://www.3464.com/Tools/MD5/index.asp 网站给出的结论则不一致:98f90a583e5c436f83da956c9b00767b //我的代码给出的值与VLC和其它工具给出的值完全匹配 sprintf_s(szInput, 200, "%s:%s:%s", szMd5Pwd, m_nonce.c_str(), szmd5methorduri); md5_hash(szInput, strlen(szInput), szOutput); m_response = szOutput; _snprintf(cseq, 256, "CSeq: %u", m_CSeq); _snprintf(author, 500, "Authorization: Digest username=\"%s\", realm=\"%s\", nonce=\"%s\", uri=\"%s\", response=\"%s\"", m_uername.c_str(), m_realm.c_str(), m_nonce.c_str(), m_RequestsMrl.c_str(), m_response.c_str()); _snprintf(acc, 500, "Accept: application/sdp"); if (requestType.compare("TEARDOWN") == 0) m_Session = 0; _snprintf(session, 256, "Session: %I64u", m_Session); Write(requestCmd.c_str()); Write(cseq); Write(author); Write("User-Agent: LibVLC/2.1.3 (LIVE555 Streaming Media v2014.01.21)"); Write(acc); if (m_Session > 0) Write(session); WriteFields(); Write(""); }
【S3-REPLY】
Response: RTSP/1.0 200 OK\r\n
CSeq: 4\r\n
Content-type: application/sdp
Content-Base: rtsp://192.168.1.145:554/MPEG-4/ch2/main/av_stream/\r\n
Content-length: 672
\r\n
Session Description Protocol
Session Description Protocol Version (v): 0
Owner/Creator, Session Id (o): - 1417089581269778 1417089581269778 IN IP4 192.168.1.145
Session Name (s): Media Presentation
E-mail Address (e): NONE
Bandwidth Information (b): AS:5100
Time Description, active time (t): 0 0
Session Attribute (a): control:rtsp://192.168.1.145:554/MPEG-4/ch2/main/av_stream/
Media Description, name and address (m): video 0 RTP/AVP 96
Bandwidth Information (b): AS:5000
Media Attribute (a): control:rtsp://192.168.1.145:554/MPEG-4/ch2/main/av_stream/trackID=1
Media Attribute (a): rtpmap:96 H264/90000
Media Attribute (a): fmtp:96 profile-level-id=420029; packetization-mode=1; sprop-parameter-sets=Z0KAH4iLUCgC3QgAADhAAAr8gCA=,aM44gA==
Media Description, name and address (m): audio 0 RTP/AVP 0
Bandwidth Information (b): AS:50
Media Attribute (a): control:rtsp://192.168.1.145:554/MPEG-4/ch2/main/av_stream/trackID=2
Media Attribute (a): rtpmap:0 PCMU/8000
Media Attribute (a): Media_header:MEDIAINFO=494D4B48010100000400010010710110401F000000FA000000000000000000000000000000000000;
Media Attribute (a): appversion:1.0
首先第一行给了OK,表明上一个命令成功--DESCRIBE成功得到服务器认证
其次,给出了服务器的媒体信息-具有两路码流--音频(audio)和视频(video) 并给出了请求两路数据的地址
rtsp连接断开_海康RTSP客户端连接分析相关推荐
- rtsp连接断开_live555学习之RTSP连接建立以及请求消息处理过程
live555 学习之 RTSP 连接建立以及请求消息处理过程 1 , RTSP 连接的建立过程 RTSPServer 类用于构建一个 RTSP 服务器,该类同时在 其内部定义了一个 RTSPClie ...
- 使用JavaCV实现海康rtsp转rtmp实现无插件web端直播(无需转码,低资源消耗)
使用JavaCV实现海康rtsp转rtmp实现无插件web端直播(无需转码,低资源消耗) 目录结构 添加依赖,编写配置文件 创建Bean 创建缓存Cache 修改启动类 拉流.推流.转封装 定时任务T ...
- RTSP/RTMP/GB28181协议/海康SDK/Ehome协议接入TSINGSEE青犀视频平台磁盘空间计算介绍
通常情况下,RTSP/RTMP/GB28181协议/海康SDK/Ehome协议接入TSINGSEE青犀视频平台录制的视频流都是存储在磁盘当中,我们之前讲过磁盘空间是否满足剩余的要求的方法,具体实现方式 ...
- 两个rtsp同时抓流_海康摄像头同时添加到两台海康硬盘录像机上
相信大家都有这种经历,我我为啥要多买两个摄像头呀,我直接一个摄像头添加到两台硬盘录像机上不香吗? 海康摄像头一般不建议同时添加到超过三台录像机,由于取流限制~ 那么如何同时添加到两台海康录像机上呢? ...
- rtsp连接断开_live555_RTSP连接建立以及请求消息处理过程
1,RTSP连接的建立过程RTSPServer类用于构建一个RTSP服务器,该类同时在其内部定义了一个RTSPClientSession类,用于处理单独的客户会话.首先创建RTSP服务器(具体实现类是 ...
- 海康RTSP流转RTMP并推送至Web端展示
最近帮着老师做项目的时候碰到一个难题,将海康摄像头的影像实时传输到前端页面进行展示.Google查了两天,终于有些眉目,记录一下经验. 大致需要经过以下几个步骤: 获取海康摄像头的视频流(基于RTSP ...
- 大华、海康rtsp视频流格式
一.海康威视热眼警戒摄像机DS-2TD1217-3/PA 型号 1号与2号摄像头(Camera 01.Camera 02) 方法一.只能读取1号摄像头 rtsp://admin:密码@192.168. ...
- rtsp连接断开_RTSP详解
关于 RTSP. RTSP协议是一个非常类似HTTP协议的流控制协议.它们都使用纯文本来发送信息,而且rtsp协议的语法也和HTTP类似.Rtsp一开始这样设计,也是为了能够兼容使用以前写的HTTP协 ...
- 用vlc插件在页面上播放海康rtsp推流监控
原文链接:https://blog.csdn.net/weixin_43948724/article/details/104422825 vlc插件目前只能在360.搜狗等可以开启兼容模式下的浏览器使 ...
- 道路交通安全违法行为图像取证技术规范_海康移动取证方案中的设备介绍
上节介绍了一下海康移动取证方案的大概组成,这节介绍一下方案中,数据采集所需的硬件设备. 移动取证系统方案拓扑 车载前端设备 车载智慧云台采集设备(两选一) 海康车载智慧云台采用1080P.30倍变倍的 ...
最新文章
- oracle的一知半解
- centos 7 网络配置( 网关、dns、ip地址配置)
- 【Linux】一步一步学Linux——dnsdomainname命令(174)
- php 机数,PHP实现自动刷数和“灌水”机
- Angularjs基础(三)
- Linux内核相关书籍
- Zigbee 学习计划——第1天——第一个程序
- Android音频框架笔记 - 上篇
- 20190914每日一句
- 解决Win11快捷键反应慢有延迟
- 浪潮nf5280m5默认ipmi_NF5180M5- IPMI设置
- 中高级iOS大厂面试宝典,拿到offer率80%,金三银四将是你的新起点
- codevs 1296
- 笔记本合上后再打开电源键常亮,无法唤醒,只能强制开机
- 软件测试:什么样的公司需要专职测试?
- HTML设置页面动画效果有几种,前端制作动画的几种方式(css3,js)
- 何华达回忆录:何华达经历的辛酸过去!
- 5java讲解(xy)
- oracle--游标
- iOS 指纹支付和面容支付
热门文章
- 斯坦福NLP名课带学详解 | CS224n 第7讲 - 梯度消失问题与RNN变种(NLP通关指南·完结)
- 创建线程的三种方法c语言,创建线程 - Python教程 - C语言网
- 学校计算机联想硬盘保护系统管理员密码,联想硬盘保护系统管理员密码是多少...
- 高拍仪Linux系统(银河麒麟/统信uos系统)二次开发
- SAP财务主要模块介绍
- FFmpeg mxf扩展hdr、bt2020
- Linux 2.6内核配置说明
- STM32F1开发指南笔记20----数码管驱动芯片TM1640解析
- STM8L152的LCD模块原理及驱动
- win10计算机删除用户密码,怎么删除win10电脑上的账户密码