rtsp 协议推流接收(tcp udp)

使用两种方式进行推流,udp 和tcp,必须先理解udp 和tcp推流方式的不同

udp 推流

./ffmpeg -re -i d:/test.mp4 -c copy -av -f rtsp rtsp://192.168.0.24/live/1

OPTIONS rtsp://192.168.0.24:554/live/1 RTSP/1.0
CSeq: 1
User-Agent: Lavf60.16.100RTSP/1.0 200 OK
CSeq: 1
Date: Sat, Sep 28 2024 01:33:39 GMT
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, ANNOUNCE, RECORD, SET_PARAMETER, GET_PARAMETER
Server: ViewPointserverANNOUNCE rtsp://192.168.0.24:554/live/1 RTSP/1.0
Content-Type: application/sdp
CSeq: 2
User-Agent: Lavf60.16.100
Content-Length: 2xxv=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 192.168.0.24
t=0 0
a=tool:CRYPT 
m=video 0 RTP/AVP 96
b=AS:13152
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z01AKZWQB4AiflwEQAAA+gAAMNQh,aOuPIA==; profile-level-id=4D4029
a=control:streamid=0
RTSP/1.0 200 OK
CSeq: 2
Date: Sat, Sep 28 2024 01:33:39 GMT
Server: ViewPointserver
Session: NOzALlDctEdMSETUP rtsp://192.168.0.24:554/live/1/streamid=0 RTSP/1.0
Transport: RTP/AVP/UDP;unicast;client_port=28590-28591;mode=record
CSeq: 3
User-Agent: Lavf60.16.100
Session: NOzALlDctEdMRTSP/1.0 200 OK
CSeq: 3
Date: Sat, Sep 28 2024 01:33:39 GMT
Server: ViewPointServer
Session: NOzALlDctEdM
Transport: RTP/AVP/UDP;unicast;client_port=28590-28591;mode=record;server_port=31006-31007;ssrc=00000000RECORD rtsp://192.168.0.24:554/live/1 RTSP/1.0
Range: npt=0.000-
CSeq: 4
User-Agent: Lavf60.16.100
Session: NOzALlDctEdMRTSP/1.0 200 OK
CSeq: 4
Date: Sat, Sep 28 2024 01:33:39 GMT
RTP-Info: url=rtsp://192.168.0.24:554/live/1/streamid=0
Server: ViewPointServer,build time:2024-04-11T13:25:49)
Session: NOzALlDctEdM

RTSP 交互日志的分析:

一、OPTIONS 请求与响应

首先,客户端向服务器 rtsp://192.168.0.24:554/live/1 发送了一个 OPTIONS 请求。这个请求通常用于获取服务器支持的方法列表。
请求中包含了一些信息:
CSeq: 1 表示这个请求的序列号为 1。
User-Agent: Lavf60.16.100 表明了发出请求的客户端软件信息。
服务器响应:
RTSP/1.0 200 OK 表示请求成功。
CSeq: 1 与请求中的序列号对应。
Date: Sat, Sep 28 2024 01:33:39 GMT 给出了响应的时间。
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, ANNOUNCE, RECORD, SET_PARAMETER, GET_PARAMETER 告知客户端服务器支持的方法列表。
Server: 显示了服务器的软件信息。

二、ANNOUNCE 请求与响应

客户端发送 ANNOUNCE 请求,通常用于向服务器提供媒体描述信息。注意sdp本身也是一个协议
请求包含:
Content-Type: application/sdp 表明请求体中的内容类型为 SDP(Session Description Protocol)。
CSeq: 2 序列号为 2。
User-Agent: Lavf60.16.100 客户端软件信息。
Content-Length: 299 表示请求体的长度为 299 字节。
请求体中是 SDP 描述信息,包括版本号、源信息、媒体信息等。
服务器响应:
RTSP/1.0 200 OK 请求成功。
CSeq: 2 对应请求的序列号。
Date: Sat, Sep 28 2024 01:33:39 GMT 响应时间。
Server:ViewPointServer 服务器软件信息。
Session: NOzALlDctEdM 分配给这个会话的唯一标识符。

三、SETUP 请求与响应

客户端发送 SETUP 请求,用于建立媒体传输连接。
请求包含:
Transport: RTP/AVP/UDP;unicast;client_port=28590-28591;mode=record 指定了传输协议、传输方式、客户端端口和模式。
CSeq: 3 序列号为 3。
User-Agent: Lavf60.16.100 客户端软件信息。
Session: NOzALlDctEdM 使用之前分配的会话标识符。
服务器响应:
RTSP/1.0 200 OK 请求成功。
CSeq: 3 对应请求的序列号。
Date: Sat, Sep 28 2024 01:33:39 GMT 响应时间。
Server: 服务器软件信息。
Session: NOzALlDctEdM 会话标识符。
Transport: RTP/AVP/UDP;unicast;client_port=28590-28591;mode=record;server_port=31006-31007;ssrc=00000000 服务器返回的传输信息,包括服务器端口和同步源标识符。

四、RECORD 请求与响应

客户端发送 RECORD 请求,开始录制媒体流。
请求包含:
Range: npt=0.000- 可能指定了录制的时间范围。
CSeq: 4 序列号为 4。
User-Agent: Lavf60.16.100 客户端软件信息。
Session: NOzALlDctEdM 会话标识符。
服务器响应:
RTSP/1.0 200 OK 请求成功。
CSeq: 4 对应请求的序列号。
Date: Sat, Sep 28 2024 01:33:39 GMT 响应时间。
RTP-Info: url=rtsp://192.168.0.24:554/live/1/streamid=0 提供了 RTP 流的信息。
Server: ViewPointServer 观点服务器软件信息。
Session: NOzALlDctEdM 会话标识符。
总体来说,交互展示了客户端使用 RTSP 协议与服务器进行交互的过程,包括获取服务器支持的方法、提供媒体描述、建立传输连接和开始录制媒体流等步骤。

tcp rtsp 推流

使用ffmpeg 进行推流,关键字如下
-rtsp_transport tcp

注意rtsp_transport 的位置,不要放在开头,要在v 和 a 的后面, rtsp协议的前面
./ffmpeg -re -i d:/test.mp4 -c:v copy -c:a copy -rtsp_transport tcp -f rtsp rtsp://192.168.0.24/live/1

包如下

OPTIONS rtsp://192.168.0.24:8554/live/1 RTSP/1.0
CSeq: 1
User-Agent: Lavf60.16.100RTSP/1.0 200 OK
CSeq: 1
Public: DESCRIBE, ANNOUNCE, SETUP, PLAY, RECORD, PAUSE, GET_PARAMETER, TEARDOWN
Server: gortsplibANNOUNCE rtsp://192.168.0.24:8554/live/1 RTSP/1.0
Content-Type: application/sdp
CSeq: 2
User-Agent: Lavf60.16.100
Content-Length: 372v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 192.168.0.24
t=0 0
a=tool:libavformat 60.16.100
m=video 0 RTP/AVP 96
a=rtpmap:96 H265/90000
a=fmtp:96 sprop-vps=QAEMAf//AUAAAAMAgAAAAwAAAwC0rAk=; sprop-sps=QgEBAUAAAAMAgAAAAwAAAwC0oAKAgC0WWuSytmuXE0BAAAADAEAAAAUP4sSg; sprop-pps=RAHA4w8DMkAA
a=control:streamid=0
m=audio 0 RTP/AVP 0
b=AS:64
a=control:streamid=1
RTSP/1.0 200 OK
CSeq: 2
Server: gortsplibSETUP rtsp://192.168.0.24:8554/live/1/streamid=0 RTSP/1.0
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;mode=record
CSeq: 3
User-Agent: Lavf60.16.100RTSP/1.0 200 OK
CSeq: 3
Server: gortsplib
Session: 541f23a1bc914e78bc405253a7f8c037
Transport: RTP/AVP/TCP;unicast;interleaved=0-1SETUP rtsp://192.168.0.24:8554/live/1/streamid=1 RTSP/1.0
Transport: RTP/AVP/TCP;unicast;interleaved=2-3;mode=record
CSeq: 4
User-Agent: Lavf60.16.100
Session: 541f23a1bc914e78bc405253a7f8c037RTSP/1.0 200 OK
CSeq: 4
Server: gortsplib
Session: 541f23a1bc914e78bc405253a7f8c037
Transport: RTP/AVP/TCP;unicast;interleaved=2-3RECORD rtsp://192.168.0.24:8554/live/1 RTSP/1.0
Range: npt=0.000-
CSeq: 5
User-Agent: Lavf60.16.100
Session: 541f23a1bc914e78bc405253a7f8c037RTSP/1.0 200 OK
CSeq: 5
Server: gortsplib
Session: 541f23a1bc914e78bc405253a7f8c037

接下来后面就是rtp的包直接跟在后面
tcp的rtp协议和udp 的rtp 有所不同,每个rtp包前面会多出四个字节

static void set_buf_rtp_over_rtsp_tag(uint8_t* pbuffer, uint8_t bychannel, uint16_t dwlen)
{
pbuffer[0] = 0x24;//$ magic char
pbuffer[1] = bychannel;
pbuffer[2] = (dwlen >> 8) & 0xff;
pbuffer[3] = dwlen & 0xff;
}
一个是0x24 ,一个是chhannel
后面两个字节是包长,根据这个再去接收包

其他

如果sdp协议里没有sps,pps,h265 包含vps,sps,pps则要在关键帧前面加这些信息,sdp协议里面是base64编码的sps,pps等信息

ViewPointServer 实现

1 接收3588 rtsp tcp 推流,为什么要用tcp,防止要推送到外网,server如果在外网,内网使用udp是无法推送的
2 ViewPointServer 接收流后解码进行超分服务

依据以上包,实现server,比较重要的是应用,1 是超分服务,2 是融合服务,由于rtsp 协议非常普遍,可能还需要拉流rtsp,由于ffmpeg 能够拉流解码,所以拉流这部分可以直接使用ffmpeg

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

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

相关文章

OJ在线评测系统 前端开发整合开源组件 Monaco Editor 并且开发创建题目页面

前端开发整合Monaco Editor 微软官方的 npm install monaco-editor 下载兼容版本 npm install monaco-editorlatest 代码编辑器 先把编辑器本身安装好monaco-editor 安装插件 npm install monaco-editor-webpack-plugin 这个插件的作用是把我们的代码编译器和webpack打包在…

Amazon EC2, S3 Bucket, Yaml file, Stack

Amazon EC2, S3 Bucket, Yaml file, Stack YAML 文件: YAML是一种人类可读的数据序列化格式,常用于配置文件。它比JSON或XML更简洁,常用于定义复杂的数据结构。 YAML文件是一种格式,用于编写配置数据。它易于阅读,常…

联想天逸100使用笔记

文章目录 配置整理过程锁定功能键怎么弄? 翻出好多年不用的老电脑,饱受折磨,做个笔记。 之前不是我在使用,本身配置就不高,还被装了各种流氓软件,卡的几乎动不了。 配置 老电脑配置不行: i3 5005U 4G内存…

大数据实时数仓Hologres(四):基于Flink+Hologres搭建实时数仓

文章目录 基于FlinkHologres搭建实时数仓 一、使用示例 二、方案架构 1、架构优势 2、Hologres核心优势 三、实践场景 四、项目准备 1、创建阿里云账号AccessKey 2、准备MySQL数据源 五、构建实时数仓​编辑 1、管理元数据 2、构建ODS层 2.1、创建CDAS同步作业OD…

【算法】链表:21.合并两个有序链表(easy)

系列专栏 《分治》 《模拟》 《Linux》 目录 1、题目链接 2、题目介绍 3、解法(双指针) 4、代码 1、题目链接 21. 合并两个有序链表 - 力扣(LeetCode) 2、题目介绍 3、解法(双指针) 推荐一篇题解…

华为-IPv6与IPv4网络互通的6to4自动隧道配置实验

IPv4向IPv6的过渡不是一次性的,而是逐步地分层次地。在过渡时期,为了保证IPv4和IPv6能够共存、互通,人们发明了一些IPv4/IPv6的互通技术。 本实验以6to4技术为例,阐述如何配置IPv6过渡技术。 配置参考 R1 # sysname R1 # ipv6# interface GigabitEthernet0/0/1ip address 200…

匈牙利算法模板

P3386 【模板】二分图最大匹配 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路:最模板的一集.还未匹配则匹配&#xff0c;否则之前一个给现在这个让位置. int n,m,e; vector<int> vct[505]; int match[505]; bool vis[505]; bool mark[505][505]; bool dfs(int s)…

[大语言模型-论文精读] 大语言模型是单样本URL分类器和解释器

[大语言模型-论文精读] 大语言模型是单样本URL分类器和解释器 目录 文章目录 [大语言模型-论文精读] 大语言模型是单样本URL分类器和解释器目录1. 论文信息2. 摘要3. 引言4. 相关工作A. 网络钓鱼URL检测B. 使用LLMs进行单样本分类 C. LLMs作为分类器的可解释性 5. 论文所提框架…

十四、磁盘的管理

1.磁盘初始化 Step1:进行低级格式化(物理格式化)&#xff0c;将磁盘的各个磁道划分为扇区。一个扇区通常可分为头、数据区域(如512B大小)、尾 三个部分组成。管理扇区所需要的各种数据结构一般存放在头、尾两个部分&#xff0c;包括扇区校验码(如奇偶校验、CRC循环几余校验码等…

Python-o365:提升办公效率的利器

&#x1f680; 引言 在数字化办公日益普及的今天&#xff0c;Python以其强大的功能和灵活性&#xff0c;在自动化办公和数据处理方面发挥着重要作用。作为最常用的办公工具之一&#xff0c;Microsoft Office套件如何通过编程提升使用效率&#xff0c;一直是开发者们关注的热点…

如何使用ChatGPT API及Bito插件

目录 本章整体说明Open AI常用API接口工具&#xff1a;Postman调用API接口演示Java和Python调用Open AI API接口基于ChatGPT-4的代码生成插件Bito使用小练习&#xff1a;3分钟搭建一个自己专属的AI聊天网站 2-1 本章整体说明 本章将详细介绍如何使用ChatGPT API以及Bito插件&…

LLamaIndex - 构建全栈Web应用程序的指南

本文翻译整理自&#xff1a;A Guide to Building a Full-Stack Web App with LLamaIndex https://docs.llamaindex.ai/en/stable/understanding/putting_it_all_together/apps/fullstack_app_guide/ 文章目录 简介一、Flask 后端基本Flask - 处理用户索引查询Advanced Flask - …

web前端(本地存储问题超过5MB不继续保存解决办法)

及时使用pinia进行持久化存储&#xff0c;存入localstorage仍然会有超过5MB就不再处理保存的问题 解决办法&#xff1a;取消使用pinia-plugin-persistedstate持久化插件&#xff0c;使用localforage&#xff0c;pinia库正常开启persist: true localForage 是一个快速而简单的…

cocos打包后发布web,控制台报错.plist资源下载404

web加载报错 download failed: assets/main/native/0a/0a1a5e41-7d91-4a5d-9552-2c10e5fc5867.plist, status: 404&#xff0c; 应该是MIME属性没有设置允许下载.plist后缀的文件。 对于linux应该改nginx或apache&#xff0c;允许下载该类文件。 我部署在了windows服务器上&am…

【微服务即时通讯系统】——etcd一致性键值存储系统、etcd的介绍、etcd的安装、etcd使用和功能测试

文章目录 etcd1. etcd的介绍1.1 etcd的概念 2. etcd的安装2.1 安装etcd2.2 安装etcd客户端C/C开发库 3. etcd使用3.1 etcd接口介绍 4. etcd使用测试4.1 原生接口使用测试4.2 封装etcd使用测试 etcd 1. etcd的介绍 1.1 etcd的概念 Etcd 是一个基于GO实现的 分布式、高可用、一致…

计算机毕业设计 基于协同过滤算法的个性化音乐推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

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

Redis实战--Redis的数据持久化与搭建Redis主从复制模式和搭建Redis的哨兵模式

Redis作为一个高性能的key-value数据库&#xff0c;广泛应用于缓存、消息队列、排行榜等场景。然而&#xff0c;Redis是基于内存的数据库&#xff0c;这意味着一旦服务器宕机&#xff0c;内存中的数据就会丢失。为了解决这个问题&#xff0c;Redis提供了数据持久化的机制&#…

深入解析Excel文件格式:.xls与.xlsx的差异与应用指南

在当今的数据处理和办公自动化领域&#xff0c;Microsoft Excel 无疑是一款极为重要的工具。 它不仅广泛应用于日常的数据录入、计算和图表制作&#xff0c;而且也是数据分析、财务建模等专业 领域不可或缺的软件。Excel 的文件格式经历了多个版本的迭代&#xff0c;其中 .xl…

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,1-2

文件下载与邀请翻译者 学习英特尔开发手册&#xff0c;最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册&#xff0c;会是一件耗时费力的工作。如果有愿意和我一起来做这件事的&#xff0c;那么&#xff…

二叉树进阶oj题【二叉树相关10道oj题的解析和c++代码实现】

目录 二叉树进阶oj题1.根据二叉树创建字符串2.二叉树的层序遍历3.二叉树的层序遍历 II4.二叉树的最近公共祖先5.二叉搜索树和双向链表6.从前序与中序遍历序列构造二叉树7.从中序和后序遍历序列来构造二叉树8.二叉树的前序遍历&#xff0c;非递归迭代实现9.二叉树中序遍历 &…