Windows下音視頻對講演示程序(聲學回音消除、噪音抑制、語音活動檢測、自動增益控制、自適應抖動緩沖)(2025年06月28日更新)
Windows下音視頻對講演示程序
必讀說明
簡介
??本軟件根據《道德經》為核心思想而設計,實現了兩至多個設備之間進行音視頻對講,實現了一個設備對多個設備進行廣播對講,一般可用于樓宇對講、智能門鈴對講、企業員工對講、智能對講機、視頻會議、以及類似于微信QQ這種需要兩至多人進行音視頻對講的場景。本軟件支持以下增強處理:
??* 支持同時與多個設備建立連接,并同時與多個設備進行音視頻對講。
??* 支持IPv4和IPv6的TCP和UDP協議傳輸,UDP協議支持可靠傳輸、支持連接中途更換IP不中斷。
??* 支持實時半雙工(一鍵通)和實時全雙工的音頻或視頻或音視頻對講。
??* 支持8000Hz、16000Hz、32000Hz、48000Hz的音頻。
??* 支持聲學回音消除,通過本人自己設計的音頻輸入輸出幀同步方法、自適應設置回音延遲方法、三重聲學回音消除器,聲學回音可以消除到99%以上,還可以消除同一房間回音,且收斂時間很短,無論網絡如何抖動都可以消除。
??* 支持噪音抑制,對常見的底噪音、嘈雜的街道音、風吹音、等都有抑制效果。
??* 支持語音活動檢測,只有在人說話時才發送網絡數據,無人說話時不產生網絡數據,從而降低噪音、降低網絡流量。
??* 支持自動增益控制,當人說話聲音較小時會自動增大音量,當人說話聲音較大時會自動減小音量。
??* 支持音頻編解碼,對音頻數據的壓縮率在1~20%之間,且支持動態比特率,從而大幅度降低網絡流量,聲音依然清晰,還支持數據包丟失隱藏,當網絡丟包率高達30%時,仍然可以進行對講。
??* 支持保存音頻到文件和繪制音頻波形到窗口,可以直觀且方便的調試音頻。
??* 支持視頻軟編解碼,支持指定比特率,最低到10KB/s仍然可以進行視頻對講。
??* 支持音視頻自適應抖動緩沖,當網絡存在丟包、亂序、延時等抖動情況時,通過自適應調節緩沖深度來應對這些抖動。
??* 支持自定義調節各種功能的參數來適應不同的設備,絕大部分情況下使用默認設置即可。
??* 支持將對講時全部設備的音視頻輸入輸出保存到一個Avi文件。
??* 支持與Android下音視頻對講演示程序進行音視頻對講。
??聲學回音消除器效果對比:
| 名稱 | 收斂時間 | 回音延遲不穩定 | 殘余回音 | 遠近端同時說話 | 同一房間對講 | 運算量 |
|---|---|---|---|---|---|---|
| Speex聲學回音消除器 | 有語音活動1~3秒 | 0~3秒自適應調節 | 回音延遲穩定時1% 回音延遲不穩定時50% |
近端語音被消除20% | 會產生一定回音 | 一般 |
| WebRtc定點版聲學回音消除器 | 0秒 | 延遲400ms以內0秒自適應調節 延后超過400ms將無法消除 |
回音延遲穩定時1% 回音延遲不穩定時1% |
近端語音被消除99% | 會產生較大回音 | 一般 |
| WebRtc浮點版聲學回音消除器 | 有語音活動1秒 | 0秒自適應調節 | 回音延遲穩定時1% 回音延遲不穩定時5% |
近端語音被消除50% | 會產生較小回音 | 較大 |
| WebRtc第三版聲學回音消除器 | 有語音活動1秒 | 0秒自適應調節 | 回音延遲穩定時5% 回音延遲不穩定時10% |
近端語音被消除30% | 會產生較小回音 | 很大 |
| Speex聲學回音消除器 +WebRtc定點版聲學回音消除器 |
0秒 | 0~3秒自適應調節 | 回音延遲穩定時1% 回音延遲不穩定時50% |
近端語音被消除20% | 會產生一定回音 | 一般 |
| WebRtc定點版聲學回音消除器 +WebRtc浮點版聲學回音消除器 |
0秒 | 0秒自適應調節 | 回音延遲穩定時1% 回音延遲不穩定時5% |
近端語音被消除50% | 會產生較小回音 | 較大 |
| Speex聲學回音消除器 +WebRtc定點版聲學回音消除器 +WebRtc浮點版聲學回音消除器 |
0秒 | 0秒自適應調節 | 回音延遲穩定時1% 回音延遲不穩定時1%~5% |
近端語音被消除50% | 會產生很小回音 | 很大 |
| WebRtc定點版聲學回音消除器 +WebRtc第三版聲學回音消除器 |
0秒 | 0秒自適應調節 | 回音延遲穩定時1% 回音延遲不穩定時10% |
近端語音被消除30% | 會產生較小回音 | 很大 |
| Speex聲學回音消除器 +WebRtc定點版聲學回音消除器 +WebRtc第三版聲學回音消除器 |
0秒 | 0秒自適應調節 | 回音延遲穩定時1% 回音延遲不穩定時1%~10% |
近端語音被消除30% | 會產生很小回音 | 巨大 |
??特別注意:以上是在不使用系統自帶的聲學回音消除器的效果,且不同設備或不同環境或不同時間效果都會不同,所以需要自己親自測試。
準備
??準備兩至多個安裝了Windows 7及以上系統的設備(已適配到Windows 11),設備之間可以相互通信(可以用Ping工具測試,建議設備都在同一局域網內,外網設備訪問內網設備可能需要做內網穿透),所有設備都安裝相同版本的本軟件。
開始
??1、在一個設備上直接點擊服務端的創建按鈕。
??2、在全部需要參與對講的設備上將客戶端的IP地址改為服務端設備的IP地址,并點擊添加按鈕。
??3、在客戶端列表里點擊剛剛添加的IP地址,再點擊連接按鈕,即可與連接上該服務端的全部設備進行對講。
??4、如果服務端所在設備也需要參與對講,則也需要進行添加和連接操作。
??一鍵即按即廣播按鈕:批量連接客戶端列表里全部服務端,并廣播音視頻輸入到全部服務端,連接到這些服務端的客戶端都能聽見看見該音視頻。
??設置按鈕:提供了各項功能的參數設置,大部分情況下都不需要修改,如果發現不適合某些設備,則需要根據設備情況修改。
??保存設置按鈕:將各項功能的參數保存到Stng.xml中,每次運行本軟件時會自動讀取設置。
??讀取設置按鈕:將Stng.xml中各項功能的參數讀取到本軟件中。
??刪除設置按鈕:將Stng.xml文件刪除。
??重置設置按鈕:將本軟件的設置重置為默認。
??特別注意:如果把兩至多個設備放在同一房間里測試,有可能會出現嘯叫、聲音不完整、等問題,這是因為現在的麥克風都很靈敏了,一點小小的聲音都會被錄進去,設備之間會相互錄音,導致軟件無法正確識別回音,所以建議放在不同的房間里測試。如果實在要測試這種情況,就在設置里,Speex預處理器的設置里,關閉“使用自動增益控制”后再測試。
移植
??如果需要在自己的軟件中使用本軟件的音視頻功能,需要以下幾個步驟:
??C語言:
??1、將qedit.h、AdoInpt.h、AdoInpt.cpp、AdoOtpt.h、AdoOtpt.cpp、VdoInpt.h、VdoInpt.cpp、VdoOtpt.h、VdoOtpt.cpp、TkbkClnt.h、TkbkClnt.cpp、BdctClnt.h、BdctClnt.cpp、MediaPocsThrd.h、MediaPocsThrd.cpp、SrvrThrd.h、SrvrThrd.cpp、ClntMediaPocsThrd.h、ClntMediaPocsThrd.cpp和各個庫文件夾復制到自己的軟件中。
??2、如果自己的軟件已有傳輸協議:實現MediaPocsThrd結構體的UserInit、UserDstoy、UserPocs、UserMsg、UserDvcChg、UserReadAdoVdoInptFrm、UserWriteAdoOtptFrm、UserGetAdoOtptFrm、UserWriteVdoOtptFrm、UserGetVdoOtptFrm這些回調函數。
????如果自己的軟件沒有傳輸協議:實現SrvrThrd結構體的UserInit、UserDstoy、UserPocs、UserMsg、UserShowLog、UserShowToast、UserSrvrInit、UserSrvrDstoy、UserCnctInit、UserCnctDstoy、UserCnctSts、UserCnctRmtTkbkMode、UserCnctTstNtwkDly這些回調函數。
??????????????????實現ClntMediaPocsThrd結構體的UserInit、UserDstoy、UserPocs、UserMsg、UserDvcChg、UserShowLog、UserShowToast、UserTkbkClntCnctInit、UserTkbkClntCnctDstoy、UserTkbkClntCnctSts、UserTkbkClntMyTkbkIdx、UserTkbkClntLclTkbkMode、UserTkbkClntTkbkInfoInit、UserTkbkClntTkbkInfoDstoy、UserTkbkClntTkbkInfoRmtTkbkMode、UserTkbkClntTstNtwkDly、UserBdctClntInit、UserBdctClntDstoy、UserBdctClntCnctInit、UserBdctClntCnctDstoy、UserBdctClntCnctSts這些回調函數。
??3、調用Init()函數初始化結構體變量,然后調用結構體的相關設置函數,最后調用MediaPocsThrdStart()函數啟動該線程即可。
??4、當需要線程退出時,調用MediaPocsThrdRqirExit()和MediaPocsThrdDstoy()函數即可。
??C++語言:
??1、將qedit.h、AdoInpt.h、AdoInpt.cpp、AdoOtpt.h、AdoOtpt.cpp、VdoInpt.h、VdoInpt.cpp、VdoOtpt.h、VdoOtpt.cpp、TkbkClnt.h、TkbkClnt.cpp、BdctClnt.h、BdctClnt.cpp、MediaPocsThrd.h、MediaPocsThrd.cpp、SrvrThrd.h、SrvrThrd.cpp、ClntMediaPocsThrd.h、ClntMediaPocsThrd.cpp和各個庫文件夾復制到自己的軟件中。
??2、如果自己的軟件已有傳輸協議:繼承MediaPocsThrd媒體處理線程類,實現UserInit、UserDstoy、UserPocs、UserMsg、UserDvcChg、UserReadAdoVdoInptFrm、UserWriteAdoOtptFrm、UserGetAdoOtptFrm、UserWriteVdoOtptFrm、UserGetVdoOtptFrm這些回調成員函數。
????如果自己的軟件沒有傳輸協議:繼承SrvrThrd服務端線程類,實現UserInit、UserDstoy、UserPocs、UserMsg、UserShowLog、UserShowToast、UserSrvrInit、UserSrvrDstoy、UserCnctInit、UserCnctDstoy、UserCnctSts、UserCnctRmtTkbkMode、UserCnctTstNtwkDly這些回調成員函數。
??????????????????繼承ClntMediaPocsThrd客戶端媒體處理線程類,實現UserInit、UserDstoy、UserPocs、UserMsg、UserDvcChg、UserShowLog、UserShowToast、UserTkbkClntCnctInit、UserTkbkClntCnctDstoy、UserTkbkClntCnctSts、UserTkbkClntMyTkbkIdx、UserTkbkClntLclTkbkMode、UserTkbkClntTkbkInfoInit、UserTkbkClntTkbkInfoDstoy、UserTkbkClntTkbkInfoRmtTkbkMode、UserTkbkClntTstNtwkDly、UserBdctClntInit、UserBdctClntDstoy、UserBdctClntCnctInit、UserBdctClntCnctDstoy、UserBdctClntCnctSts這些回調成員函數。
??3、new這個繼承的類,然后先調用類的Init()成員函數,再調用相關設置成員函數,最后調用start()成員函數啟動該線程即可。
??4、當需要線程退出時,調用線程類的RqirExit()成員函數即可。
??如果有不需要的部分功能,則只需要修改該功能對應的宏開關即可。
??如果只移植部分功能,沒有移植MediaPocsThrd媒體處理線程類,則效果可能不好,因為MediaPocsThrd類做了很多優化。
??普通免費功能包括:WebRtc定點版聲學回音消除器、Speex預處理器的噪音抑制、WebRtc定點版噪音抑制器、WebRtc浮點版噪音抑制器、Speex預處理器、Speex編解碼器、Wave文件讀取器、Wave文件寫入器、音頻波形器、本端TCP協議服務端套接字、本端TCP協議客戶端套接字、本端UDP協議套接字。
??高級收費功能包括:Speex聲學回音消除器、WebRtc浮點版聲學回音消除器、WebRtc第三版聲學回音消除器、SpeexWebRtc三重聲學回音消除器、RNNoise噪音抑制器、OpenH264編解碼器、自己設計的自適應抖動緩沖器、Avi文件寫入器、本端高級UDP協議套接字。
??各個功能對應的文件如下:
??* Speex聲學回音消除器:SpeexDsp.h、Func_.lib/dll、SpeexDsp_.lib/dll。
??* WebRtc定點版聲學回音消除器:IsIcludWebRtc宏、WebRtc.h、Func_.lib/dll、WebRtc_.lib/dll。
??* WebRtc浮點版聲學回音消除器:IsIcludWebRtc宏、WebRtc.h、Func_.lib/dll、WebRtc_.lib/dll。
??* WebRtc第三版聲學回音消除器:IsIcludWebRtc3宏、WebRtc3.h、Func_.lib/dll、WebRtc_.lib/dll、WebRtc3_.lib/dll。
?? SpeexWebRtc三重聲學回音消除器:IsIcludSpeexWebRtcAec宏、SpeexWebRtcAec.h、Func_.lib/dll、SpeexDsp_.lib/dll、WebRtc_.lib/dll、WebRtc3_.lib/dll、SpeexWebRtcAec_.lib/dll。
?? WebRtc定點版噪音抑制器:IsIcludWebRtc宏、WebRtc.h、Func_.lib/dll、WebRtc_.lib/dll。
??* WebRtc浮點版噪音抑制器:IsIcludWebRtc宏、WebRtc.h、Func_.lib/dll、WebRtc_.lib/dll。
??* RNNoise噪音抑制器:IsIcludRNNoise宏、RNNoise.h、Func_.lib/dll、WebRtc_.lib/dll、RNNoise_.lib/dll。
?? Speex預處理器:SpeexDsp.h、Func_.lib/dll、SpeexDsp_.lib/dll。
??* Speex編解碼器:IsIcludSpeex宏、Speex.h、Func_.lib/dll、Speex_.lib/dll。
??* 音頻波形器:IsIcludAdoWavfm宏、AdoWavfm.h、Func_.lib/dll、AdoWavfm_.lib/dll。
??* OpenH264編解碼器:IsIcludOpenH264宏、OpenH264.h、Func_.lib/dll、OpenH264_.lib/dll。
??* 圖片處理:LibYUV.h、Func_.lib/dll、LibYUV_.lib/dll。
??* 音視頻自適應抖動緩沖器:IsIcludAjb宏、Ajb.h、Func_.lib/dll、Ajb_.lib/dll。
??* 本端TCP協議UDP協議套接字:Sokt.h、Func_.lib/dll、DataStruct_.lib/dll、Sokt_.lib/dll。
?? Wave文件Avi文件寫入讀取器:IsIcludMediaFile宏、MediaFile.h、Func_.lib/dll、MediaFile_.lib/dll。
命令
??本軟件支持通過命令行參數來設置,參數如下:
??-SrvrUrl xx://xx.xx.xx.xx:xxxx:表示設置服務端Url。
??-AddClntSrvrUrl xx://xx.xx.xx.xx:xxxx:表示添加客戶端的服務端Url。
??-None:表示選擇掛起對講模式。
??-Ado:表示選擇音頻對講模式。
??-Vdo:表示選擇視頻對講模式。
??-AdoVdo:表示選擇音視頻對講模式。
??-SaveStsToTxtFile xxx.txt:表示要保存狀態到xxx.txt文件,可以為相對或絕對完整路徑。
??-NoSaveStsToTxtFile:表示不保存狀態到Txt文件。
??-PrintLogShowToast:表示要打印Log日志,要顯示Toast。
??-NoPrintLogShowToast:表示不打印Log日志,不顯示Toast。
??-SaveAdoVdoInptOtptToAviFile xxx.avi:表示要保存音視頻輸入輸出到xxx.avi文件,可以為相對或絕對完整路徑。
??-NoSaveAdoVdoInptOtptToAviFile:表示不保存音視頻輸入輸出到Avi文件。
??-UseSystemAecNsAgc:表示要使用系統自帶的聲學回音消除器、噪音抑制器和自動增益控制器。
??-NoUseSystemAecNsAgc:表示不使用系統自帶的聲學回音消除器、噪音抑制器和自動增益控制器。
??-SaveAdoInptOtptToWaveFile AdoInptSrc.wav AdoInptRslt.wav AdoOtptSrc.wav:表示要分別保存音頻輸入原始、音頻輸入結果、音頻輸出原始到AdoInptSrc.wav AdoInptRslt.wav AdoOtptSrc.wav文件,可以為相對或絕對完整路徑。
??-NoSaveAdoInptOtptToWaveFile:表示不保存音頻輸入輸出到Wave文件。
??-VdoWndShowMode 0|1|2:表示設置視頻窗口的顯示模式,為0表示正常,為1表示垂直最大化排列,為2表示水平最大化排列。
??-VdoFrmSz Width Height:表示設置視頻幀的寬度和高度,單位為像素,只能為偶數,不能為奇數。
??-WndSz Width Height:表示設置窗口的寬度和高度,單位為像素。
??-ShowWnd:表示顯示窗口。
??-HideWnd:表示隱藏窗口。
??-MinWnd:表示最小化窗口。
??-MaxWnd:表示最大化窗口。
??-SrvrCreate:表示創建服務端。本參數要放在所有參數的最后。
??-ClntCnct 0|1|2|x:表示客戶端連接服務端,數字為客戶端列表序號。本參數要放在所有參數的最后。
??-BdctInit:表示廣播初始化。本參數要放在所有參數的最后。
??例如:“Windows下音視頻對講演示程序.exe -SrvrUrl Audp://192.168.0.100:12345 -AdoVdo -VdoFrmSz 1280 960 -WndSz 1000 900 -SrvrCreate”:表示設置服務端Url為高級UDP協議、IP地址為192.168.0.100、端口號為12345,選擇音視頻對講模式,設置視頻幀的寬度為1280像素、高度為960像素。設置窗口的寬度為1000像素、高度為900像素,最后創建服務端。
??例如:“Windows下音視頻對講演示程序.exe -AddClntSrvrUrl Audp://192.168.0.100:12345 -AdoVdo -VdoFrmSz 1280 960 -WndSz 1000 900 -ClntCnct 0”:表示添加客戶端的服務端Url為高級UDP協議、IP地址為192.168.0.100、端口號為12345,選擇音視頻對講模式,設置視頻幀的寬度為1280像素、高度為960像素。設置窗口的寬度為1000像素、高度為900像素,最后連接客戶端列表序號為0的服務端。
注意
??從老版本更新到新版本時,類文件和庫文件全部都要更新,不能只更新類文件或庫文件,否則會導致意想不到的問題。
??本軟件測試的網絡延遲包括兩端來回的網絡延遲,還包括兩端對數據包的處理延遲,所以未對講時延遲低一點,對講開始后延遲會高一點。
??如果要使用8000Hz采樣頻率時,最好不要使用RNNoise噪音抑制器,因為它可能對8000Hz的聲音抑制非常強烈。
??本軟件不支持音樂,尤其是RNNoise噪音抑制器可能對音樂的抑制非常強烈。
??某些Windows設備的軟硬件環境可能存在問題,從而可能會導致聲學回音消除失敗,這種情況必須要先解決這些問題。
??某些Windows設備的系統自帶聲學回音消除器、噪音抑制器和自動增益控制器可能會不支持音頻輸入設備,這種情況可以先關閉后再試試。
??保存音視頻輸入輸出的AdoVdoInptOtpt.avi文件不能直接播放,需要使用FFmpeg命令轉碼后才能播放,建議用VLC播放器,轉碼命令為:ffmpeg -i AdoVdoInptOtpt.avi -filter_complex "[0:
其他
??本軟件采用了Speex的1.2.1版本、SpeexDsp的1.2.1版本、WebRtc的2019年7月份版本、WebRtc的2024年8月份版本、OpenH264的2.5.0版本為基礎,并進行了大量優化。
??討論QQ群:511046632 歡迎大家參與測試和討論!
??本人QQ號:280604597 赤勇玄心行天道
??本人微信:qq280604597 赤勇玄心行天道
??本人博客:http://www.rzrgm.cn/gaoyaguo
???????https://blog.csdn.net/cyz7758520?type=blog
??Windows版源代碼:https://github.com/cyz7758520/Windows_audio_talkback_demo_program
???????????https://gitee.com/chen_yi_ze/Windows_audio_talkback_demo_program
???????????https://gitcode.com/cyz77585201/Windows_audio_talkback_demo_program
??Android版源代碼:https://github.com/cyz7758520/Android_audio_talkback_demo_program
???????????https://gitee.com/chen_yi_ze/Android_audio_talkback_demo_program
???????????https://gitcode.com/cyz77585201/Android_audio_talkback_demo_program
版權
??Speex:https://gitlab.xiph.org/xiph/speex/-/blob/master/COPYING
??WebRtc:https://gitlab.com/webrtc-mirror/webrtc/-/blob/master/LICENSE
??RNNoise:https://gitlab.xiph.org/xiph/rnnoise/-/blob/master/COPYING
??OpenH264:https://github.com/cisco/openh264/blob/master/LICENSE
??LibYUV:https://github.com/lemenkov/libyuv/blob/master/LICENSE
??TinyXml2:https://github.com/leethomason/tinyxml2/blob/master/LICENSE.txt
感謝
??感謝 WELEN、善書、陳國福 對 Speex、WebRTC 的指點!
函數
MediaPocsThrd媒體處理線程類的回調成員函數
函數名稱:UserInit
功能說明:用戶定義的初始化函數,在本線程剛啟動時回調一次。
參數說明:MediaPocsThrdPt:[輸入],存放媒體處理線程的指針。
返回說明:無。
函數名稱:UserDstoy
功能說明:用戶定義的銷毀函數,在本線程退出時回調一次。
參數說明:MediaPocsThrdPt:[輸入],存放媒體處理線程的指針。
返回說明:無。
函數名稱:UserPocs
功能說明:用戶定義的處理函數,在本線程運行時每隔1毫秒就回調一次。
參數說明:MediaPocsThrdPt:[輸入],存放媒體處理線程的指針。
返回說明:無。
函數名稱:UserMsg
功能說明:用戶定義的消息函數,在接收用戶消息時回調一次。
參數說明:MediaPocsThrdPt:[輸入],存放媒體處理線程的指針。
?????MsgTyp:[輸入],存放消息類型。
?????MsgParmPt:[輸入],存放消息參數的指針。如果沒有消息參數,則本參數為NULL。
?????MsgParmLenByt:[輸入],存放消息參數的長度,單位為字節。如果沒有消息參數,則本參數為0。
返回說明:本次消息處理結果。
函數名稱:UserDvcChg
功能說明:用戶定義的設備改變函數,在音頻輸入設備、音頻輸出設備、視頻輸入設備改變時回調一次。
參數說明:MediaPocsThrdPt:[輸入],存放媒體處理線程的指針。
?????AdoInptDvcNameVstrPt:[輸入],存放音頻輸入設備名稱動態字符串的指針。如果音頻輸入設備沒有改變,則本參數為NULL。
?????AdoOtptDvcNameVstrPt:[輸入],存放音頻輸出設備名稱動態字符串的指針。如果音頻輸出設備沒有改變,則本參數為NULL。
?????VdoInptDvcNameVstrPt:[輸入],存放視頻輸入設備名稱動態字符串的指針。如果視頻輸入設備沒有改變,則本參數為NULL。
返回說明:無。
函數名稱:UserReadAdoVdoInptFrm
功能說明:用戶定義的讀取音視頻輸入幀函數,在讀取到一個音頻輸入幀或視頻輸入幀并處理完后回調一次。如果不使用音頻輸入和視頻輸入,則本函數不會被回調。
參數說明:MediaPocsThrdPt:[輸入],存放媒體處理線程的指針。
?????AdoInptPcmSrcFrmPt:[輸入],存放音頻輸入Pcm格式原始幀的指針,就是未經過聲學回音消除、噪音抑制、自動增益控制的音頻幀。如果不使用音頻輸入,則本參數為NULL。
?????AdoInptPcmRsltFrmPt:[輸入],存放音頻輸入Pcm格式結果幀的指針,就是已經過聲學回音消除、噪音抑制、自動增益控制的音頻幀。如果不使用音頻輸入,則本參數為NULL。
?????AdoInptPcmFrmLenUnit:[輸入],存放音頻輸入Pcm格式幀的長度,單位為采樣單元。如果不使用音頻輸入,則本參數無意義。
?????AdoInptPcmRsltFrmVoiceActSts:[輸入],存放音頻輸入Pcm格式結果幀的語音活動狀態,為非0表示有語音活動,為0表示無語音活動。如果不使用音頻輸入,則本參數無意義。
?????AdoInptEncdRsltFrmPt:[輸入],存放音頻輸入已編碼格式結果幀的指針。如果不使用音頻輸入,或音頻輸入編碼器要使用Pcm原始數據,則本參數為NULL。
?????AdoInptEncdRsltFrmLenByt:[輸入],存放音頻輸入已編碼格式結果幀的長度,單位為字節。如果不使用音頻輸入,或音頻輸入編碼器要使用Pcm原始數據,則本參數無意義。
?????AdoInptEncdRsltFrmIsNeedTrans:[輸入],存放音頻輸入已編碼格式結果幀是否需要傳輸,為非0表示需要傳輸,為0表示不需要傳輸。如果不使用音頻輸入,或音頻輸入編碼器要使用Pcm原始數據,則本參數無意義。
?????VdoInptBgraSrcFrmPt:[輸入],存放視頻輸入Bgra8888格式原始幀的指針。如果不使用視頻輸入,或本次沒有讀取到視頻輸入幀,則本參數為NULL。
?????VdoInptBgraSrcFrmWidth:[輸入],存放視頻輸入Bgra8888格式原始幀的寬度,單位為像素。如果不使用視頻輸入,或本次沒有讀取到視頻輸入幀,則本參數無意義。
?????VdoInptBgraSrcFrmHeight:[輸入],存放視頻輸入Bgra8888格式原始幀的高度,單位為像素。如果不使用視頻輸入,或本次沒有讀取到視頻輸入幀,則本參數無意義。
?????VdoInptBgraSrcFrmLenByt:[輸入],存放視頻輸入Bgra8888格式原始幀的長度,單位為字節。如果不使用視頻輸入,或本次沒有讀取到視頻輸入幀,則本參數無意義。
?????VdoInptYu12RsltFrmPt:[輸入],存放視頻輸入Yu12格式結果幀的指針。如果不使用視頻輸入,或本次沒有讀取到視頻輸入幀,則本參數為NULL。
?????VdoInptYu12RsltFrmWidth:[輸入],存放視頻輸入Yu12格式結果幀的寬度,單位為像素。如果不使用視頻輸入,或本次沒有讀取到視頻輸入幀,則本參數無意義。
?????VdoInptYu12RsltFrmHeight:[輸入],存放視頻輸入Yu12格式結果幀的高度,單位為像素。如果不使用視頻輸入,或本次沒有讀取到視頻輸入幀,則本參數無意義。
?????VdoInptYu12RsltFrmLenByt:[輸入],存放視頻輸入Yu12格式結果幀的長度,單位為字節。如果不使用視頻輸入,或本次沒有讀取到視頻輸入幀,則本參數無意義。
?????VdoInptEncdRsltFrmPt:[輸入],存放視頻輸入已編碼格式結果幀的指針。如果不使用視頻輸入,或本次沒有讀取到視頻輸入幀,或視頻輸入編碼器要使用Yu12原始數據,則本參數為為NULL。
?????VdoInptEncdRsltFrmLenByt:[輸入],存放視頻輸入已編碼格式結果幀的長度,單位為字節。如果不使用視頻輸入,或本次沒有讀取到視頻輸入幀,或視頻輸入編碼器要使用Yu12原始數據,則本參數無意義。
返回說明:無。
函數名稱:UserWriteAdoOtptFrm
功能說明:用戶定義的寫入音頻輸出幀函數,在需要寫入一個音頻輸出幀時回調一次。如果不使用音頻輸出,則本函數不會被回調。注意:本函數不是在媒體處理線程中執行的,而是在音頻輸出線程中執行的,所以本函數應盡量在一瞬間完成執行,否則會導致音頻輸入輸出幀不同步,從而導致聲學回音消除失敗。
參數說明:MediaPocsThrdPt:[輸入],存放媒體處理線程的指針。
?????AdoOtptStrmIdx:[輸入],存放音頻輸出流索引。
?????AdoOtptPcmSrcFrmPt:[輸出],存放音頻輸出Pcm格式原始幀的指針。如果音頻輸出解碼器不使用Pcm原始數據,則本參數為NULL。
?????AdoOtptPcmFrmLenUnit:[輸入],存放音頻輸出Pcm格式幀的長度,單位為采樣單元。如果音頻輸出解碼器不使用Pcm原始數據,則本參數無意義。
?????AdoOtptEncdSrcFrmPt:[輸出],存放音頻輸出已編碼格式原始幀的指針。如果音頻輸出解碼器要使用Pcm原始數據,則本參數為NULL。
?????AdoOtptEncdSrcFrmSzByt:[輸入],存放音頻輸出已編碼格式原始幀的大小,單位為字節。如果音頻輸出解碼器要使用Pcm原始數據,則本參數無意義。
?????AdoOtptEncdSrcFrmLenBytPt:[輸出],存放音頻輸出已編碼格式原始幀的長度的指針,單位為字節。如果音頻輸出解碼器要使用Pcm原始數據,則本參數為NULL。
返回說明:無。
函數名稱:UserGetAdoOtptFrm
功能說明:用戶定義的獲取音頻輸出幀函數,在解碼完一個已編碼音頻輸出幀時回調一次。如果不使用音頻輸出,則本函數不會被回調。注意:本函數不是在媒體處理線程中執行的,而是在音頻輸出線程中執行的,所以本函數應盡量在一瞬間完成執行,否則會導致音頻輸入輸出幀不同步,從而導致聲學回音消除失敗。
參數說明:MediaPocsThrdPt:[輸入],存放媒體處理線程的指針。
?????AdoOtptStrmIdx:[輸入],存放音頻輸出流索引。
?????AdoOtptPcmSrcFrmPt:[輸入],存放音頻輸出Pcm格式原始幀的指針。
?????AdoOtptPcmFrmLenUnit:[輸入],存放音頻輸出Pcm格式幀的長度,單位為采樣單元。
?????AdoOtptEncdSrcFrmPt:[輸入],存放音頻輸出已編碼格式原始幀的指針。如果音頻輸出解碼器要使用Pcm原始數據,則本參數為NULL。
?????AdoOtptEncdSrcFrmLenByt:[輸入],存放音頻輸出已編碼格式原始幀的長度,單位為字節。如果音頻輸出解碼器要使用Pcm原始數據,則本參數無意義。
返回說明:無。
函數名稱:UserWriteVdoOtptFrm
功能說明:用戶定義的寫入視頻輸出幀函數,在可以顯示一個視頻輸出幀時回調一次。如果不使用視頻輸出,則本函數不會被回調。注意:本函數不是在媒體處理線程中執行的,而是在視頻輸出線程中執行的,所以本函數應盡量在一瞬間完成執行,否則會導致音視頻輸出幀不同步。
參數說明:MediaPocsThrdPt:[輸入],存放媒體處理線程的指針。
?????VdoOtptStrmIdx:[輸入],存放視頻輸出流索引。
?????VdoOtptYu12SrcFrmPt:[輸出],存放視頻輸出Yu12格式原始幀的指針。如果視頻輸出解碼器不使用Yu12原始數據,則本參數為NULL。
?????VdoOtptYu12SrcFrmWidthPt:[輸出],存放視頻輸出Yu12格式原始幀寬度的指針,單位為像素。如果視頻輸出解碼器不使用Yu12原始數據,則本參數為NULL。
?????VdoOtptYu12SrcFrmHeightPt:[輸出],存放視頻輸出Yu12格式原始幀高度的指針,單位為像素。如果視頻輸出解碼器不使用Yu12原始數據,則本參數為NULL。
?????VdoOtptEncdSrcFrmPt:[輸出],存放視頻輸出已編碼格式原始幀的指針。如果視頻輸出解碼器要使用Yu12原始數據,則本參數為NULL。
?????VdoOtptEncdSrcFrmSzByt:[輸入],存放視頻輸出已編碼格式原始幀的大小,單位為字節。如果視頻輸出解碼器要使用Yu12原始數據,則本參數無意義。
?????VdoOtptEncdSrcFrmLenBytPt:[輸出],輸入時,存放視頻輸出已編碼格式原始幀的長度的指針,單位為字節。如果視頻輸出解碼器要使用Yu12原始數據,則本參數為NULL。
返回說明:無。
函數名稱:UserGetVdoOtptFrm
功能說明:用戶定義的獲取視頻輸出幀函數,在解碼完一個已編碼視頻輸出幀時回調一次。如果不使用視頻輸出,則本函數不會被回調。注意:本函數不是在媒體處理線程中執行的,而是在視頻輸出線程中執行的,所以本函數應盡量在一瞬間完成執行,否則會導致音視頻輸出幀不同步。
參數說明:MediaPocsThrdPt:[輸入],存放媒體處理線程的指針。
?????VdoOtptStrmIdx:[輸入],存放視頻輸出流索引。
?????VdoOtptYu12SrcFrmPt:[輸入],存放視頻輸出Yu12格式原始幀的指針。
?????VdoOtptYu12SrcFrmWidth:[輸入],存放視頻輸出Yu12格式原始幀的寬度,單位為像素。
?????VdoOtptYu12SrcFrmHeight:[輸入],存放視頻輸出Yu12格式原始幀的高度,單位為像素。
?????VdoOtptEncdSrcFrmPt:[輸入],存放視頻輸出已編碼格式原始幀的指針。如果視頻輸出解碼器要使用Yu12原始數據,則本參數為NULL。
?????VdoOtptEncdSrcFrmLenByt:[輸入],存放視頻輸出已編碼格式原始幀的長度,單位為字節。如果視頻輸出解碼器要使用Yu12原始數據,則本參數無意義。
返回說明:無。
SrvrThrd服務端線程類的回調成員函數
函數名稱:UserInit
功能說明:用戶定義的初始化函數,在本線程剛啟動時回調一次。
參數說明:SrvrThrdPt:[輸入],存放服務端線程的指針。
返回說明:無。
函數名稱:UserDstoy
功能說明:用戶定義的銷毀函數,在本線程退出時回調一次。
參數說明:SrvrThrdPt:[輸入],存放服務端線程的指針。
返回說明:無。
函數名稱:UserPocs
功能說明:用戶定義的處理函數,在本線程運行時每隔1毫秒就回調一次。
參數說明:SrvrThrdPt:[輸入],存放服務端線程的指針。
返回說明:無。
函數名稱:UserMsg
功能說明:用戶定義的消息函數,在接收用戶消息時回調一次。
參數說明:SrvrThrdPt:[輸入],存放服務端線程的指針。
?????MsgTyp:[輸入],存放消息類型。
?????MsgParmPt:[輸入],存放消息參數的指針。如果沒有消息參數,則本參數為NULL。
?????MsgParmLenByt:[輸入],存放消息參數的長度,單位為字節。如果沒有消息參數,則本參數為0。
返回說明:本次消息處理結果。
函數名稱:UserShowLog
功能說明:用戶定義的顯示日志函數。
函數名稱:UserShowToast
功能說明:用戶定義的顯示Toast函數。
函數名稱:UserSrvrInit
功能說明:用戶定義的服務端初始化函數。
函數名稱:UserSrvrDstoy
功能說明:用戶定義的服務端銷毀函數。
函數名稱:UserCnctInit
功能說明:用戶定義的連接初始化函數。
函數名稱:UserCnctDstoy
功能說明:用戶定義的連接銷毀函數。
函數名稱:UserCnctSts
功能說明:用戶定義的連接狀態函數。
函數名稱:UserCnctRmtTkbkMode
功能說明:用戶定義的連接遠端對講模式函數。
函數名稱:UserCnctTstNtwkDly
功能說明:用戶定義的連接測試網絡延遲函數。
ClntMediaPocsThrd客戶端媒體處理線程類的回調成員函數
函數名稱:UserInit
功能說明:用戶定義的初始化函數,在本線程剛啟動時回調一次。
參數說明:ClntMediaPocsThrdPt:[輸入],存放客戶端媒體處理線程的指針。
返回說明:無。
函數名稱:UserDstoy
功能說明:用戶定義的銷毀函數,在本線程退出時回調一次。
參數說明:ClntMediaPocsThrdPt:[輸入],存放客戶端媒體處理線程的指針。
返回說明:無。
函數名稱:UserPocs
功能說明:用戶定義的處理函數,在本線程運行時每隔1毫秒就回調一次。
參數說明:ClntMediaPocsThrdPt:[輸入],存放客戶端媒體處理線程的指針。
返回說明:無。
函數名稱:UserMsg
功能說明:用戶定義的消息函數,在接收用戶消息時回調一次。
參數說明:ClntMediaPocsThrdPt:[輸入],存放客戶端媒體處理線程的指針。
?????MsgTyp:[輸入],存放消息類型。
?????MsgParmPt:[輸入],存放消息參數的指針。如果沒有消息參數,則本參數為NULL。
?????MsgParmLenByt:[輸入],存放消息參數的長度,單位為字節。如果沒有消息參數,則本參數為0。
返回說明:本次消息處理結果。
函數名稱:UserDvcChg
功能說明:用戶定義的設備改變函數,在音頻輸入設備、音頻輸出設備、視頻輸入設備改變時回調一次。
參數說明:ClntMediaPocsThrdPt:[輸入],存放客戶端媒體處理線程的指針。
?????AdoInptDvcNameVstrPt:[輸入],存放音頻輸入設備名稱動態字符串的指針。如果音頻輸入設備沒有改變,則本參數為NULL。
?????AdoOtptDvcNameVstrPt:[輸入],存放音頻輸出設備名稱動態字符串的指針。如果音頻輸出設備沒有改變,則本參數為NULL。
?????VdoInptDvcNameVstrPt:[輸入],存放視頻輸入設備名稱動態字符串的指針。如果視頻輸入設備沒有改變,則本參數為NULL。
返回說明:無。
函數名稱:UserShowLog
功能說明:用戶定義的顯示日志函數。
函數名稱:UserShowToast
功能說明:用戶定義的顯示Toast函數。
函數名稱:UserTkbkClntCnctInit
功能說明:用戶定義的對講客戶端連接初始化函數。
函數名稱:UserTkbkClntCnctDstoy
功能說明:用戶定義的對講客戶端連接銷毀函數。
函數名稱:UserTkbkClntCnctSts
功能說明:用戶定義的對講客戶端連接狀態函數。
函數名稱:UserTkbkClntMyTkbkIdx
功能說明:用戶定義的對講客戶端我的對講索引函數。
函數名稱:UserTkbkClntLclTkbkMode
功能說明:用戶定義的對講客戶端本端對講模式函數。
函數名稱:UserTkbkClntTkbkInfoInit
功能說明:用戶定義的對講客戶端對講信息初始化函數。
函數名稱:UserTkbkClntTkbkInfoDstoy
功能說明:用戶定義的對講客戶端對講信息銷毀函數。
函數名稱:UserTkbkClntTkbkInfoRmtTkbkMode
功能說明:用戶定義的對講客戶端對講信息遠端對講模式函數。
函數名稱:UserTkbkClntTstNtwkDly
功能說明:用戶定義的對講客戶端測試網絡延遲函數。
函數名稱:UserBdctClntInit
功能說明:用戶定義的廣播客戶端初始化函數。
函數名稱:UserBdctClntDstoy
功能說明:用戶定義的廣播客戶端銷毀函數。
函數名稱:UserBdctClntCnctInit
功能說明:用戶定義的廣播客戶端連接初始化函數。
函數名稱:UserBdctClntCnctDstoy
功能說明:用戶定義的廣播客戶端連接銷毀函數。
函數名稱:UserBdctClntCnctSts
功能說明:用戶定義的廣播客戶端連接狀態函數。

浙公網安備 33010602011771號