android網路電話源碼

來源:互聯網
上載者:User

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請求

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.