rfc4566의 내용을 기반으로 SDP에 대한 내용을 정리한 문서입니다.
Introduction
SDP (Session Description Protocol)은 미디어 스트리밍에서 초기화를 위해 필요한 파라미터 협상을 위해 사용되는 프로토콜이다. SDP의 순수한 session description의 형식으로 어떻게 전달하는지에 대해서는 따로 기술하지 않는다. 때문에 SAP(Session Announcement Protocol)을 써도 되고 SIP(Session Initiation Protocol)을 사용해도 되며 RTSP(Real Time Streaming Protocol), HTTP등 다양한 전송 프로토콜을 사용해도 된다. 한편 SDP가 범용적인 용도로 사용되지만 session content 협상이나 media encoding 협상은 지원하지 않는다.
SDP의 사용
- SDP는 internetwork환경을 가정하고 만들어 졌지만 다른 network환경에서 사용해도 된다.
- SDP를 1:1환경이 아닌 multicast session으로 사용한다면 크게 두 가지 목적으로 사용한다.
- 세션이 있음을 알리는데 사용
- 세션에 참여할 수 있도록 초기화 파라미터를 전달하는데 사용
SDP 세션의 구성 요소
- 세션 이름 및 목적
- 세션이 활성화된 시간
- 세션을 구성하는 미디어
- 해당 미디어를 수신하는데 필요한 정보(addresses, ports, formats, etc.)
세션에 참가하기 위한 자원에 제한이 있을 수 있기에 다음과 같은 추가정보가 필요할 수 있다
- 세션에서 사용할 대역폭에 대한 정보
- 세션 담당자의 Contact Information
Media and Trasport Information
SDP session description은 다음과 같은 media information을 포함한다.
- media의 종류 (video, audio, etc.)
- transport protocol (RTP/UDP/IP, H.320, etc.)
- media의 format (H.261 video, MPEG video, etc.)
media format 및 transport protocol에 더해서 SDP는 address와 port에 대한 정보도 전달한다.
IP multicast session의 경우에 다음과 같다
- media의 multicast 그룹 주소
- media의 transport port
unicast IP session에서는 다음과 같은 정보가 전달된다.
- media의 원격 주소
- media의 transport port
Timing Information
시간정보와 관련하여 SDP는 다음과 같은 정보를 전달할 수 있다.
- media가 시작되고 정지된 시간에 대한 list정보 (session bound)
- 각 session bound에 대해서 반복되는 시간 ex.) 매주 수요일 오전 10시에 한시간 시간 정보는 지역 또는 섬머타임과 관계없이 일관성을 가진다.
Private Sessions
SDP자체는 private과 public session을 구분하지 않지만, transport protocol을 어떤 것을 사용할지에 따라서 private session이 지원가능하다. private session으로 SDP를 이용한다면 media의 encryption key를 전달하는 용도 사용가능하다.
Obtaining Further Information about a Session
session에 대한 추가 정보 제공을 위해서 URI를 포함할 수 있다.
Categorisation
SAP나 다른 advertisment mechanism에 의해 다수의 session desciption이 배포될 때 session announcement를 필더링 하는 기능이 필요하다. SDP는 자동화할 수 있는 세션에 대한 분류 메커니즘을 지원한다.
Internationalisation
SDP는 UTF-8에서 ISO 10646 set을 사용하도록 권장된다. (ISO 8859-1을 사용해도 된다). 다양한 언어 사용은 free-text field에만 적용이되며 SDP 전체에는 적용되지 않는다.
SDP Specification
media type은 “application/sdp”이다. SDP session description은 전부 UTF-8에 ISO 10646를 사용하고 있다. SDP field이름과 attribute 이름은 UTF-8의 subset인 US-ASCII만을 사용하지만, textual field나 attribute 값은 ISO 10646을 사용할 수도 있다.
SDP session description은 다음과 같은 텍스트 형태가 여러줄 있는 형태로 이루어진다.
<type>=<value>
- <type>은 대소문자를 구별한 하나의 알파벳으로 이뤄지며 <value>는 type dependent한 형식으로 쓰여진다.
- 일반적으로 <value>는 공백으로 구분된 필드 혹은 free format string이며 특별한 정의가 없는 이상 대소문자는 구분된다.
- = 양끝에는 공백이 존재하면 안된다.
SDP session description은 session-level section과 0개 이상의 media-level section으로 이루어져 있다. session-level 은 “v=”으로 시작하며 이후 media-level section이어진다. 각 media-level section은 “m=”으로 시작되며 다른 media-level section으로 이어지거나 section이 끝난다. 일반적으로 session-level 값들은 media-level 값으로 덮어써지지 않는 이상 기본값을 가진다.
몇몇 라인은 필수로 적어야하고 몇몇 라인은 선택 사항이지만 반드시 아래와 같은 순서로 작성되어야 한다.
Session description
v= (protocol version)
o= (originator and session identifier)
s= (session name)
i= (session information) OPTIONAL
u= (URI of description) OPTIONAL
e= (email address) OPTIONAL
p= (phone number) OPTIONAL
c= (connection inforamtion -- 모든 미디어에 포함되어 있으면 요구되지 않는다) OPTIONAL
b= (zero or more, bandwidth infomation lines) OPTIONAL
One or more time descriptions ("t=" and "r=" lines)
z= (time zone adjustments) OPTIONAL
k= (encryption key) OPTIONAL
a= (zero or more, session attribute lines) OPTIONAL
Zero or more media descriptions
Time description
t= (time the session is active)
r= (zero or more repeat times) OPTIONAL
Media description, if present
m= (media name and transport address)
i= (media title) OPTIONAL
c= (connection inforamtion -- session level에 있으면 optional) OPTIONAL
b= (zero or more, bandwidth information lines) OPTIONAL
k= (encryption key) OPTIONAL
a= (zero or more media attribute lines) OPTIONAL
적혀진 type값은 의도적으로 한 글자 및 확장 불가능하도록 설정되어 있다. SDP parser는 이외의 type값이외의 line값은 완전히 무시해야한다. SDP확장을 원한다면 “a=”를 이용하도록 하자. Session description의 “u=”, “k=”, “a=”에 URI를 넣어서 외부 content를 참조하게 할 수 있다. 이런 URI는 몇몇 경우 역참조될 수 있는데, session description을 독립적이지 않을 수 있다. session-level의 “c=” 및 “a=” 정보는 media description에서 재정의 되지 않는 이상 모든 media description에서 적용된다.
Protocol Version (“v=”)
v=0
Session Description Protocol의 version으로 minor version number는 없다.
Origin (“o=”)
o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
<username> host에 대한 user login을의미, host가 user ID를 지원하지 않는다면 “-“ 값을 가진다. 공백은 포함되지 않는다.
<sess-id> 는 numeric string으로 tuple of <username>, <sess-id>, <nettype>, <addrtype>, <unicast-address> tuple이 global하게 unique한 식별자가 되게 한다. <sess-id>를 할당하는 방법은 creating tool에 따라 다르지만 NTP (Network Time Protocol)을 사용하도록 제안되어있다.
<sess-version> session description에 대한 version number이다. 사용여부는 creating tool에 따라 다르며 다시말하자면 NTP format timestamp가 사용되도록 권장된다.
<nettype> network type에 따라 주어지는 text string이다. 초기값으로 “IN”이 설정되며 “Internet”을 의미한다. 다른 값이 등록될 수도 있다.
<addrtype> address type에 대한 text string이다. “IP4”나 “IP6”가 초기값으로 정의되지만 다른 값이 등록될 수도 있다.
<unicast-address> session이 만들어진 machine에 대한 주소값이다. IP4의 경우에는 도메인 이름이거나 일반적인 ip주소(xxx.xxx.xxx.xxx)로 표현된다. IP6도 이와 같이 도메인 이름이거나 IP6 주소로 표현된다. IP4, IP6 둘다 도메인 이름을 사용하는 것이 권장된다. local IP addresss는 SDP description이 의미 있는 범위를 벗어날 수 있기 때문에 권장되는 사항은 아니다.
일반적으로 “o=” 필드는 unique identifier의 역할을 하며, version을 제외한 나머지 sub field는 수정없이 세션을 식별하는데 사용된다. 한편 개인 정보 보호를 위한 이유로 사용자이름과 IP주소를 난독화 하는 과정이 필요할 수 있다. 이런 경우 임의의 <username>과 <unicast-address>를 설정함으로써 “o=” 필드를 채우면 된다.
Session Name (“s=”)
s=<session name>
”s=” 필드는 text형태의 session name이다. session description마다 반드시 하나의 “s=”필드만이 존재해야한다. “s=” 필드는 빈 값으로 두면 안되며 되도록 ISO 10646 을사용하도록 한다. session에 딱히 의미 있는 이름이 업사면 “s= “를 사용하도록 권장된다.
Session Information (“i=”)
i=<session description>
“i=”필드는 session에 대한 text형태의 정보를 제공한다. session-level 혹은 media description당 최대 한개의 “i=” 필드 만이 허용된다. “a=charset”의 내용에 따라 “i=”필드에서 사용되는 character set이 결정되며 만약 “a=charset” 값이 없을 경우 “i=” 필드는 반드시 UTF-8의 ISO 10646 character를 사용해야한다.
“i=”필드가 media definition에 사용될 경우에는 media stream 라벨링으로 사용된다. single session에 여러 media stream이 있을 경우에 유용하게 쓰인다.
URI (“u=”)
u=<uri>
URI는 WWW client가 사용하는 Uniform Resource Identifier이다. session에 대한 추가적인 정보를 주고자 제공된다. OPTIONAL하지만 사용될 경우 반드시 media field 전에 존재해야한다. session description당 둘 이상의 URI field는 허용되지 않는다.
Email Address and Phone Number (“e=” and “p=”)
e=<email-address>
p=<phone-number>
“e=”와 “p=”는 conference 담당자에 대한 연락처를 제공한다.
이전 SDP표준에서는 이를 반드시 명시할 것으로 규정되어 있었으나 작성되지 않는 경우가 흔하여 OPTIONAL로 변경되었다. 값이 있다면 media field 이전에 존재해야한다. 여러줄을 작성하는 것도 가능하다.
전화번호는 +로 시작하는 국제 번호를 사용해야하며, 가독성을 위해 공백이나 “-“사용이 가능하다.
“i=”필드와 마찬가지로 “a=charset”에 따라 사용되는 character set이 달라지며 없으면 UTF-8의 ISO-10646을 사용하는 것이 권장된다.
Connection Data (“c=”)
c=<nettype> <addrtype> <connection-address>
“c=”필드는 connection data를 포함한다.
session description은 적어도 “c=” 필드를 각 media description에 다 포함시키거나 session level에 가지고 있어야 한다. session-level에 “c=”필드가 있고 media description에도 “c=”가 존재할 경우 후자로 덮어쓰여진다.
<nettype>은 network type을 의미하며 초기값으로 “INTERNET”을 의미하는 “IN”이 설정되어 있다.
<addrtype> 는 address type으로 SDP가 IP base가 아닌 session에서도 사용할 수 있게 해준다. IP4, IP6값을 사용하지만 다른 값도 사용이 가능하다.
<connection-address>는 connection address로 이 값은 addrtype의 값에 따라서 connection이후에 추가될 수 있다. <addrtype>이 IP4혹은 IP6의 값을 가지고 있을 때 connection address는 다음과 같이 정의된다.
-
session이 multicast일 경우 connection address는 IP multicast 그룹의 주소가 된다. session이 multicast가 아닌 경우 다른 필드에 의해 결정된 data source, data relay 혹은 data sink의 unicast IP주소가 포함된다. unicast 주소가 multicast 알림에 의해 전달되는 경우가 금지된 사항은 아니지만 그렇게 예상되는것도 아니다.
-
IPv4 multicast connection address 사용하는 sessiond은 반드시 multicast 주소에 더해서 TTL(time to live) 을 가져야한다. TTL과 address는 conference에서 전송되는 packet의 범위를 정의한다. TTL값은 0-255의 범위를 가져야 한다. TTL을 지정하는 것은 필요하지만, multicast 트래픽 범위 지정의 용도로의 사용은 deprecated됐다. application은 대신에 지정된 범위 주소를 사용해야 한다.
TTL은 다음과 같이 “/”를 구분자로 사용해서 IP와 구분한다.
ex : c=IN IP4 224.2.36.42/127
IPv6 multicastsms TTL을 사용하지 않으므로 IPv6 multicast에서는 존재해서 안된다. IPv6 에서는 scoped address 가 쓰여지며 이에 의해 conference의 범위가 제한될것으로 예상된다.
Hierarchical 혹은 layered encoding 방식은 single media source가 여러 개수의 layer로 나뉘는 data stream이다. 이 layer의 subset만을 선택함으로써 원하는 품질의 media를 선택 할 수 있다. 이렇게 계층화된 인코딩은 일반적으로 multicast를 가지치기하는 단계에서 여러 multicast group으로 전송된다. 이 기술은 특정 quality의 media만 필요하는 사이트에서는 원치 않는 트래픽을 만든다. 여러 multicast group을 사용하는 경우 다음과 같은 notation을 통해 connection address를 나타낸다.
<base multicast address>[/<ttl>]/<number of addresses>
c=IN IP4 224.2.1.1/127/3
위와 같은 경우 224.2.1.1, 224.2.1.2, 224.2.1.3 세 개의 address가 127의 TTL값을 가지고 사용된다. “c=” 를 여러줄 쓰는 것도 같은 효과를 가진다. 위 표현은 아래 표현과 동일하다.
c=IN IP4 224.2.1.1/127/3
c=IN IP4 224.2.1.2/127/3
c=IN IP4 224.2.1.3/127/3
Bandwidth (“b=”)
b=<bwtype>:<bandwidth>
session혹은 media에서 제안하는 bandwidth를 나타낸다. <bwtype>는 <bandwidth>가 무슨 의미를 가지는지 나타내는다. 두개의 값이 보통 사용되며 다른 값이 추가될 수도 있다.
-
CT : session 또는 media의 bandwidth가 implicit bandwidth와 다른 경우 “b=CT:…” 값은 bandwidth의 상한선에 대해 제안한다. 주요 목적은 두개 이상의 session이 동시에 사용가능한지 여부에 대한 대략적인 아이디어를 제공하는 것이다. CT를 RTP와 사용할 때 모든 RTP session의 bandwidth값의 총합을 이 값과 비교해야한다.
-
AS : application에 따라 다르게 해석된다. 보통 application에 설정된 maximum bandwidth와 일치하는 값을 가진다. RTP기반 application의 경우에는 RTP의 session bandwidth값을 가지는데 이에 대한 설명은 rfc4566의 section 6.2를 참고하자
추가적으로 <bwtype>에 prefix로 “X-“를 넣는 경우가 있는데 experimental한 목적으로 쓰인다. 권장되지는 않는 사항이다.
Timing(“t=”)
t=<start-time> <stop-time>
“t=”는 session의 시작과 끝 시간을 나타낸다. session이 불규칙적으로 활성화되는 경우에는 여러개의 “t=”이 형성된다. session이 주기적으로 시작되는 경우에는 “r=”을 사용한다. <start-time>과 <stop-time>에 사용되는 값은 NTP(Network Time Protocol)의 십진수 표현으로 1900을 으로부터 초단위의 시간으로 표현된다. UNIX 시간으로 이를 변경하고자 할 경우 2208988800을 빼면 된다.
<stop-time>이 0으로 설정된 경우 session이 끝나지 않음을 의미한다.
Repeat Times (“r=”)
r=<repeat interval> <active duration> <offsets from start-time>
“r=” field는 반복되는 session을 표현하기 위해 사용된다.
<repeat interval> <active duration> <offsets from start-time> 모두 단위로 초를 사용한다.
표현을 좀 더 간결하기 위해 d,h,m의 단위를 사용하는 경우도 있다
r=604800 3600 0 90000
의 표현은
r=7d 1h 0 25h의 표현과 같으며 이를 해석하면 시작시간과 시작시간 25시간 이후를 기점으로 7일마다 1시간씩 session이 반복됨을 말한다.
Time Zones (“z=”)
z=<adjustment time> <offset> <adjustment time> <offset> ….
repeat session에서 섬머타임을 고려할 경우 base time offset을 변경할 필요가 있기 때문에 사용한다.
z=2882844526 -1h 2898848070 0
위의 경우 2882844526에 session을 1시간 당기고 2898848070에 session을 원래대로 복원한다. 이 변경 사항은 “t=”, “r=” 둘다 적용된다. session이 1년을 넘어 지속될 경우에는 session description에서 몇년간의 수정 사항을 보내기 보다는 “z=”내용을 바꿀 것으로 예상된다.
Encryption Keys (“k=”)
k=<method>
k=<method>:<encryption key>
transport 가 secure channel을 이용해서 이뤄질 경우 이 필드를 이용하여 키 교환을 할 수 있다. 간단하게 key교환을 할 수 있는 방법은 “k=”에 key값을 입력하여 전달하는 것이지만 옛날 구현체에서 많이 사용하며 권장되지 않는 사항이다. SDP를 이용한 새로운 키 교환 방식이 rfc4567, rfc4568에 논의 되고 있으며 새로운 application에서는 이 방식을 사용할 것이라 예상된다.
“k=”필드는 media전에 쓰여지거나 각 media에 대해서 쓰여진다. k의 내용이나 사용 방식에 대해서는 SDP의 상위 프로토콜에서 다룰 내용이므로 다루지 않는다. “k=” 필드는 key와 key를 쓰는 방식에 대해서 기술하고 있는데 다음과 같은 방법으로 정의된다
k=clear:<encryption key>
encryption key가 key field에 변환되지 않은 상태로 쓰여진다. SDP가 secure channel통해 전달되면 이 방법은 절대 쓰여서는 안된다. SDP에서 금지된 문자가 사용된 경우 “k=base64”를 사용한다.
k=base64:<encoded encryption key>
key field의 값은 key를 base64로 encode된 값이다. 위와 마찬가지로 SDP secure channel로 전달되지 않는 이상 사용하면안된다.
k=uri:<URI to obtain key>
Uniform Resource Identifier가 key field에 포함되어있다. URI가 key를 가지고 있는 data를 나타내며 key값을 얻기 전에 추가 authentication을 요구할 수 있다. URI를 통해 받은 response가 key의 encoding에 대해 특정 지을 것이며 URI는 주로 https를 사용한다.
k=prompt
SDP에 key가 포함되지 않지만 session 혹은 media stream이 암호화 되었음을 알린다. session에 참가하고자 할때 참가자에게 key를 묻는 메시지가 표시되어야 하며 사용자가 제공한 키로 media stream을 decrypt하는데 사용한다. 사용자 지정 키는 보안에 취약한 경향이 있어 권장되지 않는다.
Attributes (“a=”)
a=<attribute>
a=<attribute>:<value>
SDP extension을 위해서 사용된다. “session-level”, “media-level”에서 둘다 사용할 수 있다. “media-level” attriute는 media stream에 대한 추가 정보를 제공해 준다. 각각의 media가 아닌 전체 conference와 관련한 추가 정보는 “session-level”에 쓰여진다.
Attribute field는 보통 다음과 같은 두개의 형태를 가진다.
-
“a=<flag>” 형태로 세션 속성에 관련된 값을 가진다. ex.) “a=recvonly”
-
“a=<attribute>:<value>” 형태로 특정 속성에 대한 값을 정한다. ex.) 화이트보드는 다음과 같은 attribute 를 가질 수 있다. “a=orient:landscape”
Attribute에 대한 해석은 사용하는 media tool에 따라 달라진다. 따라서 receiver는 이에 대한 해석을 할 수 있어야한다. Attribute는 반드시 IANA와 함께 등록되어야 하며 receiver가 해석할 수 없는 attribute는 무시된다.
Media Descriptions (“m=”)
m=<media> <port> <proto> <fmt> …
<media>는 media type을 나타낸다. 현재 정의된 값은 “audio”, “video”, “text”, “application”, “message”가 있다.
<port>는 media stream이 전송되는 전송 포트이다. “c=”필드에 지정된 network와 <proto>에 정의된 전송 프로토콜에 따라 port의 의미가 달라진다. media applicatoin에 사용되는 다른 포트(RTCP와 같은 port)는 기본 media port에서 알고리즘적으로 파생되거나 별도의 attribute를 통해 지정될 수 있다. 만약 연속되지 않는 포트가 사용되거나 RTP port는 짝수 RTCP port는 홀수의 parity rule을 따르지 않을 경우 “a=rtcp:” attribute가 반드시 사용되어야 한다. 만약에 <port>의 값이 홀수 이고 “a=rtcp”가 존재하면 RTP를 <port>값으로 보내야하고 RTCP는 a=rtcp속성에 표시된 포트로 보내야만한다.
hierarchicallty encoded stream이 unicast address로 보내진 경우에는 여러개의 transport port를 사용하는 것이 필요할 수 있다. 이런 경우는 “c=” 필드에서 했던 것과 유사한 방법으로 여러개의 port 배정이 가능하다.
m=<media> <port>/<number of ports> <proto> <fmt> …
이런 경우 보통 port는 transport protocol에 dependent한 값을 가진다. RTP의 경우 RTP는 짝수 RTCP는 홀수의 port가 사용된다. 예를 들면,
m= video 49170/2 RTP RTP/AVP 31
위의 경우 49170은 RTP 49171이 RTCP port로 사용된다. RTP/AVP는 transport protocol을 의미하며 31은 format을 의미한다. “c=” 필드에 여러 주소가 지정되고 “m=” 필드에 여러 포트가 지정된 경우 포트에서 해당 주소로의 일대일 매핑이 일반적으로 적용된다.
c=IN IP4 224.2.1.1/127/2
m=video 49170/2 RTP/AVP 31
위와 같은 경우 224.2.1.1은 49170, 49171 port에 mapping되며 224.2.1.2에는 49172 49173이 사용된다.
<proto>는 transport protocol이다. transport protocol의 의미는 “c=”의 address type 필드에 dependent하다. “c=”의 IP4 필드는 IP4위에서 돌아가는 transport protocol을 의미한다. 다음과 같은 값들이 있다.
- udp: UDP위에 protocol이 올라감을 의미
- RTP/AVP : UDP위에 Audio and Video Conference를 위한 RTP Profile이 사용된 RTP를 의미
- RTP/SAVP : UDP위에 sRTP가 사용됐음을 의미
<fmt> 은 media format description을 의미한다. 만약에 <proto>의 값이 “RTP/AVP”이거나 “RTP/SAVP”이면 <fmt>는 RTP payload의 type number를 가진다. 여러개의 type number가 있다면, 각 type number들이 다 쓰일 수 있지만 처음의 값이 default임을 의미한다. dynamic payload의 경우 “a=rtpmap”속성을 통해 RTP payload type number에서 payload의 형식을 식별 할 수 있는 media encoding 이름을 매핑해줘야한다. “a=fmtp” 속성은 format parameter를 지정하는데 사용할 수 있다.
만약 <proto> sub-field 가 “udp”라면 <fmt>는 반드시 “audio”, “video”, “text”, “application”, “message”에 대한 media type에 대해 참조해야한다.
SDP Attributes
다음과 같은 attribute들이 있다.
-
a=cat:<category>
- session category에 대한 설명으로 수신자가 원하지 않는 session을 category를 통해 필터링할 수 있다.
-
a=keywds:<keywords></keywords>
- cat attribute와 비슷하게 receiver원하는 세션인지 판별할 수 있게 도와준다.
-
a=tool:<name and version of tool>
- session description을 만드는데 사용되는 tool의 이름과 버전을 나타낸다.
-
a=ptime:<packet time>
- packet에 있는 media의 시간 길이를 millisecond 단위를 사용하여 알려준다. 보통 audio data에서만 의미가 있다. 없어도 decoding에 문제가 있지는 않다.
-
a=maxptime:<maximum packet time>
- 각 packet에 들어갈 수 있는 media의 최대값을 millicsecond 단위를 사용하여 알려준다.
-
a=rtpmap:<payload type> <encoding name>/<clock rate> </clock></encoding></payload>
- RTP payload type number를 mapping하는데 사용. clock rate이나 encoding parameter에 대한 정보도 제공한다. RTP profile자체가 playload type number와 같은 format을 정의하고 있긴하지만 “a=rtpmap”을 사용하는 것이 더 일반적이다.
-
a=recvonly
-
a=sendrecv
-
a=sendonly
-
a=inactive
- session의 상태를 나타내는 값으로 정의되어 있지 않다면 기본적으로 sendrecv를 사용한다.
-
a=orient:<orientation>
- 일반적으로 whiteboard나 presentation tool에서만 사용된다. screen에서 workspace의 orientation을 나타내는데 사용된다. 사용되는 값은 “portrait”, “landscape”, “seascape” 이다.
-
a=type:<conference type>
- conference의 type에 대한 값으로 제안되는 값은 “broadcast”, “meeting”, “moderated”, “test”, “H332”가 있다.
-
a=quality:<quality>
- encoding quality에 대한 값. 0-10의 값을 가지며 default는 5이고 숫자가 높을 수록 quality가 높아진다.
-
a=fmtp:<format> <format specific parameters>
- 특정 format에 specific한 parameter 허용을 위해 사용된다.