• WebRTC学习笔记五 SDP(Session Description Protocol)


    SDP里面内容虽然很多,但是条理很清楚。SDP值为字符串,通过换行符生成一行一行的SDP报文,所有行可分为三类:全局行、音频行、视频行

    • v - Version,版本,版本,应等于0

    • o - Origin,源,包含一个唯一ID,用于重新协商

    • s - Session Name,会话名称,应等于-

    • t - Timing,时间,应等于0 0

    • m - Media Description,媒体描述,下面有详细说明

    • a - Attribute,属性,一个自由文本字段,这是WebRTC中最常见的行

    • c - Connection Data,连接数据,应等于IN IP4 0.0.0.0

    一、全局行

    v=0

    sdp版本号,一直为0,rfc4566规定

    o=- 7017624586836067756 2 IN IP4 127.0.0.1

    o=     

    各字段含义如下:

    • username:发起者的用户名,不允许存在空格,如果应用不支持用户名,则为-。

    • sess-id:会话id,由应用自行定义,规范的建议是NTP(Network Time Protocol)时间戳。

    • sess-version:会话版本,用途由应用自行定义,只要会话数据发生变化时(比如编码),sess-version随着递增就行。同样的,规范的建议是NTP时间戳。

    • nettype:网络类型,比如IN表示Internet。

    • addrtype:地址类型,比如IP4、IV6

    • unicast-address:域名,或者IP地址。

    s=

    会话名,没有的话使用 - 代替

    t=0 0

    它给出了开始和结束时间。 当它们被设置为0时,意味着会话不受特定时间限制,换句话说,它在任何时候都是永久有效的。

    a=group:BUNDLE audio video

    BUNDLE分组建立了SDP中包含的几个媒体线之间的关系,通常是音频和视频。在WebRTC中,它用于在相同的RTP会话中复用多个媒体流。 在这种情况下,浏览器提供多路复用音频和视频,但另一方也必须支持和接受。 如果没有这一行,音视频,数据就会分别单独用一个udp端口来发送

    a=msid-semantic: WMS h1aZ20mbQB0GSsq0YxLfJmiYWE9CBfGch97C

    WMS是WebRTC Media Stream简称,这一行定义了本客户端支持同时传输多个流,一个流可以包括多个track, 一般定义了这个,后面a=ssrc这一行就会有msid,mslabel等属性

    二、视频行

    2.1 媒体描述

    m=video 60372 UDP/TLS/RTP/SAVPF 100 101 116 117 96

    m=video说明本会话包含音频,60372代表视频使用端口60372来传输,但是在webrtc中一现在一般不使用,如果设置为0,代表不传输音频, UDP/TLS/RTP/SAVPF是表示用户来传输视频支持的协议,udp,tls,rtp代表使用udp来传输rtp包,并使用tls加密SAVPF代表使用srtcp的反馈机制来控制通信过程, 后台100 101 116 117 96表示本会话视频支持的编码。

    m=    ...

    【学习地址】:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
    【文章福利】:免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~
      

    其中:

    • media:媒体类型。包括 video、audio、text、application、message等。

    • port:传输媒体流的端口,具体含义取决于使用的网络类型(在c=中声明)和使用的协议(proto,在m=中声明)。

    • proto:传输协议,具体含义取决于c=中定义的地址类型,比如c=是IP4,那么这里的传输协议运行在IP4之上。比如:

      • UDP:传输层协议是UDP。

      • RTP/AVP:针对视频、音频的RTP协议,跑在UDP之上。

      • RTP/SAVP:针对视频、音频的SRTP协议,跑在UDP之上。

    • fmt:媒体格式的描述,可能有多个。根据 proto 的不同,fmt 的含义也不同。比如 proto 为 RTP/SAVP 时,fmt 表示 RTP payload 的类型。如果有多个,表示在这次会话中,多种payload类型可能会用到,且第一个为默认的payload类型。 举例,下面表示媒体类型是视频,采用SRTP传输流媒体数据,且RTP包的类型可能是122、102...119,默认是122。

    m=video 9 UDP/TLS/RTP/SAVPF 122 102 100 101 124 120 123 119

    对于 RTP/SAVP,需要注意的是,payload type 又分两种类型:

    举例,下面的SDP中:

    • 对于audio,111 是动态类型,表示opus/48000/2

    • 对于video,122 是动态类型,表示H264/90000

    1. m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 126
    2. a=rtpmap:111 opus/48000/2
    3. m=video 9 UDP/TLS/RTP/SAVPF 122 102 100 101 124 120 123 119
    4. a=rtpmap:122 H264/90000

    2.2 连接数据(c=)

    c=IN IP4 217.130.243.155

    c=  

    每个SDP至少需要包含一个会话级别的c=字段,或者在每个媒体描述后面各包含一个c=字段。(媒体描述后的c=会覆盖会话级别的c=)

    • nettype:网络类型,比如IN,表示 Internet。

    • addrtype:地址类型,比如IP4、IP6。

    • connection-address:如果是广播,则为广播地址组;如果是单播,则为单播地址;

    举例01:

    c=IN IP4 224.2.36.42/127
  • 相关阅读:
    【润学】计算机网络八股文英文版(2)
    CTF 全讲解:[SWPUCTF 2021 新生赛]Do_you_know_http
    测试与FastAPI应用数据之间的差异
    Games101
    推荐一款免费的内网穿透工具ngrok
    CSS实现围绕按钮边框转圈的光线效果
    VideoPlayerWithOpenCVForUnityExample
    MOS管和IGBT区别,一看就懂
    软件开发中,做好需求管理,这4点很关键。
    深度学习之路=====11=====>>ShuffleNet(tensorflow2)
  • 原文地址:https://blog.csdn.net/irainsa/article/details/128116199