H264视频传输、编解码----RTSP认证

2023-11-19

 

Rtsp认证主要分为两种:

 

基本认证basic authentication)和摘要认证( digest authentication )。

 

基本认证是http 1.0提出的认证方案,其消息传输不经过加密转换因此存在严重的安全隐患。

摘要认证是http 1.1提出的基本认证的替代方案,其消息经过MD5哈希转换因此具有更高的安全性。下面主要介绍摘要认证:

 

1.基本认证 (basic 认证)

1.  客户端发送DESCRIBE请求到服务端,

  1. DESCRIBE  rtsp://192.168.1.55:554/11
    RTSP/1.0\r\n
    CSeq: 1\r\n
    Accept: application/sdp\r\n
    User-agent: Realplayer\r\n\r\n


2:RTSP服务端认为没有通过认证,发出WWW-Authenticate认证响应

RTSP/1.0 401 Unauthorized\r\n
CSeq: 1\r\n
WWW-Authenticate: Basic realm="RTSPD"\r\n\r\n

   此时客户端程序应该如果弹出密码认证窗口 ,提示用户名,输入认证信息,密码认证窗口从响应消息中进行判断,如果发现是Basic 认证,按如下方式处理

步骤3:客户端携带Authorization串再次发出DESCRIBE请求

 

DESCRIBE rtsp://192.168.1.55:554/live/1/video.sdp?token=A00453FR805a54C8
RTSP/1.0\r\n
CSeq: 2\r\n
Accept: application/sdp\r\n
User-Agent: RealMedia Player HelixDNAClient/12.0.1.647 (win32)\r\n
Authorization: Basic YWRtaW46YWRtaW4=\r\n\r\n

其中“YWRtaW46YWRtaW4=”是通过对 username:password 进行base64编码所得。

 

 

2. 摘要认证 Digest authentication

    

1.客户端发送DESCRIBE请求

 

DESCRIBE rtsp://192.168.123.158:554/11 RTSP/1.0
CSeq: 2
User-Agent: LibVLC/2.0.5(LIVE555 Streaming Media v2012.09.13)
Accept: application/sdp

 

服务器端返回401错误,提示未认证并以nonce质询:

 

RTSP/1.0 401 Unauthorized
Server: HiIpcam/V100R003 VodServer/1.0.0
Cseq: 2
WWW-Authenticate:Digest  realm="HipcamRealServer", nonce="3b27a446bfa49b0c48c3edb83139543d"

 

2.客户端以用户名,密码,nonce,HTTP方法,请求的URI等信息为基础产生response信息进行反馈

 

DESCRIBE rtsp://192.168.123.158:554/11 RTSP/1.0
CSeq: 3
Authorization: Digest username="admin",realm="Hipcam RealServer", nonce="3b27a446bfa49b0c48c3edb83139543d",uri="rtsp://192.168.123.158:554/11", response="258af9d739589e615f711838a0ff8c58"
User-Agent: LibVLC/2.0.5(LIVE555 Streaming Media v2016.06.13)
Accept: application/sdp

 

服务器对客户端反馈的response进行校验,通过则返回如下字段:

 

RTSP/1.0 200 OK
Server: HiIpcam/V100R003 VodServer/1.0.0
Cseq: 3
Content-Type: application/sdp
Cache-Control: must-revalidate
Content-length: 306
Content-Base: rtsp://192.168.123.158:554/11/
v=0
o=StreamingServer 3331435948 1116907222000 IN IP4192.168.123.158
s=\11
c=IN IP4 0.0.0.0
b=AS:1032
t=0 0
a=control:*
m=video 0 RTP/AVP 96
b=AS:1024
a=control:trackID=0
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;sprop-parameter-sets=Z0LgHtoCgPRA,aM4wpIA=
a=framesize:96 640-480

 

说明:

 

response计算方法如下:

 

RTSP客户端应该使用username + password并计算response如下:

(1)passwordMD5编码,

   response = md5( password:nonce:md5(public_method:url)  );

(2)passwordANSI字符串,

    response= md5md5(username:realm:password):nonce:md5(public_method:url) );

 

客户端在每次发起不同的请求方法时都需要计算response字段,同样在服务器端校验时也默认采取同样的计算方法。

3、带有认证信息的RTSP过程

    DESCRIBE rtsp://172.16.193.152:554/realtime?chnid=1;vid=0;aid=0;agent=cgi RTSP/1.0
        CSeq: 1
        Accept: application/sdp
        Session: 1495700359

        RTSP/1.0 401 Unauthorized
        CSeq: 1
        Thu, May 25 2017 08:21:29 GMT
        WWW-Authenticate: Digest realm="Keda Streaming Media", nonce="ecb2ddc1ddef1851c055af808ad9f0fb"

        DESCRIBE rtsp://172.16.193.152:554/realtime?chnid=1;vid=0;aid=0;agent=cgi RTSP/1.0
        CSeq: 2
        Accept: application/sdp
        Authorization: Digest username="admin", realm="Keda Streaming Media", nonce="ecb2ddc1ddef1851c055af808ad9f0fb", uri="rtsp://172.16.193.152:554/realtime?chnid=1;vid=0;aid=0;agent=cgi", response="92edf3ade54179369eb807ef371aff8f" //每次计算生成的response肯定不一样,这里为了省劲,都一样的

        RTSP/1.0 200 OK
        CSeq: 2
        Content-Type: application/sdp
        Content-Length: 325
        v=0
        o=NVR 1495700489 1495700489 IN IP4 0.0.0.0
        s=3GPP Unicast SDP
        c=IN IP4 0.0.0.0
        t=0 0
        a=range:npt=0-
        a=control:*
        m=video 0 RTP/AVP 96
        a=control:video_0
        a=rtpmap:96 H264/90000
        a=fmtp:96 profile-level-id=;sprop-parameter-sets=;packetization-mode=0
        m=audio 0 RTP/AVP 8
        a=control:audio_0
        a=rtpmap:8 PCMA/8000

        SETUP rtsp://172.16.193.152:554/realtime?chnid=1;vid=0;aid=0;agent=cgi/video_0 RTSP/1.0
        CSeq: 3
        Transport: RTP/AVP;unicast;destination=172.16.192.60;client_port=60000-60001
        Authorization: Digest username="admin", realm="Keda Streaming Media", nonce="ecb2ddc1ddef1851c055af808ad9f0fb", uri="rtsp://172.16.193.152:554/realtime?chnid=1;vid=0;aid=0;agent=cgi", response="92edf3ade54179369eb807ef371aff8f"

        RTSP/1.0 200 OK
        CSeq: 3
        Session: 1495700489 ;timeout=60
        Transport: RTP/AVP;unicast;mode=play;client_port=60000-60001;server_port=0-0
        Cache-Control: no-cache

        SETUP rtsp://172.16.193.152:554/realtime?chnid=1;vid=0;aid=0;agent=cgi/audio_0 RTSP/1.0
        CSeq: 4
        Session: 1495700489 ;timeout=60
        Transport: RTP/AVP;unicast;destination=172.16.192.60;client_port=60002-60003
        Authorization: Digest username="admin", realm="Keda Streaming Media", nonce="ecb2ddc1ddef1851c055af808ad9f0fb", uri="rtsp://172.16.193.152:554/realtime?chnid=1;vid=0;aid=0;agent=cgi", response="92edf3ade54179369eb807ef371aff8f"

        RTSP/1.0 200 OK
        CSeq: 4
        Session: 1495700489 ;timeout=60
        Transport: RTP/AVP;unicast;mode=play;client_port=60002-60003;server_port=0-0
        Cache-Control: no-cache

        PLAY rtsp://172.16.193.152:554/realtime?chnid=1;vid=0;aid=0;agent=cgi RTSP/1.0
        CSeq: 5
        Range: npt=0.000-
        Session: 1495700489 ;timeout=60
        Authorization: Digest username="admin", realm="Keda Streaming Media", nonce="ecb2ddc1ddef1851c055af808ad9f0fb", uri="rtsp://172.16.193.152:554/realtime?chnid=1;vid=0;aid=0;agent=cgi", response="92edf3ade54179369eb807ef371aff8f"

        RTSP/1.0 200 OK
        CSeq: 5
        Session: 1495700489
        RTP-Info: url=video/id=0;seq=0;rtptime=0,url=audio/id=0;seq=0;rtptime=0
        Range: npt=0.000-
        Date: Thu, May 25 2017 08:21:29 GMT

        GET_PARAMETER rtsp://172.16.193.152:554/realtime?chnid=1;vid=0;aid=0;agent=cgi RTSP/1.0
        CSeq: 6
        Content-Length: 0
        Content-Type: text/parameters
        Session: 1495700489
        TitleDisplay: OFF
        TitleAttrib: White, 0,0
        TitleChar:
        Authorization: Digest username="admin", realm="Keda Streaming Media", nonce="ecb2ddc1ddef1851c055af808ad9f0fb", uri="rtsp://172.16.193.152:554/realtime?chnid=1;vid=0;aid=0;agent=cgi", response="92edf3ade54179369eb807ef371aff8f"

        RTSP/1.0 200 OK
        CSeq: 6
        Session: 1495700489

        GET_PARAMETER rtsp://172.16.193.152:554/realtime?chnid=1;vid=0;aid=0;agent=cgi RTSP/1.0
        CSeq: 7
        Content-Length: 0
        Content-Type: text/parameters
        Session: 1495700489
        TitleDisplay: OFF
        TitleAttrib: White, 0,0
        TitleChar:
        Authorization: Digest username="admin", realm="Keda Streaming Media", nonce="ecb2ddc1ddef1851c055af808ad9f0fb", uri="rtsp://172.16.193.152:554/realtime?chnid=1;vid=0;aid=0;agent=cgi", response="92edf3ade54179369eb807ef371aff8f"

        RTSP/1.0 200 OK
        CSeq: 7
        Session: 1495700489

        TEARDOWN rtsp://172.16.193.152:554/realtime?chnid=1;vid=0;aid=0;agent=cgi RTSP/1.0
        CSeq: 8
        Session: 1495700489
        Authorization: Digest username="admin", realm="Keda Streaming Media", nonce="ecb2ddc1ddef1851c055af808ad9f0fb", uri="rtsp://172.16.193.152:554/realtime?chnid=1;vid=0;aid=0;agent=cgi", response="92edf3ade54179369eb807ef371aff8f"

        RTSP/1.0 200 OK
        CSeq: 8
        Session: 1495700489

 

sdp 的格式: 

v=<version>
o=<username> <session id> <version> <network type> <address type> <address>
s=<session name>
i=<session description>
u=<URI>
e=<email address>
p=<phone number>
c=<network type> <address type> <connection address>
b=<modifier>:<bandwidth-value>
t=<start time> <stop time>
r=<repeat interval> <active duration> <list of offsets from start-time>
z=<adjustment time> <offset> <adjustment time> <offset> ....
k=<method>
k=<method>:<encryption key>
a=<attribute>
a=<attribute>:<value>
m=<media> <port> <transport> <fmt list>
v = (协议版本)
o = (所有者/创建者和会话标识符)
s = (会话名称)
i = * (会话信息)
u = * (URI 描述)
e = * (Email 地址)
p = * (电话号码)
c = * (连接信息)
b = * (带宽信息)
z = * (时间区域调整)
k = * (加密密钥)
a = * (0 个或多个会话属性行)

时间描述:
t = (会话活动时间)
r = * (0或多次重复次数)

媒体描述:
m = (媒体名称和传输地址)
i = * (媒体标题)
c = * (连接信息 — 如果包含在会话层则该字段可选)
b = * (带宽信息)
k = * (加密密钥)
a = * (0 个或多个媒体属性行)


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

H264视频传输、编解码----RTSP认证 的相关文章

  • LeetCode题目笔记——2331. 计算布尔二叉树的值

    文章目录 题目描述 题目难度 简单 方法一 经典后序遍历 代码 C C Python 总结 题目描述 给你一棵 完整二叉树 的根 这棵树有以下特征 叶子节点 要么值为 0 要么值为 1 其中 0 表示 False 1 表示 True 非叶子

随机推荐

  • 【开源电机驱动】H 桥驱动-软件篇

    原文地址 http www modularcircuits com blog articles h bridge secrets h bridge control 本文为作者翻译校正稿件 含个人理解批注 H bridge Control H
  • 无需更改注册表 实现CHM文件从共享文件中直接打开

    直接上解决方法 无需更改注册表 将整个CHM文件压缩 在压缩文件中打开 chm文件 就可以正常显示相关内容 1 问题描述 压缩前 两台电脑 A是笔记本电脑 win10系统 B是台式电脑 win7系统 在A中设置了共享文件 并共享给了B CH
  • 别光看NB的Github开源项目,你得参考他们去设计自己的架构!

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 一 背景引入 首先简单介绍一下项目背景 公司对合作商家提供一个付费级产品 这个商业产品背后涉及到数百人的研发团队协作开发 包括各种业务系统来提供很多强大的业务功能 同
  • React 从零开始学习(四)—— 组件交互

    上一节 实现了把一个 prop 从父组件 Board 传递 给了子组件 Square 在 React 应用中 数据通过 props 的传递 从父组件流向子组件 这点跟 vue 是一样的 然后 跟着教程给组件添加交互功能 给组件添加交互功能
  • 简单学习识谱(六线谱)

    简单学习识谱 六线谱 参考资料 简谱的记谱方法 参考资料 吉他自学三月通 简谱的记谱方法 乐谱就是叙述音乐语言的文字 是每个学习音乐的人必须掌握的学习工具 当今世界通用的记谱法有五线谱和简谱 这两种方法都有着各自的特点 五线谱对于记录多声部
  • STM32通用定时器使用详解

    1 通用定时器基本介绍 通用定时器包括TIM2 TIM3 TIM4和TIM5 STM32通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成 每个定时器都是完全独立的 没有互相共享任何资源 它们可以一起同步操作 定时器可以进行定
  • main.c(31): warning: #223-D: function “uart_init“ declared implicitly

    Keil5编程之warning 223 D function xxx declared implicitly 1 函数没有头文件中进行声明 在头文件中添加声明 2 定义错误 字母大小可能不一致 仔细看一下出现问题的函数是否在声明和调用时使用
  • C语言入门——适合练手的密码本项目

    一 引言 学C语言有一段时间了 趁着正好做了密码本的小项目 把它分享出来 二 思路与原理 密码本 见名知意 就是存放账号密码 起到备忘录作用的本子 将需要备忘的数据通过加密存放在文本文件中 打开的文本文件为加密文本 需要通过软件查看已经存放
  • 用实际例子理解回调函数(Calback)

    用实际例子理解回调函数 Calback 在我们编码的过程中 调用和回调几乎无处不在 但是我对回调函数到底是怎样一回事并没有一个真正透彻的理解 最近我查找学习了一些资料 学到了很多 我参考了一些知乎上的分享 很不错 https www zhi
  • <数据结构>创建一个单链表

    单链表基本操作的实现 内容 构建线性表的链式存储结构 采用动态分配方式实现单链表的初始化 数据的插入 删除 输出单链表内中各元素 求单链表的长度 实现单链表中数据结点的按值排序 实现单链表的逆置 合并两个有序的单链表 有序的a表和有序的b表
  • node版本管理工具nvm

    1 标题卸载nvm和node js 系统变量中删除nvm添加变量 NVM HOME和NVM SYMLINK 环境变量中 path 删除nvm自动添加的变量 Path NVM HOME NVM SYMLINK 删除自身安装node环境 参考图
  • 《机器人操作系统入门》课程代码示例安装出错解决方法

    问题描述 学习 机器人操作系统入门 课程时 在Ubuntu 16 04 上安装了kinetic 安装ROS Academy for Beginners时依赖总是报错 如下所示 rosdep install from paths src ig
  • endnote插入的不是序号(而是大括号加上作者)的解决

    仅作为记录 大佬请跳过 之前用word通过endnote导入文献 都是可以的 在正文出现 1 的引用 但是博主新的word 需要修改参考文献 因此拟重新导入参考文献来修改 但发现导入的都是 Dou 2017 在正文中 文章目录 解决 参考
  • 50多个开源PDF阅读编辑工具汇总

    PDF Editing Creation 50 open source free alternatives to Adobe Acrobat 文章来源于这里 版权归原作者所有 Adobe Acrobat is expensive but t
  • QT QTableWidget 表格 学习笔记

    首先 了解一下QTableWidget 控件的属性 成员方法 功能 setText const QString text 设置单元格中的文本 setlcon const Qlcon icon 给单元格添加图标 setBackground c
  • unity3d 输入法相关API

    Input inputString 获取输入的文字 正在打的中文是接受不到的 只有在文字写到文本框才能获取 Input imeCompositionMode 是否是激活输入框状态 on 是 Input compositionString 空
  • 软件测试之登录测试详解

    一 功能测试 登录 功能性测试用例包括 1 什么都不输入 点击提交按钮 看提示信息 非空检查 2 输入已注册的用户名和正确的密码 验证是否登录成功 3 输入已注册的用户名和不正确的密码 验证是否登录失败 并且提示信息正确 4 输入未注册的用
  • mysql将执行过的sql放到历史记录里面

    查看是不是开启将历史执行的sql存入文件 show variables like general log 输出结果如下 gt Variable name Value
  • Anaconda安装教程

    文章目录 1 下载链接 2 安装步骤 3 确认已安装Anaconda 4 问题解决 4 1问题一 4 2问题二 1 下载链接 Anaconda百度网盘链接 点击即可进入百度网盘 提取码u5fx 建议不要去官网下载最新版本的 因为后期可能会遇
  • H264视频传输、编解码----RTSP认证

    Rtsp认证主要分为两种 基本认证 basic authentication 和摘要认证 digest authentication 基本认证是http 1 0提出的认证方案 其消息传输不经过加密转换因此存在严重的安全隐患 摘要认证是htt