自己動手寫RTP伺服器 用RTP協議傳輸TS流

2021-07-29 20:18:31 字數 1232 閱讀 5300

關於ts流的格式:ts流封裝的具體格式請參考文件iso/iec 13818-1。這裡我們只需要了解一些簡單的資訊就好。首先ts流是有許多的ts packet組成的,每個ts packet的長度固定為188 bytes,每個packet都是以sync_byte:0x47開頭。

mtu(maximum transmission unit): 最大傳輸單元。是指一種通訊協議的某一層上面所能通過的最大資料報大小(以位元組為單位)。最大傳輸單元這個引數通常與通訊介面有關(網路介面卡、串列埠等)。例如:乙太網無法接收大於1500 位元組的資料報。

下面我會把自己寫的簡單的**貼出來,並且一步步地說明。

新建main.c檔案,內容如下:

#include #include #include #include #include #define ts_packet_size 188

#define mtu 1500

說明:包含一些必要的標頭檔案,並且定義了ts packet的長度(188 bytes),mtu的限制(1500 bytes)。

struct rtp_header;

void init_rtp_header(struct rtp_header *h)

說明:這裡定義了rtp header的結構體,以及初始化的方法。這裡用到了位域,這是實現協議的時候常常會用到的方法。

需要注意的是:

初始化rtp header的函式的初始化值的意義請參考rfc3550。為了實現簡單,其中的sequence_number、timestamp、ssrc,都是隨意填寫的。在傳送包的時候需要將sequence_number遞增。

void sequence_number_increase(struct rtp_header *header)
說明:這個函式的目的就是讓sequence_number加一,還是由於本機與網路位元組序不同的原因,所以顯得略微複雜些。

int main()

count += read_len;

if (count + ts_packet_size > mtu)

} fclose(ts_file);

}

短短幾十行**是否就能完成乙個rtp伺服器?我們需要用實驗來驗證。

我的測試環境是linux,用gcc編譯通過,使用vlc(mplayer 測試也可以通過了)作為接收端。

用rtp協議傳輸ts流

自己動手寫RTP伺服器 用RTP協議傳輸TS流

關於ts流的格式 ts流封裝的具體格式請參考文件iso iec 13818 1。這裡我們只需要了解一些簡單的資訊就好。首先ts流是有許多的ts packet組成的,每個ts packet的長度固定為188 bytes,每個packet都是以sync byte 0x47開頭。mtu maximum t...

自己動手寫RTP伺服器 用RTP協議傳輸TS流

關於ts流的格式 ts流封裝的具體格式請參考文件iso iec 13818 1。這裡我們只需要了解一些簡單的資訊就好。首先ts流是有許多的ts packet組成的,每個ts packet的長度固定為188 bytes,每個packet都是以sync byte 0x47開頭。mtu maximum t...

自己動手寫的Web伺服器《一》

背景介紹 書到用時方恨少,工作之後才知道自己的知識有多麼的困乏,學識有多麼的淺薄。好在我的程式設計師工作不那麼苦逼,每天有大把的時間讓我學我學習,經 程式設計師 的推薦,花大價錢買了一本 深入理解計算機系統 對於這本書,我的評價是 計算機知識的高品質富礦。於是我拿著這本書開始修煉內功,只恨學校沒有使...