1. sipdroid\src\org\zoolu 中是sip協議棧的實現
2. sipdroid\src\org\sipdroid 中是軟電話的實現
3. sipdroid\src\com 中是stun相關的實現
4. sipdroid預設使用的編碼格式為G711-A率。
5. 直接用ant debug的方法編譯出的程式,只支援A率和U率兩種音頻編碼格式,其他的都需要通過NDK的方法匯入後,才能使用。
6. 如果對端終端可使用視訊的話(如linphone),菜單如下:
保持,靜音,
轉移 發送視頻 掛斷
注意:只能發送視頻,接收不到對端的視頻。
7. 如果對端終端不可使用視訊的話(如yate),菜單如下:
保持,靜音,
轉移 掛斷
8. sipdroid\src\org\sipdroid\sipua\ui 中的VideoCamera.java,有視頻捕獲,發送,接收的實現。
9. sipdroid\src\org\sipdroid\sipua\ui 中的CallScreen.java中的 VIDEO_MENU_ITEM 標識了 “發送視頻”
10. Activity2.java 實現了跳轉到InCallScreen.java
11. class InCallScreenextends CallScreen
12. sipdroid.java 中有“關於 退出 設定”菜單的實現。
在AndroidManifest.xml中,
<intent-filter>
<actionandroid:name="android.intent.action.MAIN" />
<categoryandroid:name="android.intent.category.LAUNCHER" />
</intent-filter>
表明了哪個Activity先啟動。
13. 網路傳來的音頻資料通過AudioTrack類進行播放。
14. 本地的音頻資料通過AudioRecord類進行錄製。
15. 在本地播放資料包中的視頻流,可以先提取位元影像,再顯示。由於系統沒有提供直接播放的相關方法。
16. 線程同步的方法 – synchronized
17. F:\sipdroid\res\drawable 中的表徵圖可以更換
18. sipdroid\res\values-zh-rCN 修改【關於】顯示框的內容
19
在Sipdroid開源項目像伺服器進行資料的發送統一是由SipProvider的sendMessage,因為首先得知道是什麼串連 是UDP啊,還是TCP,然後就是message的封裝
20.
是不需連線的包投遞服務,為什麼是無串連呢,用戶端和伺服器壓根就沒有建立串連,伺服器只是開放了連接埠來接受資料,有了就接受,沒有就懸掛阻塞.
21雙邊的視頻觀看,走的還是資料報包,有資料報包的ip和連接埠就行了
22 但是Sipdroid可以直接的從MediaRecord裡面已經產生好的視頻資料中提取出H264/H263的資料,這些資料已經經過了相應的編碼
23如何觀看視頻:
mVideoFrame.setVideoURI(Uri.parse("rtsp://"+Receiver.engine(mContext).getRemoteAddr()+"/"+
Receiver.engine(mContext).getRemoteVideo()+"/sipdroid"));
24 通過內建的videoview來通過RTSP來進行播放,那麼也就是說伺服器會將傳遞的RTP的視頻資料流封裝成RTSP的流傳遞給手機的videoview來實現觀看,同樣也不需要解碼庫,
所以Sipdroid開原始碼裡只有聲音的編碼庫,沒有視頻的編碼庫.
25
最好的實現該軟體的方法是,藉助Android的MediaRecorder即時提取出H263/H264資料,然後經過RTP封裝傳給RTSP伺服器,這種實現方式最理想,通過擷取onPrewFrame來擷取預覽幀編碼,無論怎麼弄,不可避免的,延時,丟幀各種情況都會讓你非常的棘手
2、SipDroid流程分析:
撥號:撥號請求由UI通過Receiver廣播資訊交給SipDroidEngine處理,在SipDroidEngine做一些驗證,然後交給UserAgine處理。其中call(String target_url, boolean send_anonymous)為判斷是否匿名撥號再此方法中,會建立一個ExtendedCall對象,以提供給sip協議棧使用,然後調用ExtendedCall的call方法處理,之後由ExtendedCall的call,調用ExtendedInviteDialog來發送invite請求。由InviteDialog執行具體的invite調用InviteTransactionClient的request方法,最後由InviteTransactionClient發送request請求,在InviteTransactionClient中會通過SipProvider,來發送訊息,並開啟對連接埠監聽,來收sip訊息。發送訊息主要有(UDP傳輸
UdpTransport TCP傳輸TcpTransport)
來電:在啟動程式的時候會通過SipDroidEngine會根據配置,建立一個Provider,這裡用到udp傳輸,建立一個Udpprovider,udpprover是一個Thread,建立的時候就會啟動線程,開始監聽收到的資訊,當受到資訊後,通過onServiceTerminated方法,把對象傳出到UdpTransport,由UdpTransport處理,再通過onTransportTerminated方法傳出到SipProvider對象,最後將在SipProvider的processReceivedMessage方法中處理收到的訊息,最後從listeners(map)中取出相應的listener,最後通過相應的listener中的OnReceiveMessage()來處理具體Sip請求