EasyDarwin开源社区流媒体视频课程:流媒体传输控制协议(RTSP RTP SDP)详解之sdp
视频课程及相关文档代码地址:https://github.com/EasyDarwin/Course#course-3
SDP协议
一、SDP协议介绍
SDP 完全是一种会话描述格式(对应的RFC2327 ,
RFC4566, )
― 它不属于传输协议 ― 它只使用不同的适当的传输协议,包括会话通知协议(SAP)、会话初始协议(SIP)、实时流协议(RTSP)、MIME 扩展协议的电子邮件以及超文本传输协议(HTTP)。SDP协议是也是基于文本的协议,这样就能保证协议的可扩展性比较强,这样就使其具有广泛的应用范围。SDP 不支持会话内容或媒体编码的协商,所以在流媒体中只用来描述媒体信息。媒体协商这一块要用RTSP来实现.
流媒体协议sdp信息,附带在describe报文中有rtsp服务端发出,主要目的,告之会话的存在和给出参与该会话所必须的信息,sdp会话完全是文本形式,采用UTF-8编码的ISO 10646字符集
sdp描叙符包括:
- 会话名和目的
- 会话激活的时间区段
- 构成会话的媒体
- 接收这些媒体所需要的信息(地址,端口,格式)
- 会话所用的带宽信息
- 会话负责人的联系信息
媒体信息包括:
- 媒体类型(视频,音频等)
- 传送协议(RTP/UDP/IP H.320等)
- 媒体格式(H,264视频,MPEG视频等)
- 媒体地址和端口
二、SDP协议格式
SDP描述由许多文本行组成,文本行的格式为<类型>=<值>,<类型>是一个字母,<值>是结构化的文本串,其格式依<类型>而定。
<type> = < value > [CRLF]
type: 该字节为单字节(如: v,o, m等)区分大小写,=号俩侧部允许有空格
value: 为结构化文本串
会话描叙格式介绍
| 名称 | 格式: | 说明 |
|---|---|---|
| 协议版本: | v=0 | 给出sdp的版本号,目前为0版本,无子版本号 |
| 会话源 | o=(用户名)(会话标识)(版本)(网络类型)(地址类型)(地址) | 如果不存在用户登录名,该字段标志位“-” 会话标识为一随机数字串 版本为该会话公告的版本 \r\n 网络类型为文本串, \n “IN”表示internet 地址类型为文本串,目前定义为“IP4”和“IP6”两种地址 |
| 会话名: | s=(会话名) | 每个会话描述必须只有一个会话名 |
| 会话信息: | i=(会话信息) | 此字段并非必须,建议包括进来用于描叙相应会话文字性说明,每个会话描叙最多只能有一个 |
| URL:: | u=(URL) | 此字段并非必须,提供url的描叙信息 |
| 连接数据: | c=(网络类型)(地址类型)(连接地址) |
时间描述
- t = (会话活动时间)
- r = * (0或多次重复次数)
媒体描述
- m = (媒体名称和传输地址)
- i = * (媒体标题)
- c = * (连接信息 — 如果包含在会话层则该字段可选)
- b = * (带宽信息)
- k = * (加密密钥)
- a = * (0 个或多个会话属性行)
m描叙行:
格式: m=(媒体)(端口)(传送层)(格式列表)
媒体类型:音频(audio),视频(video),应用,数据和控制
端口:媒体传送层端口
传送层:ip4上大多基于rtp/udp上传送(RTP/AVP)IETF RTP协议,在udp上传输
格式列表: 对应对应的音频负载类型(PT)m=video 0 RTP/AVP 96
a描叙行:
格式:a=rtpmap:(净荷类型)(编码名)/(时钟速率)【/(编码参数)】
a=control:(音/视频连接信息)
a=control:rtsp://192.168.1.197/h264stream0/trackID=0a=rtpmap:96 H264/90000
三、SDP协议例子
v=0
o=StreamingServer 3677033027 1437537780000 IN IP4 192.168.1.44
s=\demo.mp4
u=http:///
e=admin@
c=IN IP4 0.0.0.0
b=AS:1398
t=0 0
a=control:*
a=x-copyright: MP4/3GP File hinted with GPAC 0.5.0-rev4065 (C)2000-2005 - http://gpac.sourceforge.net
a=range:npt=0- 216.52167
m=video 0 RTP/AVP 96
b=AS:1242
a=3GPP-Adaptation-Support:1
a=rtpmap:96 H264/90000
a=control:trackID=65536
a=fmtp:96 profile-level-id=42000A; packetization-mode=1; sprop-parameter-sets=Z0IACpZUBQHogA==,aM44gA==
a=framesize:96 640-480
m=audio 0 RTP/AVP 97
b=AS:156
a=3GPP-Adaptation-Support:1
a=rtpmap:97 mpeg4-generic/48000/1
a=control:trackID=65537
a=fmtp:97 profile-level-id=41; config=1188; streamType=5; mode=AAC-hbr; objectType=64; constantDuration=1024; sizeLength=13; indexLength=3; indexDeltaLength=3
| 视频”a=fmtp”字段的解析 参考 RFC3984的8.2节 |
|---|
| 音频config描述符的解析 参考 RFC 3016 |
获取更多信息
Copyright © EasyDarwin.org 2012-2016

EasyDarwin开源社区流媒体视频课程:流媒体传输控制协议(RTSP RTP SDP)详解之sdp的更多相关文章
- 我们将要建立的EasyDarwin开源社区
从12年12月我开始建立EasyDarwin开源项目,已经三年多的时间了,从开始最简单的一个开源流媒体服务器项目,如今已经发展成为目前国内最大的一个流媒体开源社区,截至目前已经有十几个项目在Githu ...
- EasyDarwin开源社区 短视频拍摄项目Github地址
在前面的几篇博客中,我们提到了EasyDarwin开源团队整理出来的短视频拍摄技术要点,这次我们将短视频技术及SDK整理成一个完整的Github项目进行长期维护,同时会支持安卓Android和IOS版 ...
- 【视频开发】ONVIF、RTSP/RTP、FFMPEG的开发实录
ONVIF.RTSP/RTP.FFMPEG的开发实录 前言 本文从零基础一步步实现ONVIF协议.RTSP/RTP协议获取IPC实时视频流.FFMPEG解码.开发环境为WIN7 32位 + VS201 ...
- 开源社交系统ThinkSNS v4.6.1更新日志及功能详解!
ThinkSNS 开源社交系统 v4.6.1更新日志 [修复]聊天无法使用emoji问题 [修复]后台禁用用户后,app第三方登录可登录问题 [修复]部分接口问题 [修复]h5个人中心获取用户信息问题 ...
- 短视频 SDK 6大功能技术实现方式详解
第三方短视频解决方案作为快速切入短视频行业的首选方式,选择一款功能齐全.性能优异的短视频解决方案十分重要. 今天我们来谈谈短视频 SDK 6大重要功能点及其技术实现方式. 短视频拍摄 断点续拍 指在拍 ...
- Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解
转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/26810303),请尊重他人的辛勤劳动成果,谢谢! 本篇文章 ...
- moviepy音视频开发:音频剪辑基类AudioClip详解
☞ ░ 前往老猿Python博文目录 ░ 一.背景知识介绍 1.1.声音三要素: 音调:人耳对声音高低的感觉称为音调(也叫音频).音调主要与声波的频率有关.声波的频率高,则音调也高. 音量:也就是响度 ...
- 开源工作流程引擎ccflow多人待办处理模式的详解
多人待办工作处理模式,也是待办处理模式.是当接受的节点是多个人的时候,如何处理待办? 根据不用的场景,ccbpm把多人在普通节点下的处理模式分为如下几种. 抢办模式: A发送到B ,B节点上有n个人可 ...
- hibernate课程 初探单表映射2-6 session详解(下)
本节主要内容: 1 介绍了getCurrentSession和opensession的区别 2 demo:通过打印比较两个session是否相同,验证两个session是否是同一session 3 d ...
随机推荐
- windows下webrtc的编译 2016(转)
====================20160124更新============================= 推荐一个FQ工具,shadowsocks,是需要付费的,一年也才不到100块,移 ...
- npm 安装出现 UNMET DEPENDENCY 的解决方案
npm imuzhicloud@0.2.2 E:\com\muzhicloud_make_web+-- UNMET PEER DEPENDENCY react@15.4.2+-- react-dnd@ ...
- 焦作F Modular Production Line 费用流
题目链接 题解:这道题比赛的时候,学弟说是网络流,当时看N这么大,觉得网络流没法做,实际本题通过巧妙的建图,然后离散化. 先说下建图方式,首先每个覆盖区域,只有左右端点,如果我们只用左右端点的话,最多 ...
- HDU 3068 Manacher
题目链接:http://hdu.hustoj.com/showproblem.php?pid=3068 今天学习一下马拉车算法,虽然mg讲过,但是没有系统去学. 算法学习:参考博客 马拉车模板题. # ...
- Oracle内部latch获取函数简介
标签: oracle call 函数 oracle statpack 转自: http://blog.51cto.com/458302/998775 Oracle的内部函数一直非常神秘,其 ...
- mybatis学习网站
http://www.mybatis.org/mybatis-3/zh/index.html
- 投资人王刚口述:滴滴如何用八十万成为百亿美金公司? zz
作者|李好福布斯杂志中文版采编 阿里巴巴前高管.滴滴打车天使投资人王刚近日在杭州接受了<福布斯>独家专访,讲述了集齐“阿里的人.百度的技术.腾讯的钱”的滴滴如何从八十万启动资金,在三年内成 ...
- Examples osgparticleshader例子学习
Examples osgparticleshader 粒子与shader的使用 参考文档 http://blog.csdn.net/csxiaoshui/article/details/234345 ...
- Linq查询满足条件记录集
通过linq查询datatable数据集合满足条件的数据集 1.首先定义查询字段的变量,比方深度 string strDepth=查询深度的值: var dataRows = from datarow ...
- Ubuntu切换至root错误:su:Authentication failure解决
当前用户切换到root出现这个错误的原因是没有创建root用户,解决如下: 1.打开终端,输入命令sudo passwd root 会提示输入新的用户密码,输入后会再确认一次,成功后会显示:passw ...