Android音視頻即時通訊軟體怎樣通過JNI快速實現 音視頻通訊 作為獨立開發人員或想縮短音視頻開發週期的公司來說,想要在Android平台下實現音視頻通訊,最快捷的方法是尋找開源項目或調用其他公司API。之所以這麼說是因為音視頻通訊技術涉及到底層音視頻採集、解碼、 FFmpeg(音視頻處理解決方案)、媒體流傳輸協議等太多太多相關技術知識點。試了幾個開源項目,視頻差強人意,語音與視頻不同步等不穩定因素。因此我把目光放到其他公司的API上(點擊下載demo程式)。demo程式API提供了一系列純Java語言的調用介面,通過JNI即可調用核心共用庫(.so 類似win32的dll),根據官方開發文檔我很快就實現音視頻通訊,下面是我在調用其API的經驗總結。視頻如下: 650) this.width=650;" alt="圖片" src="http://b230.photo.store.qq.com/psb?/V13LKChu2oM1rt/i31QPhoA*DTGqrozwnufKn*ukV4czXZCImCr2x8ryVY!/b/dE9KGon4FQAA&ek=1&kp=1&pt=0&bo=IANXAgAAAAADAFM!&su=098329265&sce=0-12-12&rf=2-9" style="margin:0px;padding:0px;border-width:0px;border-style:none;vertical-align:top;width:800px;height:599px;" />
Android通訊平台相關API方法 650) this.width=650;" alt="圖片" src="http://b268.photo.store.qq.com/psb?/V13LKChu2oM1rt/7CPaBqpglnSl1S0pwYJp6CGlyQ6S31SdjxrSVK3m8eU!/b/dODmzJ*6DgAA&ek=1&kp=1&pt=0&bo=1AKPAQAAAAADAH0!&su=0105813089&sce=0-12-12&rf=2-9" style="margin:0px;padding:0px;border-width:0px;border-style:none;vertical-align:top;width:724px;height:399px;" />
一、初始化SDK 初始化SDK是首先要完成的,用於設定SDK的一些行為,包括設定對應的回呼函數。代碼如下: 650) this.width=650;" alt="圖片" src="http://b231.photo.store.qq.com/psb?/V13LKChu2oM1rt/MvOEuc9sAAOYVNQ93cgsTKvNfy3rLT796Aww5ramsaM!/b/dMD8uIk7FgAA&ek=1&kp=1&pt=0&bo=wwLdAAAAAAADADk!&su=0249789409&sce=0-12-12&rf=2-9" style="margin:0px;padding:0px;border-width:0px;border-style:none;vertical-align:top;width:707px;height:221px;" />
二、登入系統 當初始化SDK完成之後,便可以實現串連伺服器、驗證使用者身份、使用者登入等。 650) this.width=650;" alt="圖片" src="http://b266.photo.store.qq.com/psb?/V13LKChu2oM1rt/qoGzYDMzeGZ85riIaQ3TlkLFlvpmvuYcSpH87gL2fkM!/b/dDcump6KFgAA&ek=1&kp=1&pt=0&bo=qgFHAAAAAAADAMk!&su=083642529&sce=0-12-12&rf=2-9" style="margin:0px;padding:0px;border-width:0px;border-style:none;vertical-align:top;width:426px;height:71px;" />
串連伺服器和登入系統都是一個非同步過程,調用後會立即返回。在回呼函數中根據傳回碼判斷伺服器是否串連成功和登入成功。 三、進入房間 登入成功後就可進入相應的房間,只有在相同房間的使用者才能進行音視頻通訊。代碼如下 1、進入房間 650) this.width=650;" alt="圖片" src="http://b268.photo.store.qq.com/psb?/V13LKChu2oM1rt/oF39jSXcnDOWJbG69NcyIh2gWltg4u9aE8L6vLUg8c8!/b/dNbXxp*3DgAA&ek=1&kp=1&pt=0&bo=VAEpAAAAAAADAFk!&su=0160788273&sce=0-12-12&rf=2-9" style="margin:0px;padding:0px;border-width:0px;border-style:none;vertical-align:top;width:340px;height:41px;" />
進入房間後系統會將該房間線上使用者發送給用戶端,只有在同一個房間使用者才能進行音視頻互交、文字交談、檔案傳輸等。當新使用者進入房間或使用者下線,都會觸發非同步訊息通知上層應用更改狀態。 2、文字交談 成功進入房間後,便可調用API介面向指定使用者或房間中所有線上使用者發送文字 聊天訊息。 650) this.width=650;" alt="圖片" src="http://b231.photo.store.qq.com/psb?/V13LKChu2oM1rt/LeroAwaBoGgI81TA4QhZtoY5dkrBgAMWHWtglpaY84E!/b/dCgQv4ncFQAA&ek=1&kp=1&pt=0&bo=8gE8AAAAAAADAOo!&su=0244161201&sce=0-12-12&rf=2-9" style="margin:0px;padding:0px;border-width:0px;border-style:none;vertical-align:top;width:498px;height:60px;" />
其他使用者收到文字交談訊息會觸發相應的回呼函數並將聊天訊息顯示在介面上。 3、請求其他使用者的音視頻 650) this.width=650;" alt="圖片" src="http://b265.photo.store.qq.com/psb?/V13LKChu2oM1rt/z0cKFlbYte4FcYQ2R8I92SPjFYmodXKFfQmYJjkz.xI!/b/dND1.Z2TKAAA&ek=1&kp=1&pt=0&bo=jQFIAAAAAAADAOE!&su=0239993105&sce=0-12-12&rf=2-9" style="margin:0px;padding:0px;border-width:0px;border-style:none;vertical-align:top;width:397px;height:72px;" />
4、音視頻的顯示與播放 650) this.width=650;" alt="圖片" src="http://b265.photo.store.qq.com/psb?/V13LKChu2oM1rt/AFCXHk19Y4TAG0LhtE*IdU3YHRvh2mQWp7PnC.GWUXo!/b/dHb4.Z2LKAAA&ek=1&kp=1&pt=0&bo=xwKSAQAAAAADAHM!&su=0182693793&sce=0-12-12&rf=2-9" style="margin:0px;padding:0px;border-width:0px;border-style:none;vertical-align:top;width:711px;height:402px;" />
Android程式中,當收到使用者的媒體流資料時,Android用戶端只需提供一個SurfaceView控制項,核心自動將視頻媒體流資料顯示在該控制項上並播放聲音。 四、釋放資源 與前面講的串連伺服器、登入系統、進入房間對應的的是離開房間、登出系統、釋放資源。代碼如下: 650) this.width=650;" alt="圖片" src="http://b230.photo.store.qq.com/psb?/V13LKChu2oM1rt/GkuFpXTI*i2s3PFZo3CUbaaPwlXUX2musL*lhmpJX2E!/b/dGR3I4n9FQAA&ek=1&kp=1&pt=0&bo=AwKDAAAAAAADAKc!&su=0187474961&sce=0-12-12&rf=2-9" style="margin:0px;padding:0px;border-width:0px;border-style:none;vertical-align:top;width:515px;height:131px;" />
離開房間後可再進入房間,但是登出登入和釋放資源後,SDK將不再工作。在Activity生命週期結束的時候可以將佔用資源釋放,程式退出。 總結:這是AnyChat即時通訊SDK的應用,還有其他諸如傳送檔案、P2P串連、對Android裝置設定、擷取線上使用者等非常實用功能。用java我們也能快速實現音視頻通訊。
|