h264和h265视频流SDP描述详解

文章目录

  • h264和h265视频流SDP描述详解
    • 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协议包含会话层和媒层,具体字段释义如下表:

属性名 描述 是否必选 备注
v SDP协议版本号,默认为0 版本一般默认是0
o 会话所有者标识(originator and session identifier) o=<用户名> <session id> <会话版本> <网络类型><地址类型> <地址>
s 会话名称 本次会话的名称
e email地址 一般不用
b b=AS:可用贷款 参数说明服务端本次流最大可用带宽
t 会话活动时间 (time the session is active) 会话的起始时间和结束时间,无起止时间要求,可都赋值为0,如果是录像回放,可赋值npt时间
c 数据连接描述 c=<networktype> <address type> <connection address>,如果在媒体描述中存在,会话层可不用
r 重复次数 一般不用
z 时区适配 一般不用
k 密钥 一般不用
a 会话附件属性,根据附件内容确定其意义 媒体描述层有很多附件属性定义
m 媒体描述,此属性后直到下一个m出现都属于m的属性描述 视频会话时,必选

在视频流中,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;,具体扩展含义,可以自定义,只要客户端和服务器规定一致即可。

h264和h265视频流SDP描述详解相关推荐

  1. H264码流RTP封装方式详解

    H264码流RTP封装方式详解 文章目录 H264码流RTP封装方式详解 1 H264基本概念 2 NALU Header介绍 3 RTP封装H264码流 3.1 单一NALU模式 3.2 组合帧封装 ...

  2. 【H264/AVC 句法和语义详解】(二):h264码流格式与NALU详解一

    上一篇中,我们站在句法元素(或称语法元素)的角度,介绍了H.264的句法和语义,和句法元素的分层结构.在这篇中,我们更进一步,从比特的角度出发,来探索h264码流的组成.通过这篇的学习,我们会初步具备 ...

  3. 音视频SDP协议详解(描述会话的协议)

    前言 ①SDP协议是会话描述协议(Session Description Protocol)的缩写,是一种会话描述格式,一种描述流媒体初始化参数的格式,为描述多媒体数据而设计. 文末卡片领取音视频免费 ...

  4. WebRTC进阶-SDP协议详解

    文章目录 SDP结构 会话描述 会话创建者o 媒体描述 媒体信息 音频媒体信息 a=rtpmap a=fmtp 视频媒体信息 SSRC与CNAME PlanB与UnifiedPlan 网络描述 a=c ...

  5. 音视频压缩:H264码流层次结构和NALU详解

    问题背景: 前面在讲封装格式过程中,都有一个章节讲解如何将H.264的NALU单元如何打包到TS.FLV.RTP中,解装刚好相反,怎么从这些封装格式里面解析出一个个NALU单元.NALU即是编码器的输 ...

  6. Linux下视频流媒体服务器搭建详解理论

    目标用于搭建内网流媒体服务器支持视频的点播. 背景 用于支持培训网站中视频点拨功能,在培训网站总体方案中需要加入流媒体服务器,用于存储和传输视频资源. 相关概念 流媒体 流媒体(Streaming M ...

  7. H265码流分析详解

    一.HEVC的码流格式定义: 根据<T-REC-H.265-201504-I!!PDF-E>协议描述. 字节流格式由字节流NAL 单元语法结构序列构成.每一字节流NAL 单元语法结构包含有 ...

  8. 基于正交投影的点云局部特征描述详解

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本次介绍一个发表于Pattern Recognition的经典三维点云描述子TOLDI,首先进行算法阐 ...

  9. sps和pps一篇好的解释 H264码流中SPS PPS详解<转>

    https://blog.csdn.net/luzubodfgs/article/details/86775940 H264码流中NALU sps pps IDR帧的理解 https://blog.c ...

  10. 流媒体协议之RTSP详解

    1 流媒体协议之RTSP详解 文章目录 1 流媒体协议之RTSP详解 1.1 RTSP概述 1.2 RTSP协议交互过程 1.2.1 RTSP基于TCP交互过程 1.2.2 RTSP基于HTTP的交互 ...

最新文章

  1. SEO研究:网站结构
  2. squid在企业网中的应用
  3. paip.http 404错误 的解决
  4. python调用有道词典_菜鸟上手Python最有野心的库Asyncio
  5. webapck将css 打包后单独提取到一个css文件中
  6. Linux驱动基础:MSM平台AP/CP通信机制
  7. MasterPage事件使用
  8. 求只有2,3,5组成的第n小个数字
  9. 房贷利率不断上涨,贷款买房如何才能节省利息?
  10. 【华为云技术分享】漫谈LiteOS-端云互通组件-MQTT开发指南(上)
  11. Android 系统(271)---进程、守护进程的实现及进程拉活
  12. 【繁琐工作自动化】pandas 处理 excel 文件
  13. python如何请求curl_Python爬虫偷懒神器 —— 一键构造请求头!
  14. Distinct去除集合中的重复项GetHashCode方法没有返回obj.GetHashCode()导致出错
  15. activiti5 工作流
  16. Cmder安装并解决cmder here报错问题
  17. 嵌入式系统上电,程序的运行过程
  18. 面经-腾讯前端开发工程师
  19. linux哪个版本支持tipc,TIPC协议和实现解析
  20. css实现固定的图片比例

热门文章

  1. ubuntu20.04下的录屏与视频剪辑软件
  2. 学习halcon的论坛与书籍
  3. Linux系统下Java程序读取配置文件
  4. 基于python的图书管理系统设计与实现论文_基于JAVA的图书馆管理系统设计[毕业论文_].doc...
  5. python pandas中文手册-Pandas速查手册中文版(转)
  6. u盘ios刻录_用UltraISO刻录U盘安装系统
  7. 注册测绘师学习笔记(二)
  8. 注册测绘师学习笔记7
  9. python中的对象有哪些_python中的对象
  10. Opencv之Meanshift和Camshift