隨著國際政治經(jīng)濟(jì)形勢的變化,尤其是中美科技競爭日益激烈,軟件信創(chuàng)國產(chǎn)化已經(jīng)迫在眉睫。在這種大環(huán)境下,有客戶需要將現(xiàn)有的Windows軟件逐步遷移到信創(chuàng)國產(chǎn)化基礎(chǔ)設(shè)施上,比如需要在銀河麒麟或統(tǒng)信UOS上實(shí)現(xiàn)RTMP推流攝像頭視頻和麥克風(fēng)聲音到流媒體服務(wù)器(如nginx或srs),那么這個(gè)要如何實(shí)現(xiàn)了?
隨著國際政治經(jīng)濟(jì)形勢的變化,尤其是中美科技競爭日益激烈,軟件信創(chuàng)國產(chǎn)化已經(jīng)迫在眉睫。在這種大環(huán)境下,我們將現(xiàn)有的Windows版軟件逐步遷移到信創(chuàng)國產(chǎn)化基礎(chǔ)設(shè)施上,適配國產(chǎn)操作系統(tǒng)(如銀河麒麟、統(tǒng)信UOS)、國信芯片(如飛騰、鯤鵬、海光、龍芯、麒麟)以及國產(chǎn)DB。
我們經(jīng)常有這樣的需求,比如需要在銀河麒麟或統(tǒng)信UOS上實(shí)現(xiàn)RTMP推流攝像頭視頻和麥克風(fēng)聲音到流媒體服務(wù)器(如nginx或srs),那么這個(gè)要如何實(shí)現(xiàn)了?
要完成這個(gè)功能,具體來說,需要解決如下幾個(gè)技術(shù)問題:
(1)麥克風(fēng)數(shù)據(jù)采集。
(2)攝像頭數(shù)據(jù)采集。
(3)音頻數(shù)據(jù)AAC編碼。
(4)視頻數(shù)據(jù)H264編碼。
(5)將編碼后的數(shù)據(jù)按RTMP協(xié)議推送給流媒體服務(wù)器。
(6)通過時(shí)間戳(PTS)保證音頻視頻的同步。
我們使用跨平臺(tái)的 .NET Core (C#),跨平臺(tái)的UI框架Avalonia,再借助 LinuxCapture 和 NPusher.NetCore 這兩個(gè)組件,就很容易采集到麥克風(fēng)和攝像頭的數(shù)據(jù),并且將它們推流到流媒體服務(wù)器上。
我們先看看推流程序在銀河麒麟上的運(yùn)行效果:
兩個(gè)下拉列表可以選擇要使用的麥克風(fēng)和攝像頭設(shè)備。
點(diǎn)擊“開始”按鈕,麥克風(fēng)和攝像頭將開始采集數(shù)據(jù),并推流至流媒體Server。
如果中途網(wǎng)絡(luò)斷開,推流將會(huì)中斷,并嘗試自動(dòng)重連,重連成功后,將恢復(fù)推流。
點(diǎn)擊“結(jié)束”按鈕,則將結(jié)束音視頻采集和推流。
(1)ICameraCapturer是攝像頭視頻采集組件;IMicrophoneCapturer是麥克風(fēng)聲音采集組件。
(2)我們可以通過調(diào)用CapturerFactory的CreateXXXX方法來創(chuàng)建對應(yīng)的采集器實(shí)例。
(3)得到采集器實(shí)例后,調(diào)用Start方法,即可開始采集;調(diào)用Stop方法,即停止采集。
(4)采集得到的數(shù)據(jù),將通過相應(yīng)的事件(ImageCaptured、AudioCaptured)暴露出來,我們預(yù)定這些事件,即可拿到采集的數(shù)據(jù)。
(5)將拿到的數(shù)據(jù)喂給IStreamPusher,就會(huì)將其推流到指定的流媒體服務(wù)器。
我們這里列一下核心代碼,完整的代碼大家可以從文末下載源碼進(jìn)行了解。
創(chuàng)建并啟動(dòng)采集器:
創(chuàng)建并啟動(dòng)推流器:
將采集到的數(shù)據(jù)喂給推流器:
推流器內(nèi)部會(huì)對音視頻數(shù)據(jù)進(jìn)行編碼,并依據(jù)RTMP協(xié)議發(fā)送給流媒體服務(wù)器。
停止推流:
如果要在銀河麒麟或統(tǒng)信UOS上運(yùn)行這里的RTMP推流程序,則需要現(xiàn)在目標(biāo)操作系統(tǒng)上安裝.NET Core 3.1。
然后將VS生成目錄下的 netcoreapp3.1 文件夾拷貝到目標(biāo)電腦上,進(jìn)入netcoreapp3.1文件夾,打開終端,并在終端中輸入如下命令:
回車運(yùn)行后,就會(huì)出現(xiàn)前面截圖的UI界面,然后我們就可以預(yù)覽攝像頭,并開始推流麥克風(fēng)攝像頭了。
Oraycn.Avalonias.PusherDemo.rar
源碼中包含的非托管庫是X64架構(gòu)的,如果需要在其它架構(gòu)的國產(chǎn)芯片上運(yùn)行該程序,可以聯(lián)系我獲取對應(yīng)架構(gòu)的非托管庫。
小編推薦閱讀國產(chǎn)操作系統(tǒng)上實(shí)現(xiàn)RTMP推流攝像頭視頻和麥克風(fēng)聲音到流媒體服務(wù)器
閱讀使用Python讀取和導(dǎo)出NetCDF格式的多時(shí)相柵格文件
閱讀多租戶系統(tǒng)數(shù)據(jù)權(quán)限設(shè)計(jì)與RuoYi系統(tǒng)的借鑒
閱讀count(*)、count(1)哪個(gè)更快?面試必問:通宵整理的十道經(jīng)典MySQL必問面試題
閱讀從需求分析、產(chǎn)品設(shè)計(jì)到部署交付各階段說明
閱讀如何利用七牛云進(jìn)行數(shù)據(jù)備份和刪除
閱讀強(qiáng)化學(xué)習(xí)筆記之【ACE:Off-PolicyActor-CriticwithCausality-AwareEntropyRegularization】
閱讀使用MailKit在.NET Core中收發(fā)郵件的完整示例
閱讀WiFi基礎(chǔ)(六):天線基礎(chǔ)知識(shí)
閱讀OpenAI官方開源多智能體框架Swarm,社區(qū)反響熱烈
閱讀Vue-Vben-Admin:功能強(qiáng)大的Vue3后臺(tái)管理系統(tǒng)模板
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]
湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2024 haote.com 好特網(wǎng)