SIP - Mô hình chào hàng / câu trả lời
Việc sử dụng SDP với SIP được đưa ra trong câu trả lời đề nghị SDP RFC 3264. Loại nội dung thông báo mặc định trong SIP là application/sdp.
Bên gọi liệt kê các khả năng phương tiện mà họ sẵn sàng nhận được trong SDP, thường là trong INVITE hoặc trong ACK.
Bên được gọi liệt kê các khả năng truyền thông của họ trong 200 phản hồi OK đối với INVITE.
Việc sử dụng SIP thông thường của SDP bao gồm các trường sau: phiên bản, nguồn gốc, chủ đề, thời gian, kết nối và một hoặc nhiều phương tiện và thuộc tính.
Các trường chủ đề và thời gian không được SIP sử dụng nhưng được đưa vào để tương thích.
Trong tiêu chuẩn SDP, trường chủ đề là trường bắt buộc và phải chứa ít nhất một ký tự, được đề xuất là s = - nếu không có chủ đề.
Trường thời gian thường được đặt thành t = 00. SIP sử dụng trường kết nối, phương tiện và thuộc tính để thiết lập phiên giữa các UA.
Trường gốc được sử dụng hạn chế với SIP.
Id phiên thường được giữ cố định trong suốt phiên SIP.
Phiên bản được tăng lên mỗi khi SDP được thay đổi. Nếu SDP được gửi không thay đổi so với đã gửi trước đó, thì phiên bản sẽ được giữ nguyên.
Vì loại phiên phương tiện và codec được sử dụng là một phần của thương lượng kết nối, SIP có thể sử dụng SDP để chỉ định nhiều loại phương tiện thay thế và chấp nhận hoặc từ chối có chọn lọc các loại phương tiện đó.
Đặc tả phiếu mua hàng / câu trả lời, RFC 3264, khuyến nghị rằng một thuộc tính có chứa a = rtpmap: được sử dụng cho mỗi trường phương tiện. Luồng phương tiện bị từ chối bằng cách đặt số cổng thành 0 cho trường phương tiện tương ứng trong phản hồi SDP.
Thí dụ
Trong ví dụ sau, người gọi Tesla muốn thiết lập một cuộc gọi âm thanh và video với hai codec âm thanh có thể có và một codec video trong SDP có trong INVITE ban đầu -
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
Các codec được tham chiếu bởi hồ sơ RTP / AVP số 97, 98.
Bên được gọi Marry trả lời cuộc gọi, chọn codec thứ hai cho trường phương tiện đầu tiên và từ chối trường phương tiện thứ hai, chỉ muốn phiên 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
Nếu cuộc gọi chỉ có âm thanh này không được chấp nhận, thì Tom sẽ gửi ACK sau đó là BYE để hủy cuộc gọi. Nếu không, phiên âm thanh sẽ được thiết lập và các gói RTP được trao đổi.
Như ví dụ này minh họa, trừ khi số lượng và thứ tự của các trường phương tiện được duy trì, bên gọi sẽ không biết chắc chắn phiên phương tiện nào đang được bên được gọi chấp nhận và từ chối.
Các quy tắc chào hàng / câu trả lời được tóm tắt trong các phần sau.
Quy tắc tạo phiếu mua hàng
Phiếu mua hàng SDP phải bao gồm tất cả các trường SDP bắt buộc (bao gồm v =, o =, s =, c = và t =). Đây là những trường bắt buộc trong SDP.
Nó thường bao gồm một trường media ( m = ) nhưng nó không nhất thiết phải như vậy. Các dòng phương tiện chứa tất cả các codec được liệt kê theo thứ tự ưu tiên. Ngoại lệ duy nhất cho điều này là nếu điểm cuối hỗ trợ một số lượng lớn codec, thì mã có khả năng được chấp nhận cao nhất hoặc được ưu tiên nhất sẽ được liệt kê. Các loại phương tiện khác nhau bao gồm âm thanh, video, văn bản, MSRP, BFCP, v.v.
Quy tắc tạo câu trả lời
Câu trả lời SDP cho một phiếu mua hàng phải được xây dựng theo các quy tắc sau:
Câu trả lời phải có cùng số dòng m = theo thứ tự như câu trả lời.
Các luồng phương tiện riêng lẻ có thể bị từ chối bằng cách đặt số cổng thành 0.
Các luồng được chấp nhận bằng cách gửi một số cổng khác không.
Tải trọng được liệt kê cho mỗi loại phương tiện phải là một tập hợp con của trọng tải được liệt kê trong phiếu mua hàng.
Đối với tải trọng động, không cần sử dụng cùng một số trọng tải động cho mỗi hướng. Thông thường, chỉ một trọng tải duy nhất được chọn.
Quy tắc sửa đổi phiên
Một trong hai bên có thể bắt đầu trao đổi phiếu mua hàng / câu trả lời khác để sửa đổi phiên. Khi một phiên được sửa đổi, các quy tắc sau phải được tuân theo:
Số phiên bản dòng gốc ( o = ) phải giống với số cuối cùng được gửi, cho biết rằng SDP này giống với trao đổi trước đó hoặc nó có thể được tăng lên một, cho biết SDP mới phải được phân tích cú pháp.
Phiếu mua hàng phải bao gồm tất cả các dòng phương tiện hiện có và chúng phải được gửi theo cùng một thứ tự.
Các luồng phương tiện bổ sung có thể được thêm vào cuối danh sách dòng m = .
Một luồng phương tiện hiện có có thể bị xóa bằng cách đặt số cổng thành 0. Dòng phương tiện này phải vẫn còn trong SDP và tất cả các trao đổi đề nghị / trả lời trong tương lai cho phiên này.
Giữ máy
Một bên trong cuộc gọi có thể tạm thời đặt bên kia ở trạng thái chờ. Điều này được thực hiện bằng cách gửi một INVITE có SDP giống hệt với SDP của INVITE ban đầu nhưng vớia = sendonly thuộc tính hiện tại.
Cuộc gọi được kích hoạt trở lại bằng cách gửi một INVITE khác với a = sendrecvthuộc tính hiện tại. Hình minh họa sau đây cho thấy luồng cuộc gọi của một cuộc gọi.