**RTP** (Real-time Transport Protocol), gerçek zamanlı ses, görüntü ya da simülasyon verilerinin uçtan uca taşınmasını sağlayan protokoldür. Bu protokol IETF nin Audio-Video Transport çalışma grubu tarafından geliştirildi.
RTP geniş ölçüde telefon, video telekonferans uygulamaları ve web tabanlı bas-konuş özellikleri gibi streaming media gerektiren iletişim ve görsel sistemlerde kullanılır.

RTP genellikle RTP Control Protocol (RTCP) ile beraber kullanılır. RTP media streamleri (audio ve video gibi) taşıyorken
RTCP Quality of Service (QoS) bilgisini ve iletim istatistiklerini izlemek için kullanılır. Bu protokollerin her ikisi beraber kullanıldığı zaman RTP portunun bir çift sayıya denk gelmesi gerekir. RTCP portu ise o oturuma ait RTP portundan sonraki elverişli olan ilk tek port numarasıdır. RTP ve RTCP genellikle 1024-65535 arası portları kullanır.

Genel Tanıtım
-------------

RTP IETF standartları organizasyonunun Audio/Video Transport çalışma grubu tarafından geliştirildi. RTP H.323 ve RTSP
gibi diğer protokoller ile beraber kullanılır. RTP standardı RTP ve Real-time Transport Control Protocol (RTCP) yi bir protokol çiftini tanımlar. RTP multimedia veri transferi için kullanılır ve RTCP periyodik olarak QoS parametrelerini kontrol bilgilerini yollamak için kullanılır.

RTP çoklu ortam verilerinin gerçek-zamanlı(real-time), uçtan uca ( end-to-end) transferi için tasarlanmıştır. Protokol bir IP network üzerindeki veri iletiminde verilerdeki sıra bozukluğunu tespit eder ve jitter (network üzerinde paketlerin geliş süresindeki, düzenindeki değişiklik) kompanzasyonu için kolaylık sağlar. RTP multicast servisler üzerinden birden çok hedefe veri transferini destekler. RTP IP ağlarında ses/video iletiminde öncelikli standart olarak kabul edilir.

Gerçek zamanlı çoklu ortam streaming uygulamaları zamanında bilgileri teslim etmeyi gerektirir ve bu amacı gerçekleştirmek için bazı kaybolan paketleri tolere edebilmelidir. Örneğin audio (ses) uygulamasında kaybolan bir paket ikinci bir paketinin kaybolmasına neden olabilir. TCP RTP için standart haline gelmiş olmasına rağmen bağlantı kurulumundaki ve hata düzeltmedeki doğal gecikmelerden dolayı sık kullanılmamaktadır. RTP yürütme işlemlerinin çoğu UDP üzerine temellendirilir. Diğer taşıma protokolleri daha henüz yaygın olarak kullanılmasalar da özellikle çoklu ortam oturumları (sessions) için tasarlanan SCTP ve DCCP dir.

### Protokol Bileşenleri

RTP iki alt protokolü tanımlar:

* Veri Transfer Protokolü: gerçek zamanlı çoklu ortam verisinin transferiyle ilgilenir. Bu protokol tarafından sağlanan bilgi senkronizasyon için tarih bilgisi, kaybolan paketlerin denetimi için sıra numarası ve verinin kodlanmış formatını gösteren payload formatını içerir.
* Gerçek Zamanlı Kontrol Protokolü: Servis önceliği (QoS) ile ilgili geribildirimler ve ortam streamleri arasında senkronisazyonu belirtmek için kullanılır.

### Oturumlar

Veri iletimi esnasında iki uç arası bir RTP oturumu kurulur. Bu oturum IP adresleri ve RTP ve RTCP ye ait portlardan oluşur. Bu oturum içerisindeki cihazlar veri alıp gönderebilirler. Her bir medya türü için cihazlar arası ayrı bir oturum oluşturulur.
Bir RTP oturumu her ortam streami için kurulur. Böylelikle oturum içerisindeki kişilerin hangi medya tipinden veri almak istemelerine imkân sağlanmış olur. Örneğin bir kullanıcı yayınlanan bir filmin sadece sesini almak isteyebilir. Bu durumda alıcının video yayınını engellemesi yeterli olacaktır.

Profiller ve Payload Formatları
-------------------------------

RTP nin formatında dikkat edilecek hususlardan biri birçok formatı desteklemesidir (H.264, MPEG-4, MJPEG, MPEG, gibi). RTP, standartların yeniden düzenlenmesinin dışında yeni formatların eklenmesine izin verir. RTP protokolünün yapısı Application Level Framing(ALF) ye dayanmaktadır. RTP bu yapsısı itibarı ile birden çok çokluortam formatında yayın yapıp alabilmektedir. RTP de belli bir formatta veri transferi için gerekli bilgiler RTP başlığının içerisinde değil RTP Payload bilgisi ve Profil bilgisi içerisinde yer alır. RTP her bir uygulama için bir profil ve buna bağlı payload girdilerini belirler. Bu da birçok format ile uyumlu çalışmasına imkân sağlar.

RTP de profil bilgisi payload veriyi kodlamak için kullanılan kodlayıcıları (codec) tanımlar ve profil başlığındaki "Payload TYpe" alanındaki payload format kodları için onların eşleşmelerini tanımlar. Her profil birkaç payload format belirtimleriyle beraberdir. Ses Payload formatlarından bazıları G.711, G.723, G.726, G.729, GSM, QCELP, MP3 içerir. Ve video Payload formatlarından bazıları H.261, H.263, H.264, MPEG yi içerir.

Paket Başlığı
-------------

| bit offset | 0-1 | 2 | 3 | 4-7 | 8 | 9-15 | 16-31 |
| --- | --- | --- | --- | --- | --- | --- | --- |
| 0 | Ver. | P | X | CC | M | PT | Sequence Number |
| 32 | Timestamp |
| 64 | SSRC identifier |
| 96 | CSRC identifiers (optional)... |

RTP başlığı en az 12 byte boyutundadır. Başlıktan sonra seçimli başlık uzantıları bulunabilir. Başlık alanları aşağıdaki gibidir.

* **Ver.**: (2 bit) Protokolün versiyonunu işaret eder. Şu andaki versiyon 2 dir.
* **P (Padding)**: (1 bit) Eğer RTP paketinin sonunda ekstra doldurma (padding) bytelar varsa bunları işaret etmek için kullanılır. Bir padding belirli bir boyutun bir bloğunu,bir kısmını doldurmak için kullanılabilir.
* **X (Extension)**: (1 bit) Payload veri ve standart başlık kısmı arasındaki bir uzantı başlığının varlığını işaret eder.
* **CC (CSRC Count)**: (4 bit) sabit başlığı takip eden CSRC tanımlayıcılarının sayısını içerir.
* **M (Marker)**: (1 bit) Bir profil tarafından tanımlanır ve uygulama seviyesinde kullanılır. Eğer ayarlanırsa uygulama için o andaki verinin uygulamayla ilgili bazı özel durumlara sahip olduğunu belirtir.
* **PT (Payload Type)**: (7 bit) Payload formatını gösterir. Ve uygulama tarafından onun yorumlanmasına karar verilir. Bir RTP profili tarafından belirtilir. Örneğin minimal kontrol ile ses ve video konferansları.
* **Sequence Number**: (16 bit) Sıra numarası RTP başlığında paket kaybını belirlemeye yarayan ve aynı tarih bilgisi değerine sahip paketlerin sıralanmasını sağlar. Ve başlangıç değeri rastgele olarak belirlenir.
* **Timestamp**: (32 bit) Uygun aralıklarla kabul edilen örnekleri, kayıtları yeniden göstermek için alıcı uygulamaya imkân tanıması amacıyla kullanılır. Birkaç ortam streamleri mevcut ise, timestamp lar her stream de bağımsızdır ve ortam senkronizasyonu için güvenilir olmayabilir. Senkronizasyona ve jitter hesaplamalarına izin vermek için zaman içinde tekdüze ve artan bir şekilde artan zaman bilgisinden meydana gelir.
* **SSRC**: (32 bit) Senkronizasyon kaynak tanımlayıcıları tek bir şekilde bir streamin kaynağını tanımlar. aynı RTP oturumu içindeki senkronizasyon kaynağı tek ve eşsiz olmalıdır. Bu tanımlayıcı rastgele seçilir.
* **CSRC**: 32 bitlik yardımcı kaynaktır. Yardımcı kaynak idleri birçok kaynaktan oluşturulan bir stream için yardımcı kaynakları numaralandırır.
* **Uzantı Başlığı**:(seçimli) İlk 32 bitlik alan özel bir profil tanımlayıcısı ve uzantı başlığının 32 bitinin dışında 32 bitlik birimlerde (EHL=uzantı başlık uzunluğu) uzantının uzunluğunu belirten 16 bitlik bir uzunluk tanımlayıcısın içerir.

RTP Tabanlı Sistemler
---------------------

Tam bit network tabanlı sistem RTP ile beraber diğer protokoller ve standartları da kapsayacak. SIP, RTSP, H.225 ve H.263 e benzer protokoller oturum başlatılması, kontrol edilmesi ve sonlandırılması için kullanılır. H.263, H.264, MPEG gibi standartlar da RTP profili üzerinden tanımlanan payload veriyi kodlamak için kullanılır.

RTP ister connection-oriented ister connectionless olsun bağlantının türünden bağımsız olarak çalışır. Herhangi bir adres formatına bağımlılığı yoktur. Sadece çerçeveleme(framing) ve segmentasyon işlemlerinin alt katmandaki protokoller tarafından halledilmesini bekler. RTP herhangi bir şekilde reliability (güvenilirlik) garantisi vermez. RTP paket başlığında içerdiği bilgilerle hata kontrolü yapılmasını sağlar. RTP protokolü sanki uygulamanın bir bileşeniymiş gibi çalışır. RTP adının gerçek zamanlı iletişim protokolü olmasına rağmen (pratikte olamayacağı gibi) gerçek zamanlı iletişim sağlamaz. RTP gerçek zamanlı uygulama içeriğini taşınmasını sağlar.