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แอตทริบิวต์ปัจจุบัน ภาพประกอบต่อไปนี้แสดงขั้นตอนการโทรของการพักสาย