RTSP作为客户端 推流 拉流的过程分析

news2024/10/4 7:15:10

之前写过一个 rtsp server 作为服务端的简单demo

这次分析下 rtsp作为客户端 推流和拉流时候的过 

A.作为客户端拉流 TCP方式

1.Client发送OPTIONS方法 Server回应告诉支持的方法

2.Client发送DESCRIPE方法 这里是从海康摄像机拉流并且设置了用户名密码 Server回复未认证

3.客户端通过服务器回复的realm nonce 计算response  重新带认证信息的DESCRIBE报文

服务器回复

4.客户端发送SETUP报文

5.客户端发送 PLAY报文

RTSP交互的过程如上  

实际测试中发现 几点需要注意:

a.需要用户密码的 大多数是在发送DESCRIBE方法后返回401 有的是第一次发送OPTIONS方法就会返回401

b.服务端包含视频流 音频流 必须单独发送一次SETUP视频流 再发送一次SETUP音频流 我本来想只要视频流 不要音频流  但是实测发现不行 必须 视频流 音频流都SETUP 

c.最后发送play报文之后 server回复报文的时候大多数时候 会将rtp报文连带一起发过来

 需要做切割

需要用户名密码时候的认证信息计算 大多数都是走DIGEST方式 仅仅介绍此种方式 

首先计算loginhash 计算方法为 MD5(username:realm:password) 之后转换为字符串

 然后针对method和uri计算method_hash MD5(method:uri)

需要注意的是:SETUP时候的uri 和其他方法的uri是不一样的

最后计算response = MD5(MD5(loginhash:nonce):method_hash) 如下图

整个过程中 loginhash只需要计算一次既可  别的 每次都要计算 

由于是tcp方式 和RTSP RTP RTCP 共用一个端口 后面 解析数据包即可 

不管是rtp包还是rtcp包 前面有一个四个字节的头

首字节固定0x24  后面一个字节channel 区分 音视频 rtp rtcp 一般偶数通道标识rtp包 奇数标识rtcp包 后面两个字节表示包长

0x24 channel datalen 

但是实际测试中发现  部分rtsp server tcp方式发送的时候  rtcp包没有这四个字节 找0x24头的时候找不到 ffmpeg会将错误原因设置为End of file  如下图 80 C8 00 06 是RTCP的报文

在我自己的测试程序中 可以直接跳过这个包 直接继续接受数据处理 即可 发现也没问题  采用ffmpeg的话 就只能更改ffmpeg源码了  会比较麻烦  

  

以上是作为客户端拉流的时候

2.RTSP作为客户端推流   这里 采用ffmpeg推流rtsp 默认UDP方式  server采用ZLMediakit 分析

客户端发送OPTIONS方法  服务端回复支持的方法 可以看到比一般的摄像头多了ANNOUNCE RECORD方法

客户端发送ANNOUNCE方法 

客户端发送SETUP方法

客户端发送RECORD方法 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2187595.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ubuntu】Ubuntu20.04安装中文百度输入法

1.download 百度Linux输入法-支持全拼、双拼、五笔 2.unzip unzip Ubuntu_Deepin-fcitx-baidupinyin-64.zip 3.setting 3.1 setting fcitx sudo apt install aptitude sudo aptitude install fcitx-bin fcitx-table fcitx-config-gtk fcitx-frontend-all sudo aptitude in…

QT学习笔记2.2(安装部署_编译器)

QT学习笔记2.2(安装部署_编译器) 编译器的版本,32位64位的 目前只用32位vs编译过,其他的还没有搞过。 一直没有搞清楚qt qtcreator 生成软件,32位和64位之间的关系 目前只使用32位qt生成打包了32位的项目。 编译器的安装 …

yolov8/9/11模型在中医舌苔分类中的应用【代码+数据集+python环境+GUI系统】

yolov8、9、11模型在中医舌苔分类中的应用【代码数据集python环境GUI系统】 背景意义 目前随着人们生活水平的不断提高,对于中医主张的理念越来越认可,对中医的需求也越来越多。 传统中医的舌诊主要依赖于医生的肉眼观察,仅仅通过这种人工诊…

【EXCEL数据处理】000014 案例 EXCEL分类汇总、定位和创建组。附多个操作案例。

前言:哈喽,大家好,今天给大家分享一篇文章!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【EXCEL数据处理】000014 案例 EXCEL分类汇总、定位和创建组。附多个操…

算法【Java】—— 递归

递归思路 首先我们要分析主问题,如果主问题可以拆分成一个又一个小问题的时候,并且这些小问题的解决方案也是一样的话,我们可以使用递归来解决。 递归函数头的设计是根据子问题的解决需要而设计的 函数体部分则是由如何解决子问题组成 最…

0基础学习CSS(十六)尺寸和Display(显示) 与 Visibility(可见性)

CSS 尺寸 (Dimension) 所有CSS 尺寸 (Dimension)属性 属性描述height设置元素的高度。line-height设置行高。max-height设置元素的最大高度。max-width设置元素的最大宽度。min-height设置元素的最小高度。min-width设置元素的最小宽度。width设置元素的宽度。 CSS Display(显…

【算法】---快速排序

参考 左神和神书算法导论. 学习前置 了解并实现过快速排序。 笔者曾经在数据结构篇写过快速排序,现在面向算法篇快排。 快速排序 输入数据所有排列是等概率的, 这种情况对于实际工程上不会总是成立。朴素快速排序对于特定的输入很糟糕, …

PASCAL VOC 2012数据集 20类物体,这些物体包括人、动物(如猫、狗、鸟等)、交通工具(如车、船、飞机等)以及家具(如椅子、桌子、沙发等)。

VOC2012数据集是PASCAL VOC挑战赛官方使用的数据集之一,主要包含20类物体,这些物体包括人、动物(如猫、狗、鸟等)、交通工具(如车、船、飞机等)以及家具(如椅子、桌子、沙发等)。每个…

ultralytics-yolo-webui :Detect 目标检测 工具-先行版本 >> DataBall

通过webui 方式对ultralytics 的 detect 检测任务 进行: 1)数据预处理,2)模型训练,3)模型推理。 本项目提供了 示例数据集,用 labelImage标注,标注文件为 xml 文件。 项目地址&…

数据结构(栈和队列的实现)

1. 栈(Stack) 1.1 栈的概念与结构 栈是一种特殊的线性表,其只允许固定的一段插入和删除操作;进行数据插入和删除的一段叫做栈顶,另一端叫栈底;栈中的元素符合后进先出LIFO(Last In First Out&…

PCL 点云半径滤波

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 半径滤波实现 2.1.2 可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长期更新&#xf…

MFC有三个选项:MFC ActiveX控件、MFC应用程序、MFC DLL,如何选择?

深耕AI:互联网行业 算法研发工程师 ​ 目录 MFC ActiveX 控件 控件的类型 标准控件 自定义控件 ActiveX控件 MFC ActiveX控件 标准/自定义控件 MFC ActiveX控件分类 3种MFC如何选择? MFC ActiveX控件 MFC 应用程序 MFC DLL 总结 举例说明…

【JAVA开源】基于Vue和SpringBoot的周边产品销售网站

本文项目编号 T 061 ,文末自助获取源码 \color{red}{T061,文末自助获取源码} T061,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

申请免费或试用VPS服务

申请免费或试用VPS服务 有时候我们特别希望能够找到一台像 Oracle Cloud 一样的永久免费 VPS(需要满足一定的条件),可相对于其它厂商申请相对比较难,可能需要多次申请才能得到。其实,除了 Oracle Cloud 之外&#xff0…

阿里云对象存储OSS 速学

目录 1.创建一个Bucket 2.创建密钥AccessKey 3.在文档中心打开阿里云对象存储OSS 4.参考上传文件示例 以官网的文档为主,我的文章教学为辅 官网有详细的视频介绍: OSS快速入门_对象存储(OSS)-阿里云帮助中心 (aliyun.com)https://help.aliyun.com/…

Linux: network: 典型网络延迟图,CPU导致;

接上回说,https://mzhan017.blog.csdn.net/article/details/142689870; 其中在debug的过程中,看到下面这个IO图,这个图比较经典,是一个典型的网络延迟图,可用作为分析问题的一个参考。 如下图:黑…

C++ | Leetcode C++题解之第454题四数相加II

题目&#xff1a; 题解&#xff1a; class Solution { public:int fourSumCount(vector<int>& A, vector<int>& B, vector<int>& C, vector<int>& D) {unordered_map<int, int> countAB;for (int u: A) {for (int v: B) {count…

ZYNQ: GPIO 之 EMIO 按键控制 LED 实验

GPIO 之 EMIO 按键控制 LED 实验目的 使用启明星 ZYNQ 底板上的两个用户按键分别控制 PS 端两个 LED 的亮灭 其中一个按键 PL_KEY0 连接到了 PL 端&#xff0c;需要通过 EMIO 进行扩展&#xff0c;另外一个按键是底板上 PS 端的用户按键PS_KEY0&#xff0c;这两个按键分别控制…

堆的向上和向下调整

堆的物理结构和逻辑结构是什么&#xff1f; 堆如何插入数据和删除数据&#xff1f;为什么&#xff1f; 向上调整和向下调整的要求是啥&#xff1f; 文中不理解的可以先看堆的代码和基础知识-CSDN博客 也欢迎评论区一起讨论 1.堆的物理结构和逻辑结构 我们的堆是用数组实…

计算机毕业设计 视频点播系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…