h264和h265视频流SDP描述详解

article/2025/9/23 13:19:31

文章目录

  • 1 SDP概述

  • 2.SDP媒体描述极其扩展属性

    • 2.1 m属性介绍

    • 2.2 a=control附加属性介绍

    • 2.3 a=rtpmap附加属性介绍

    • 2.4 a=fmtp附加属性介绍

SDP(Session Description Protocol)会话描述协议,是一种用来描述信息格式的标准,它不是一种用于传输的协议而是由 ITEF 组织下的 MMusic 工作组设计的一种会话描述格式,其他的传输协议通过sdp来交换必要的信息,常用在实时音视频中用来交换信息;比如GB28181视频交互(SIP-INVITE)、RTSP(DESCRIBE)、WEBRTC等音视频交换协议中,用作描述音视频信息。

1 SDP概述

首先看一个海康摄像头,通过RTSP协议交换获得SDP信息,客户端发送DESCRIBE时的响应,如下:

RTSP/1.0 200 OK
CSeq: 3
Content-Type: application/sdp
Content-Base: rtsp://10.45.12.141/h264/ch1/main/av_stream/
Content-Length: 593v=0
o=- 1658575881396804 1658575881396804 IN IP4 10.45.12.141
s=Media Presentation
e=NONE
b=AS:5050
t=0 0
a=control:rtsp://10.45.12.141/h264/ch1/main/av_stream/
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:5000
a=recvonly
a=x-dimensions:1920,1080
a=control:rtsp://10.45.12.141/h264/ch1/main/av_stream/trackID=1
a=rtpmap:96 H264/90000
a=fmtp:96 profile-level-id=420029; packetization-mode=1; sprop-parameter-sets=Z00AKpY1QPAET8s3AQEBQAABwgAAV+QB,aO48gA==
a=Media_header:MEDIAINFO=494D4B48010300000400000100000000000000000000000000000000000000000000000000000000;
a=appversion:1.0

Content-Type: application/sdp标识RTSP响应携带的消息类型是SDP,下面对SDP消息体进行详细介绍

SDP协议包含会话层和媒层,具体字段释义如下表:

本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

在视频流中,SDP的媒体描述层标识流媒体服务器流的属性,对于客户端拉流和解码有着重要的意义,媒体描述层属性如果出现错误,可能导致客户端无法解析,下面对SDP中m属性极其附加属性进行详细介绍。

2.SDP媒体描述极其扩展属性

SDP媒体描述极其扩展属性,在不同的协议中有定义有所不同,需要参照不同协议的协议规范来看,这里介绍的是比较通用的定义,以RTSP协议中SDP的媒体描述定义。媒体描述扩展属性中有关c、b等属性不在做介绍,主要介绍m极其扩展属性a=control\a=rtpmap\a=fmtp进行详细介绍。

2.1 m属性介绍

m属性的格式如下:

m=<media> <port> <proto> <fmt> ...

实例如下:

m=video 0 RTP/AVP 96

每个字段代表的含义如下:

media:媒体类型,目前应用到的有video/audio/application等表示视频/音频/元数据等类型,根据不通协议规范,可扩展其他类型

port:流媒体服务器发送数据的传输端口号,表示服务器从本端口发送流,0表示随机端口发送,如果是RTSP协议,一般为0,后继协议SETUP时确定传输端口

proto:传输的协议类型, RTP/AVP表示支持UDP传输,RTP/AVP/TCP支持TCP传输,主流交互协议中,也用RTP/AVP表示既支持UDP又支持TCP

<fmt>:媒体格式描述,RTP中用payloadtype来赋值,表示流的类型,这里会和后面"a=rtpmap:"、“a=fmtp:”相关联,具体对媒体进行描述。

2.2 a=control附加属性介绍

在m属性之前,一般会有如下格式的扩展属性,例如

a=control:rtsp://10.45.12.141/h264/ch1/main/av_stream/

如果在m之前出现,则标识后面的多媒体流控制地址是由此rtsp://10.45.12.141/h264/ch1/main/av_stream/前缀的,如果前缀为*,则标识无前缀,这在SDP解析的时候可以作为查找依据。

SDP描述中可以包含多个流媒体描述,每个流媒体都是以m开头,到遇到下个m为止,媒体流选择是通过媒体描述的附加属性a=control:来区分,比如如下SDP信息

v=0
o=- 1387444157003239 1 IN IP4 10.45.149.105
s=LIVE555 Streaming Media v2013.07.03
i=000100
t=0 0
a=tool:LIVE555 Streaming Media v2013.07.03
a=type:broadcast
a=control:*
a=range:npt=0-
a=x-qt-text-nam:LIVE555 Streaming Media v2013.07.03
a=x-qt-text-inf:000100
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:8000
a=rtpmap:96 H264/90000
a=control:track1
m=audio 0 RTP/AVP 0
c=IN IP4 0.0.0.0
b=AS:512
a=control:track2
a=rtpmap:0 PCMU/8000
a=recvonly
m=audio 0 RTP/AVP 0
c=IN IP4 0.0.0.0
b=AS:512
a=control:track3
a=rtpmap:0 PCMU/8000
a=sendonly

其中包含了三个流的描述,分别为视频、下行语音、上行语音组成,通过a=control:附加属性的值来区分,track1标识视频,track2表示下行预研、track3表示上行语音,在客户端建立连接阶段(RTSP-SETUP)根据自己的需求去建立连接并播放

2.3 a=rtpmap附加属性介绍

附加属性的格式如下:

a=rtpmap:<payload type><encoding name>/<clock rate>[/<encodingparameters>]

实例如下:

a=rtpmap:96 H264/90000

详解如下:

payloadtype:负载类型在多路复用技术中表示一个流通道,这里与媒体信息中的fmt对应

扩展描述媒体打包信息

encodingname:编码方式,表示流的编码方式,比如H264、H265等

clock rate:采样的时钟频率,这里视频流一般为90000,如果为RTP流,时钟频率将作为RTP帧间隔的衡量,例如帧间隔为40ms,则RTP包的时间戳间隔为(40/1000)*90000=3600

2.4 a=fmtp附加属性介绍

附件属性的格式,H264和H265有一定的区别,这里分开来说明,首先看下H264格式:

a=fmtp:<payload type> profile-level-id=<xxx>; packetization-mode=1;sprop-parameter-sets=xxx,xxx

实例如下:

a=fmtp:96 profile-level-id=420029; packetization-mode=1; sprop-parameter-sets=Z00AKpY1QPAET8s3AQEBQAABwgAAV+QB,aO48gA==

详解如下:

payload type:负载类型在多路复用技术中表示一个流通道,这里与媒体信息中的fmt对应

profile-level-id:为三个十六进制表示的字节,第一个字节表示profile_idc(编码规格),第二个字节表示profile-iop,第三个字节表示level_idc编码等级,profile_idc一般有三个取值0x42(66)-baseline profile,0x4D(77)-main profile,0x58(88)-extened profile;profile-iop, 0x64(100)-high profile;profile-iop每个字段对应一个含义,主要是区分是否严格按照编码规范,这里一般取00;第三个字节level_idc编码水平,其等于编码等级*10,上例中的编码等级为4.1

packetization-mode:表示封装方式,0或不存在时, 必须使用单一NALU 单元模式;1-必须使用非交错(non-interleaved)封包模式;2-必须使用交错(interleaved)封包模式,一般采用非交错模式

sprop-parameter-sets:sps,pps;SPS和PPS的数据的base64编码,序列参数集和图像参数NAL单元,采用 Base64 进行编码. 不同的参数集间用","号隔开

H265的fmtp格式不通通信协议中有很多方式,也有与h264统一的格式,即sprop-parameter-sets=VPS,SPS,PPS,这里介绍一种较为常用的格式,如下:

a=fmtp:96 sprop-vps=xxx;sprop-sps=xxx; sprop-pps=xxx

实例如下:

a=fmtp:96 sprop-vps=QAEMAf//AIAAAAMAAAMAAAMAAAMAALUCQA==;sprop-sps=QgEBAWAAAAMAsAAAAwAAAwB7oAPAgBDlja5JMvTcBAQEAg==; sprop-pps=RAHA8vA8kAA=

sprop-vps:VPS的base64编码

sprop-sps:SPS的base64编码

sprop-pps: PPS的base64编码

有关fmtp还可以自定义其他属性,类似方式a= fmtp:96 xxx=xxx;,具体扩展含义,可以自定义,只要客户端和服务器规定一致即可。

本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓


http://chatgpt.dhexx.cn/article/ub2DMwws.shtml

相关文章

表格标签

表格标签 规则表格 不规则表格–跨行和跨列 表格的高级标签–标题标签和逻辑分区标签

Android实现Excel表格样式

原理描述&#xff1a; 想写来着&#xff0c;但是似乎描述不太清楚。效果图来着&#xff0c;没找到好的视频录制软件&#xff0c;直接上代码吧。 代码&#xff1a; 1、xml布局文件 自定义控件的包名删除了部分&#xff0c;需要重新导入自定义控件&#xff01;&#xff01;&a…

Apache POI 操作Excel表格使用详解 最全

1.POI结构与常用类 (1)POI介绍 Apache POI是Apache软件基金会的开源项目&#xff0c;POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 .NET的开发人员则可以利用NPOI (POI for .NET) 来存取 Microsoft Office文档的功能。 (2)POI结构说明 包名称 说明 HSSF 提供…

022_Table表格

1. Table表格例子 1.1. Table表格用于展示多条结构类似的数据, 可对数据进行排序、筛选、对比或其他自定义操作。 1.2. Table Attributes 参数 说明 类型 可选值 默认值 data 显示的数据 array 无 无 height Table的高度, 默认为自动高度。如果height为number类型…

java 导入导出excel表格

java 导入导出excel表格 业务上有需求上传excel表格并读取内容&#xff0c;本文记录一下该方法 表格导入 引入相应的工具包 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>4.4.0&l…

python逻辑回归

出现函数重名问题 异常抛出 异常抛出 #逻辑回归测试 import pandas as pd from sklearn.linear_model import LogisticRegression as LR filename C:/Users/29463/OneDrive/桌面/bankloan.xls data pd.read_excel(filename) #print(data) x data.iloc[:,:8].values y data…

实现带标题的ListView

在一些项目中&#xff0c;往往有要求为ListView里的内容分类&#xff0c;比如按日期分类&#xff0c;就要把相同日期的项目放在一起。可以看一些示例图&#xff0c;会清楚一些&#xff1a; 以上根据标题来进行分类&#xff0c;实现代码如下&#xff1a; 首先是数据项的模型…

java操作excel表格详解

在日常工作中&#xff0c;对Excel工作表格的操作处理可是多的数不清楚&#xff0c;下面是java语言对其的操作&#xff0c;有需要的小伙伴可以参考下 使用场景 1、将用户信息导出为excel表格&#xff08;导出数据…) 2、将Excel表中的信息录入到网站数据库(习题上传…&#xf…

安卓表格框架-ExcelView

转载请标明来源&#xff1a;安卓表格框架-ExcelView_分享记录-CSDN博客 Github地址&#xff0c;欢迎star&#xff1a;https://github.com/September26/ExcelView 一.项目介绍 项目是仿照WPS中Excel的功能实现的&#xff0c;实现了显示&#xff0c;滑动&#xff0c;编辑等基本…

html表格打印填充分页,window.print()页面打印之表格内容分页填充进行分页打印

windwow.print()用于打印当前窗口的内容,很简便,可当内容特殊并且打印有特殊需求的时候就要绕个圈了。下面是需要打印的表格: 当数据量少的时候像上面的表格一样,中间的内容只有5条数据,打印出来在纸上会有空白,不太好。中间内容是不确定的可能几十条,可能上百条,这样循…

在线表格

在线表格案例 模仿的是腾讯文档 首先观察腾讯文档的表格效果&#xff0c;然后在构建出思路&#xff0c;开始编写代码 效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>在线表格<…

Java获取word表格中的数据

前言: 有时系统中需要提取各种文件中的数据&#xff0c;比如做报表的系统中就常常与Excel表格数据做交互。做Excel报表数据时有选择POI实现的&#xff0c;但是POI功能也很单一&#xff0c;对于文档格式维护性差&#xff0c;最重要的是POI在操作word数据时显得力不从心&#xf…

HTML 表格元素

表格元素 在日常生活中&#xff0c;我们对表格已经非常熟悉了&#xff0c;表格的基本作用是用来存放数据&#xff0c;它是数据的二维容器&#xff0c;人们常常用它来记录财务数据、列车时刻表、电视节目单等。 大多数情况下&#xff0c;表格都是由列标题或行标题&#xff0c;…

Bootstrap3 表格样式

表格 HTML表格是数据的二维容器&#xff0c;它的基本作用是用来存放数据。表格能够清晰、直观地描述数据间的逻辑关系&#xff0c;如果借助CSS设计表格的样式&#xff0c;阅读数据将会变得更轻松。 表格结构包括众多标签&#xff0c;这些标签各司其职&#xff0c;共同完成二维…

数据库表格查询

1、数据库表示存储数据中所有数据的对象&#xff0c;在表中&#xff0c;数据按行和烈格式逻辑组织&#xff0c;类似于电子表格&#xff0c;数据库是SchoolMangeSystem&#xff0c;使用数据库表是SYS_Student&#xff0c;如下图&#xff1a; select字段列表&#xff0c;字段别名…

html中标题距离顶部距离,版式设计中标题间距的使用法则

主标题与副标题定义 主标题是文案的核心主旨&#xff0c;可以直接表达&#xff0c;也可以含蓄表达&#xff0c; 副标题是对对主标题意思的具体阐释&#xff0c;或者主标题意思的进一步延伸。 字距与行距 横向的字间距与纵向的行间距的关系&#xff1a; 请保持行间距的高度&…

表格解析 概览

表格解析发展至今&#xff0c;仍然是一项很年轻的研究领域&#xff0c;出现了大量解决方案&#xff0c;常用的技术包括&#xff1a;线检测、box检测、分割、多模态融合、GCN、img2seq。以下按我的理解梳理一下表格解析各个流派&#xff0c;从中了解这项任务背后所采用的技术。在…

5.让表格的标题在滚动表格时一动不动

一、冻结首行首列 处理数据量较大的表格时&#xff0c;向下拖动滚动条&#xff0c;表格的标题栏就不见了&#xff0c;用户在查看数据时&#xff0c;需要来回拖动滚动条才能看到标题&#xff0c;那么是否可以将表格设置成无论怎样滚动表格&#xff0c;标题都始终显示呢&#xf…

python表格控件_python表格控件

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! pyqt5表格控件qtableview简介在通常情况下,一个应用需要和一批数据进行交互,然后以表格的形式输出这些信息,这时就需要用到qtableview类了,在qtableview中可…

element-ui(vue)表格的自定义标题,逻辑判断

<el-table :data"tableData" style"width: 100%" border><el-table-column width"180"><!-- 自定义标题--><template slot"header"><i class"el-icon-time"></i><span>自定义标题…