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)