当前位置: 首页 > news >正文

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

之前写过一个 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.lryc.cn/news/452254.html

相关文章:

  • 【MySQL 07】内置函数
  • 《深度学习》OpenCV 背景建模 原理及案例解析
  • 机器学习(1):机器学习的概念
  • 0. Pixel3 在Ubuntu22下Android12源码拉取 + 编译
  • ip经过多个服务器转发会网速变慢吗
  • mongodb通过mongoimport导入JSON文件数据
  • 【Qt】控件概述 (1)
  • ping基本使用详解
  • Win10之解决:设置静态IP后,为什么自动获取动态IP问题(七十八)
  • 【AI论文精读1】针对知识密集型NLP任务的检索增强生成(RAG原始论文)
  • 踩坑spring cloud gateway /actuator/gateway/refresh不生效
  • 【STM32开发环境搭建】-3-STM32CubeMX Project Manager配置-自动生成一个Keil(MDK-ARM) 5的工程
  • 计算机毕业设计 Java酷听音乐系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • Java的学习(语法相关)
  • 简单的springboot 编写Socket服务接口
  • 【Android 源码分析】Activity短暂的一生 -- 目录篇 (持续更新)
  • VS Code使用Git Bash终端
  • 移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——13.mapset(模拟实现)
  • 【C++】多态(下)
  • 基于四种网络结构的WISDM数据集仿真及对比:Resnet、LSTM、Shufflenet及CNN
  • 【蚂蚁HR-注册/登录安全分析报告】
  • 【分布式微服务云原生】详解Redis的主从模式,主服务器挂了如何从多个从服务器选出新的主服务器
  • Android Context是什么?有很多的context他们之间有什么区别?什么时候该使用哪个?
  • 数字解调同步技术
  • k8s搭建一主三从的mysql8集群---无坑
  • Oracle架构之物理存储中各种文件详解
  • AR 领域的突破——微型化显示屏为主流 AR 眼镜铺平道路
  • Web安全 - 构建全面的业务安全保护防御体系
  • 机器学习(2):机器学习的相关术语
  • Leecode热题100-75.颜色分类