隨著國際政治經(jīng)濟形勢的變化,尤其是中美科技競爭日益激烈,軟件信創(chuàng)國產(chǎn)化已經(jīng)迫在眉睫。在這種大環(huán)境下,有客戶需要將現(xiàn)有的Windows軟件逐步遷移到信創(chuàng)國產(chǎn)化基礎(chǔ)設(shè)施上,比如需要在銀河麒麟或統(tǒng)信UOS上實現(xiàn)RTMP推流攝像頭視頻和麥克風聲音到流媒體服務(wù)器(如nginx或srs),那么這個要如何實現(xiàn)了?
隨著國際政治經(jīng)濟形勢的變化,尤其是中美科技競爭日益激烈,軟件信創(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上實現(xiàn)RTMP推流攝像頭視頻和麥克風聲音到流媒體服務(wù)器(如nginx或srs),那么這個要如何實現(xiàn)了?
要完成這個功能,具體來說,需要解決如下幾個技術(shù)問題:
(1)麥克風數(shù)據(jù)采集。
(2)攝像頭數(shù)據(jù)采集。
(3)音頻數(shù)據(jù)AAC編碼。
(4)視頻數(shù)據(jù)H264編碼。
(5)將編碼后的數(shù)據(jù)按RTMP協(xié)議推送給流媒體服務(wù)器。
(6)通過時間戳(PTS)保證音頻視頻的同步。
我們使用跨平臺的 .NET Core (C#),跨平臺的UI框架Avalonia,再借助 LinuxCapture 和 NPusher.NetCore 這兩個組件,就很容易采集到麥克風和攝像頭的數(shù)據(jù),并且將它們推流到流媒體服務(wù)器上。
我們先看看推流程序在銀河麒麟上的運行效果:
兩個下拉列表可以選擇要使用的麥克風和攝像頭設(shè)備。
點擊“開始”按鈕,麥克風和攝像頭將開始采集數(shù)據(jù),并推流至流媒體Server。
如果中途網(wǎng)絡(luò)斷開,推流將會中斷,并嘗試自動重連,重連成功后,將恢復(fù)推流。
點擊“結(jié)束”按鈕,則將結(jié)束音視頻采集和推流。
(1)ICameraCapturer是攝像頭視頻采集組件;IMicrophoneCapturer是麥克風聲音采集組件。
(2)我們可以通過調(diào)用CapturerFactory的CreateXXXX方法來創(chuàng)建對應(yīng)的采集器實例。
(3)得到采集器實例后,調(diào)用Start方法,即可開始采集;調(diào)用Stop方法,即停止采集。
(4)采集得到的數(shù)據(jù),將通過相應(yīng)的事件(ImageCaptured、AudioCaptured)暴露出來,我們預(yù)定這些事件,即可拿到采集的數(shù)據(jù)。
(5)將拿到的數(shù)據(jù)喂給IStreamPusher,就會將其推流到指定的流媒體服務(wù)器。
我們這里列一下核心代碼,完整的代碼大家可以從文末下載源碼進行了解。
創(chuàng)建并啟動采集器:
創(chuàng)建并啟動推流器:
將采集到的數(shù)據(jù)喂給推流器:
推流器內(nèi)部會對音視頻數(shù)據(jù)進行編碼,并依據(jù)RTMP協(xié)議發(fā)送給流媒體服務(wù)器。
停止推流:
如果要在銀河麒麟或統(tǒng)信UOS上運行這里的RTMP推流程序,則需要現(xiàn)在目標操作系統(tǒng)上安裝.NET Core 3.1。
然后將VS生成目錄下的 netcoreapp3.1 文件夾拷貝到目標電腦上,進入netcoreapp3.1文件夾,打開終端,并在終端中輸入如下命令:
回車運行后,就會出現(xiàn)前面截圖的UI界面,然后我們就可以預(yù)覽攝像頭,并開始推流麥克風攝像頭了。
Oraycn.Avalonias.PusherDemo.rar
源碼中包含的非托管庫是X64架構(gòu)的,如果需要在其它架構(gòu)的國產(chǎn)芯片上運行該程序,可以聯(lián)系我獲取對應(yīng)架構(gòu)的非托管庫。
小編推薦閱讀MethodTimer:一個輕量級的.NET運行耗時統(tǒng)計庫
閱讀構(gòu)建人工智能模型基礎(chǔ):TFDS和Keras的完美搭配
閱讀創(chuàng)建鴻蒙應(yīng)用的橫屏顯示直尺應(yīng)用全程解析
閱讀WiFi基礎(chǔ)(七):WiFi漫游與WiFi組網(wǎng)
閱讀如何使用 Pytorch 中的 DataSet 和 DataLoader
閱讀golang slice相關(guān)常見的性能優(yōu)化手段
閱讀連接Elasticsearch服務(wù)器的Python代碼示例
閱讀國產(chǎn)操作系統(tǒng)上實現(xiàn)RTMP推流攝像頭視頻和麥克風聲音到流媒體服務(wù)器
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]
湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2024 haote.com 好特網(wǎng)