SIP - แบบจำลองข้อเสนอ / คำตอบ
การใช้ SDP กับ SIP มีให้ในคำตอบข้อเสนอ SDP RFC 3264 ประเภทเนื้อหาข้อความเริ่มต้นใน SIP คือ application/sdp.
ฝ่ายโทรศัพท์จะแสดงรายการความสามารถของสื่อที่พวกเขายินดีจะรับใน SDP โดยปกติจะอยู่ใน INVITE หรือใน ACK
ฝ่ายที่ถูกเรียกจะแสดงรายการความสามารถของสื่อในการตอบสนอง 200 OK ต่อ INVITE
การใช้ SIP โดยทั่วไปของ SDP ประกอบด้วยฟิลด์ต่อไปนี้: เวอร์ชันต้นกำเนิดหัวเรื่องเวลาการเชื่อมต่อและสื่อและแอตทริบิวต์อย่างน้อยหนึ่งรายการ
SIP ไม่ได้ใช้ฟิลด์หัวเรื่องและเวลา แต่รวมไว้เพื่อความเข้ากันได้
ในมาตรฐาน SDP ฟิลด์หัวเรื่องเป็นฟิลด์บังคับและต้องมีอย่างน้อยหนึ่งอักขระแนะนำให้เป็น s = - หากไม่มีหัวเรื่อง
โดยปกติฟิลด์เวลาจะถูกตั้งค่าเป็น t = 00 SIP ใช้ฟิลด์การเชื่อมต่อสื่อและแอตทริบิวต์เพื่อตั้งค่าเซสชันระหว่าง UAs
ช่องต้นทางใช้กับ SIP ได้อย่าง จำกัด
โดยปกติ session-id จะคงที่ตลอดเซสชัน SIP
เวอร์ชันจะเพิ่มขึ้นทุกครั้งที่มีการเปลี่ยนแปลง SDP หาก SDP ที่ส่งไม่เปลี่ยนแปลงจากที่ส่งไปก่อนหน้านี้เวอร์ชันจะยังคงเหมือนเดิม
เนื่องจากประเภทของเซสชันสื่อและตัวแปลงสัญญาณที่จะใช้เป็นส่วนหนึ่งของการเจรจาการเชื่อมต่อ SIP สามารถใช้ SDP เพื่อระบุประเภทสื่อทางเลือกหลายประเภทและเพื่อเลือกยอมรับหรือปฏิเสธประเภทสื่อเหล่านั้น
ข้อกำหนดข้อเสนอ / คำตอบ RFC 3264 แนะนำให้ใช้แอตทริบิวต์ที่มี a = rtpmap: สำหรับแต่ละช่องสื่อ สตรีมสื่อถูกปฏิเสธโดยการตั้งค่าหมายเลขพอร์ตเป็นศูนย์สำหรับฟิลด์สื่อที่เกี่ยวข้องในการตอบสนอง SDP
ตัวอย่าง
ในตัวอย่างต่อไปนี้ผู้โทร Tesla ต้องการตั้งค่าการโทรด้วยเสียงและวิดีโอด้วยตัวแปลงสัญญาณเสียงที่เป็นไปได้สองตัวและตัวแปลงสัญญาณวิดีโอใน SDP ที่ดำเนินการใน INVITE เริ่มต้น -
v = 0
o = John 0844526 2890844526 IN IP4 172.22.1.102
s = -
c = IN IP4 172.22.1.102
t = 0 0
m = audio 6000 RTP/AVP 97 98
a = rtpmap:97 AMR/16000/1
a = rtpmap:98 AMR-WB/8000/1
m = video 49172 RTP/AVP 32
a = rtpmap:32 MPV/90000
ตัวแปลงสัญญาณอ้างอิงโดยหมายเลขโปรไฟล์ RTP / AVP 97, 98
บุคคลที่เรียกว่า Marry รับสายเลือกตัวแปลงสัญญาณที่สองสำหรับฟิลด์สื่อแรกและปฏิเสธฟิลด์สื่อที่สองโดยต้องการเฉพาะเซสชัน AMR เท่านั้น
v = 0
o = Marry 2890844526 2890844526 IN IP4 172.22.1.110
s = -
c = IN IP4 200.201.202.203
t = 0 0
m = audio 60000 RTP/AVP 8
a = rtpmap:97 AMR/16000
m = video 0 RTP/AVP 32
หากไม่ยอมรับการโทรด้วยเสียงเท่านั้น Tom จะส่ง ACK จากนั้น BYE เพื่อยกเลิกการโทร มิฉะนั้นเซสชันเสียงจะถูกสร้างขึ้นและมีการแลกเปลี่ยนแพ็กเก็ต RTP
ดังตัวอย่างนี้เป็นตัวอย่างเว้นแต่จำนวนและลำดับของช่องสื่อจะยังคงอยู่ฝ่ายที่โทรจะไม่ทราบแน่ชัดว่าเซสชันสื่อใดได้รับการยอมรับและปฏิเสธโดยฝ่ายที่เรียกว่า
กฎข้อเสนอ / คำตอบสรุปไว้ในส่วนต่อไปนี้
กฎสำหรับการสร้างข้อเสนอ
ข้อเสนอ SDP ต้องมีช่อง SDP ที่จำเป็นทั้งหมด (ซึ่งรวมถึง v =, o =, s =, c = และ t =) ฟิลด์เหล่านี้เป็นฟิลด์บังคับใน SDP
โดยปกติจะมีช่องสื่อ ( m = ) แต่ไม่จำเป็นต้อง บรรทัดสื่อประกอบด้วยตัวแปลงสัญญาณทั้งหมดที่แสดงรายการตามลำดับความต้องการ ข้อยกเว้นเพียงประการเดียวคือหากปลายทางรองรับตัวแปลงสัญญาณจำนวนมากสิ่งที่น่าจะเป็นที่ยอมรับมากที่สุดหรือเป็นที่ต้องการมากที่สุดควรอยู่ในรายการ สื่อประเภทต่างๆ ได้แก่ เสียงวิดีโอข้อความ MSRP BFCP และอื่น ๆ
กฎสำหรับการสร้างคำตอบ
ต้องสร้างคำตอบ SDP สำหรับข้อเสนอตามกฎต่อไปนี้ -
คำตอบต้องมีจำนวนบรรทัดm =เท่ากันกับคำตอบ
สตรีมสื่อแต่ละรายการสามารถปฏิเสธได้โดยตั้งค่าหมายเลขพอร์ตเป็น 0
สตรีมได้รับการยอมรับโดยการส่งหมายเลขพอร์ตที่ไม่ใช่ศูนย์
เพย์โหลดที่แสดงรายการสำหรับสื่อแต่ละประเภทต้องเป็นส่วนย่อยของเพย์โหลดที่ระบุไว้ในข้อเสนอ
สำหรับน้ำหนักบรรทุกแบบไดนามิกไม่จำเป็นต้องใช้หมายเลขน้ำหนักบรรทุกแบบไดนามิกเดียวกันในแต่ละทิศทาง โดยปกติแล้วจะเลือกน้ำหนักบรรทุกเพียงรายการเดียว
กฎสำหรับการแก้ไขเซสชัน
ฝ่ายใดฝ่ายหนึ่งสามารถเริ่มการแลกเปลี่ยนข้อเสนอ / คำตอบอื่นเพื่อแก้ไขเซสชัน เมื่อมีการแก้ไขเซสชันต้องปฏิบัติตามกฎต่อไปนี้ -
หมายเลขเวอร์ชันของรายการต้นทาง ( o = ) ต้องตรงกับรายการสุดท้ายที่ส่งซึ่งบ่งชี้ว่า SDP นี้เหมือนกับการแลกเปลี่ยนก่อนหน้าหรืออาจเพิ่มขึ้นทีละรายการซึ่งบ่งชี้ SDP ใหม่ที่ต้องแยกวิเคราะห์
ข้อเสนอต้องรวมสายสื่อที่มีอยู่ทั้งหมดและต้องส่งในลำดับเดียวกัน
สามารถเพิ่มสตรีมสื่อเพิ่มเติมที่ส่วนท้ายของรายการm = line
คุณสามารถลบสตรีมสื่อที่มีอยู่ได้โดยตั้งค่าหมายเลขพอร์ตเป็น 0 สายสื่อนี้จะต้องอยู่ใน SDP และการแลกเปลี่ยนข้อเสนอ / คำตอบในอนาคตทั้งหมดสำหรับเซสชันนี้
พักสาย
ฝ่ายหนึ่งในการโทรสามารถระงับอีกฝ่ายชั่วคราวได้ ทำได้โดยการส่ง INVITE ที่มี SDP เหมือนกันกับ INVITE ดั้งเดิม แต่มีa = sendonly แอตทริบิวต์ปัจจุบัน
การโทรนั้นใช้งานได้อีกครั้งโดยการส่งคำเชิญอีกครั้งพร้อมกับไฟล์ a = sendrecvแอตทริบิวต์ปัจจุบัน ภาพประกอบต่อไปนี้แสดงขั้นตอนการโทรของการพักสาย