Sunday, July 27, 2014

Giao thức RTP

Posted on 9:04 AM in ,
Real-time Transport Protocol (RTP) là giao thức thực hiện vận chuyển các ứng dụng dữ liệu thời gian thực như thoại và hội nghị truyền hình. Các ứng dụng này thường mang các định dạng của âm thanh (PCM, GSM và MP3 và các định dạng độc quyền khác) và định dạng của video (MPEG, H.263 và các định dạng video độc quyền khác). RTP được định nghĩa trong RFC 1889, RFC 3550.
RTP được sử dụng kết hợp với RTCP (Realtime Transport Control Protocol). Trong khi RTP được dùng để truyền dòng dữ liệu đa phương tiện truyền thông (âm thanh và video) thì RTCP được dùng để giám sát QoS và thu thập các thông tin về những người tham gia phiên truyền RTP đang thực hiện.
Giao thức RTP chạy trên nền UDP để sử dụng các chức năng ghép kênh và checksum. Cả hai giao thức RTP và UDP tạo nên một phần chức năng của lớp giao vận. Tuy nhiên RTP cũng có thể được sử dụng với những giao thức khác của lớp mạng và lớp giao vận bên dưới miễn là các giao thức này cung cấp được các dịch vụ mà RTP đòi hỏi. Một điều cần lưu ý là bản thân giao thức RTP không cung cấp một cơ chế nào đảm bảo việc phân phát kịp thời dữ liệu tới các trạm, mà nó dựa trên các dịch vụ của lớp thấp hơn để thực hiện điều này. RTP cũng không đảm bảo việc truyền các gói theo đúng thứ tự. Tuy nhiên số thứ tự trong header cho phép bên thu điều chỉnh lại thứ tự dòng gói tin của bên phát gữi đến.
RTP không chỉ hỗ trợ các dịch vụ phổ biến của hầu hết các ứng dụng truyền thông hội nghị đa phương tiện mà còn có khả năng mở rộng cho phù hợp với dịch vụ mới. Khả năng mở rộng, các mã tương ứng trong trường PT của header ứng với các loại payload trong gói RTP được mô tả trong profile đi kèm.
Cấu trúc giao thức RTP:

Cấu trúc gói tin RTP
Theo cấu trúc trên:
- Phần header cố định
·   Version: 2 bit. Trường vesion để chỉ phiên bản của giao thức. Có 3 phiên bản 0,1,2. Phiên bản hiện tại được sử dụng là 2.
·   P (Padding): 1 bit. Nếu trường P được thiết lập thì gói tin sẽ có một hoặc nhều octets P (những octets này không phải một phần của payload) được thêm vào cuối gói tin. Octet P cuối cùng chỉ kích thước của tổng octect được thêm vào. Mục đích của việc thêm octect P là để dùng cho thuật toán mã hóa cần kích thước gói cố định hoặc được dùng cho việc cách ly các gói RTP trong trường hợp nhiều gói thông tin được mang trong cùng một đơn vị dữ liệu của giao thức lớp dưới.
·   X (Extension): 1 bit. Nếu trường X được thiết lập thì phần header cố định phải được liên kết với phần header mở rộng.
·   CC (CSRC count): 4 bits. Chứa các giá trị của trường CSRC ID trong header cố định.
·   M (Marker): 1 bit. Được sử dụng ở lớp ứng dụng để xác định một profile.
·   PT (Payload type): 7 bits. Xác định và nêu ý nghĩa các dạng payload của RTP.  RTP có thể hỗ trợ đến 27  = 128 loại payload khác nhau. Với một luồng âm thanh hay video trường PT được sử dụng để kí hiệu các mã âm thanh hay video. Ví dụ: mã PT của một số định dạng âm thanh và video: PCM (0),GSM(3), LPC (7), G.722 (9), MPEG Audio(14), G.728(15), JPEG(26), H.261(31), MPEG1(32), MPEG2(33) . Nếu máy phát quyết định thay đổi mã ở phần giữa của một phiên làm việc, thì máy phátcó thể thông báo cho máy thuvề sự thay đổi trường PT. Máy phát có thể thay đổi mã để tăng chất lượng âm thanh hay video hoặc giảm tốc độ luồng RTP.
·   Sequence Number: 16 bits. Trường mang số thứ tự của các gói tin RTP. Số thứ tự này được tăng lên 1 sau mỗi lần gói tin RTP được máy phát gửi đi và còn được dùng để máy thu phát hiện mất gói và khôi phục lại trình tự chuỗi gói tin. Giá trí khởi đầu của trường này là một giá trị ngẫu nhiên. Vd: máy phát nhận được luồng gói tin RTP có khoảng trống giữa 2 hai số thứ tự 86, 89 thì máy phát sẽ biết rằng gói tin có số thự tự 87, 88 đã bị mất.
·   Timestamp: 32 bits. Trường xác định thời điểm lấy mẫu của octets đầu tiên trong gói tin RTP. Thời điểm lấy mẫu phải được  đo bằng một đồng hồ tăng đều đặn và tuyến tính về mặt thời gian để cho phép việc đồng bộ và tính toán độ jitter. Tần số đồng hồ này là không cố định mà phụ thuộc vào loại định dạng của payload. Giá trị khởi đầu trường timestamp cũng được chọn một cách ngẫu nhiên. Một vài gói tin RTP có thể mang cùng một giá trị của trường này nếu như chúng được phát đi cùng một lúc về mặt logic (ví dụ như các gói của cùng một khung hình video). Trong trường hợp các gói dữ liệu được phát ra sau những khoảng thời gian bằng thì giá trị timestamp được tăng một cách đều đặn. Ngược lại, trong trường hợp khác giá trị timestamp sẽ tăng không đều đặn.
·   SSRC (Synchronization Source Identifier): 32 bits. Giá trị của trường SSRC chỉ ra nguồn đồng bộ (nguồn phát gói tin RTP từ micro, camera hay RTP mixer) của gói tin RTP, giá trị này được chọn ngẫu nhiên. Trong một phiên kết nối RTP thì có nhiều nguồn đồng độ phát ra nhiều dòng gói tin RTP. Máy thu sẽ nhóm các dòng gói tin RTP cùng nguồn để phát lại tín hiệu thời gian thực (real-time). 
·   CSRC (Contributing Source List): từ 0 đến 15 items, 32 bits. Trường CSRC xác định các nguồn đóng góp payload cho gói tin (CSRC cho phép xác định tối đa 15 nguồn đóng góp tương ứng vớ 15 items). Giá trị của CSRC được cho bởi trường CC và giá trị này được chèn vào mỗi items bằng các bộ trộn (mixer).
- Phần header mở rộng:

Cơ chế mở rộng của RTP cho phép những ứng dụng riêng lẻ của giao thức RTP thực hiện được với những chức năng mới đòi hỏi những thông tin thêm vào phần header của gói tin. Cơ chế này được thiết kế để một vài ứng dụng có thể bỏ qua một số ứng dụng khác lại có thể sử dụng được phần nào đó. Nếu như trường X (bit X) trong phần header cố định được đặt bằng 1 thì theo sau phần header cố định là phần header mở rộng có chiều dài thay đổi. 16 bit đầu tiên của  trong phần tiêu đề được sử dụng với mục đích riêng cho từng ứng dụng được định nghĩa bởi profile (thường nó được sử dụng để phân biệt các loại tiêu để mở rộng). 16 bits kế tiếp mang giá trị chiều dài của phần header  mở rộng tính theo đơn vị là 32 bits (Giá trị này không bao gồm 32 bit đầu tiên của phần header mở rộng)

0 comments:

Post a Comment