我做了一些關於在小型網絡中使用voip over udp的學習。我知道有很多庫可以做,並且只需要幾個方法調用就可以完成所有我需要的東西,但正如我所說的,我正在學習,所以需要重新發明輪子以瞭解它是如何工作的。voip基礎 - 包頭信息?
我目前正在研究DatagramPacket類,我注意到沒有方法可以在DatagramPacket類中設置標題信息(即,我需要知道的用於交織的信息包順序號)。
一些代碼來反映環境:
byte[] block;
DatagramPacket packet; // UDP packet
/* x Bytes per block , y blocks per second,
z ms time block playback duration */
block = recorder.getBlock(); // assume I have class that handles audio
// recording and returns speech in a
// uncompressed form of bytes
packet = new DatagramPacket(block, block.length, clientIP, PORT);
首先,我認爲,因爲它是UDP,發送者並沒有真正關心任何事情除了簡單的事實,他拋出的數據包的地方。所以這就是爲什麼裏面沒有這樣的方法。
其次,我假設我需要自己做 - 爲要發送的字節塊添加額外的字節,其中包含一個數據包的序列號?但是我也擔心,如果我這樣做,那麼如何識別字節是頭字節而不是音頻字節?我可以假定第一個字節代表一個數字,但是我們知道該字節只能代表258個數字。我從來沒有真正在字節級別上工作過。或者還有其他技術?
不久說,做交錯,我需要知道如何設置數據包的序列號,因爲我不能爲了無序的數據包:-)
謝謝你,
哦,這就是我正在尋找的東西,這麼多的學習和分析,但我現在有方向,這是非常重要的,謝謝 – Aubergine 2012-02-01 17:17:23
我問博士們有關位移的顯示你的代碼他們說單獨鑄造就夠了。所以如果我可以調用,我必須嚴格使用你提供的移位:buf [4] =(byte)sequenceNumber?謝謝。 – Aubergine 2012-02-06 16:56:07
@Aubergine您需要將4字節整數的最高有效字節放入buf [4]中,並且您無法通過將整型轉換爲字節來完成此操作。對於最低有效字節,'buf [7] =(byte)timestamp;'就足夠了,而不是buf [7] =(byte)(timestamp&0x000000ff);' – nos 2012-02-07 08:04:33