我們已經對圖書館程序進行了廣泛的研究,我想與您分享我們的發現。
現在,基本上我已經開始接受基本上所有VoIP庫的接口質量。好..不好!至少從Clean Code開發人員的角度來看。諸如“許可證無效或已過期或發生任何其他錯誤”之類的異常是標準的。有些可能永遠不會拋出異常,而是引發一個事件作為響應。該事件包含一個將被“初始化”的字符串,否則將被“初始化”,這是錯誤原因。請注意,該事件不是異步的,它發生在方法完成之前。
其他具有隱名(很多我不是說像DTMF之類的東西,您可以輕鬆地在Google上搜索並找出其含義)。一個庫中有很多Typos。
其他庫再次提供了Native C ++ Imports,您將不得不大量使用 unsafe
。有些提供COM甚至是.net DLL包裝器,但是如果您想做更高級的事情,例如緩衝,您仍然需要使用指針/不安全的代碼。這些甚至沒有被包裝到 IntPtr
中,而是 long bufferPointer
。對於各種類型的庫,也很常見的是有諸如 int IsLoopbackInterfaceEnabled
之類的屬性。您需要自己從 int
轉換為 bool
的地方。
更新-Ozeki的問題
我們做得有些不好Ozeki的經驗,所以我不得不撤回之前的聲明。因此,這裡出了問題所在(除了我們已經發現並修復的幾個錯誤):首先,我們檢測到音頻質量問題。由於涉及到一些定制的VoIP-HW和無線電設備(這確實會影響質量),因此我們進行了許多測試。最後,我們可以將其精確定位到Ozeki SDK,並向Ozeki詢問了它。 Ozeki SDK使用的Windows Audio API(Wasapi或Waveform API)的默認設置是一個已知問題。
現在這還沒有結束。在我們自己編寫的示例應用程序(由Ozeki提供的示例程序)或少量演示應用程序中切換音頻API效果很好。但是,在我們的實際應用程序中,僅更改一條配置線就根本不會從揚聲器輸出任何音頻。再次,我已向Ozeki尋求幫助。我認為這可能只是另一個已知問題。不是。因此,經過一番討論,我們同意他們應該調查一個完全正常的repro。因此,我給他們發送了一封郵件。他們的回復是,該問題與揚聲器實例化有關。因此,他們並未對此問題進行徹底調查,而是試圖通過一些通用答案來欺騙我。 las,還有更多討論,他們的下一個建議是,初始化應在另一個時間進行(儘管它們的含義有所不同)。所以我花了更多的時間並嘗試了很多組合,包括在GUI線程中進行初始化,不在GUI線程中進行初始化等。它沒有幫助。 他們的最終回應是,它可以在他們的示例應用程序中運行,因此問題必須與我們的應用程序有關。如果我聽說過,這真是la腳的藉口。 :在將配置更改為其他API時,它可以“完美無瑕”地工作(不良的音頻質量)-並且根據Ozeki的更改,API應該沒有任何副作用)。
我已提交了Repro- Ozeki的案例發生在2014年12月12日,但直到現在(2015年6月8日)仍未解決。
Ozeki SDK還有其他問題,這會減緩開發速度。對於其中一些,有變通辦法(這是很痛苦的),而對於其中一些則沒有變通辦法(甚至是更大的痛苦)。
最後,我們已經決定要求C ++開發部門為我們編寫基於 PJSIP的VoIP服務。根據我們的開發人員的說法,這是一種享受。
這是有關Ozeki SDK的原始文本:
最後,我們決定使用 Ozeki SDK。我們認為它們的API是所有檢查過的庫中最好的(儘管還很不完善)。請注意,異常不是很清楚(哦,所以您告訴我地址不正確,為什麼不給我一個正確地址的示例?)並且對象的“狀態機”也不是很清楚(p例如,對於 IPhoneCall
,您可以調用 .Start()
兩次,第二次也不例外,什麼也沒有,但是不管您是否使用,都行不通之前是否調用過 .HangUp()
,這意味著您只能使用一次該對象(一次調用),這很好,如果該方法拋出異常並告訴我,那會更好我無法使用它。)Ozeki支持似乎還可以。它們在網站上提供了豐富的VoIP文檔,還提供了許多示例C#項目,所有這些都是最容易使用的界面。而且功能/音頻質量也可以。價格方面也可以(至少就我們的情況而言)。
以下是我針對其他SDK所做的簡短記錄:
- Abto :可以使用ActiveX,COM和DLL。
- 對於某些方法,需要使用
長指針
/不安全代碼 - 特定於異常的消息
-
boolean
s表示為 int
- typos
- 基本上沒有面向對象的抽象-一切都使用
CAbtoPhoneClass
- 有大量事件。界面不整潔且易於理解,您需要閱讀大量文檔才能知道該怎麼做。
- pjsip包裝器
- PCBest
- 只有一個示例C#代碼隨附最新的VS2013解決方案
- ,需要子類
GTAPIEnv
。這有多醜?
- 通過類似
SetInteger(string name,int value)
的方法配置設置。界面乾淨的相反!
- LanScape VoIP媒體引擎
- 無對象抽象
- 取而代之的是數組。
.PhoneLineRecording [2]
和 .PhoneLineState [2]
之類的東西。因此,1990年! - 錯誤表示為Enums。它們是縮寫-可以理解的一半。
- PortSIP VoIP SDK
- Conaito SIP客戶端SDK
- 僅通用異常,例如“ VOIP SDK失敗”。如果我沒記錯的話,那麼您將必須閱讀一個屬性,以獲得有關該問題的一些(一點)信息。您好,並發嗎?當然。
- 實例化API類需要引用
Windows.Forms.Control
。 WPF,有人嗎?沒有GUI服務,有人嗎?
- VaxVoIP SIP電話SDK
- 再一次,
bool
s表示為 int
s - 每個方法都返回一個int。 C風格編碼。始終將返回碼與0進行比較,以找出是否可行。要獲取更多信息,您必須讀取一個
.Error
屬性(線程安全?再見!) - 文檔記錄不充分,您需要研究以下示例:再次發現事情。
- 還有很多事件-請閱讀文檔數小時。
- IntTalk VoIP SDK
- 他們實際上最近停止銷售SDK。現在,他們可以為您編程自定義VoIP軟件。