2017-04-21 150 views
1

我有一個簡單的應用程序,其中我發送OPUS數據包從一個客戶到其他說A到B.計算OPUS分組長度

A讀取從OPUS文件中的一個分組,並且20ms的或之後發送到B. 再次30ms再讀取一個數據包併發送給B,依此類推。 到目前爲止,我使用UDP上的RTP,所以在B的接收端,當我收到數據包時,我收到完整的數據包。收到完整的數據包後,我寫入一個新文件。

這工作正常。

現在我打算支持TCP上的RTP。 A將從OPUS文件讀取一個完整的數據包併發送給B. 當在B收到數據包時,它可能會作爲單個數據包或多個數據包(tcp行爲)接收。我的要求是,我應該緩衝數據,直到我收到完整的數據包。一旦我收到完整的數據包,我將把它寫入一個文件。

現在我的問題是,在接收時如何確定B處的OPUS數據包的長度,以便我可以緩衝它。

不想要使用libopus等,如果以某種方式,我可以避免它。如果通過任何方式從收到的數據,我可以找出包長度?

回答

2

TCP是一個流協議。您有兩個主要選擇:在每個Opus數據包之前添加一個長度字(16位就足夠了)(讀取長度,然後讀取數據包,處理緩衝(等待讀取足夠的字節),或將每個Opus數據包填充到特定大小Opus不使用固定大小的數據包,它們取決於內容和比特率和質量設置。

+0

是的,想通了,RFC 4571解釋了同樣的事情。 – Kamal