午夜欧美福利,日韩欧美不卡在线,欧美一区福利,99久久综合,国产色啪午夜免费视频,亚洲va久久久久综合,5252色欧美在线男人的天堂

DAV首頁(yè)
數(shù)字音視工程網(wǎng)

微信公眾號(hào)

數(shù)字音視工程網(wǎng)

手機(jī)DAV

null
null
null
卓華,
null
null
null
null
null
null

我的位置:

share

淺談多平臺(tái)音視頻同屏開發(fā)技術(shù)

來(lái)源:四川湖山電器股份有限公司        編輯:ZZZ    2024-09-24 10:13:03     加入收藏

音視頻同屏處理作為一項(xiàng)核心基礎(chǔ)的關(guān)鍵技術(shù)被廣泛應(yīng)用于無(wú)紙化會(huì)議、課堂教學(xué)系統(tǒng)等多媒體融合應(yīng)用場(chǎng)景中。

淺談多平臺(tái)音視頻同屏開發(fā)技術(shù)

四川湖山電器股份有限公司 陳柯宇

 

  引言

  音視頻同屏處理作為一項(xiàng)核心基礎(chǔ)的關(guān)鍵技術(shù)被廣泛應(yīng)用于無(wú)紙化會(huì)議、課堂教學(xué)系統(tǒng)等多媒體融合應(yīng)用場(chǎng)景中。音視頻同屏技術(shù)本身也集中了音視頻采集、編解碼和網(wǎng)絡(luò)傳輸?shù)榷囝I(lǐng)域的技術(shù),內(nèi)容豐富多樣。隨著應(yīng)用范圍的不斷增加,特別是國(guó)產(chǎn)化主機(jī)和操作系統(tǒng)平臺(tái)的應(yīng)用普及不斷推進(jìn),音視頻同屏處理技術(shù)需要適配應(yīng)用于各種異構(gòu)平臺(tái)上,這一訴求更加豐富了音視頻同屏技術(shù)的涵蓋范圍。

  本文結(jié)合本公司產(chǎn)品實(shí)踐,結(jié)合較為當(dāng)前企業(yè)級(jí)應(yīng)用較為主流Windows和Linux操作系統(tǒng)平臺(tái),提出了適用于指定平臺(tái)的端到端音視頻同屏技術(shù)方案。

 

  系統(tǒng)架構(gòu)設(shè)計(jì)

  系統(tǒng)架構(gòu)由以下幾個(gè)主要節(jié)點(diǎn)組成:

  1. 同屏推送端

  采集本地設(shè)備的音視頻數(shù)據(jù),對(duì)音視頻數(shù)據(jù)進(jìn)行編碼壓縮,將編碼壓縮后的音視頻數(shù)據(jù)流推送到流媒體服務(wù)器。

  2. 流媒體服務(wù)器

  對(duì)來(lái)自同屏推送端的音視頻數(shù)據(jù)流進(jìn)行轉(zhuǎn)發(fā),目前已經(jīng)有一些成熟、開源的流媒體服務(wù)器軟件項(xiàng)目可用,例如:ZLMediaKit、RTMP Nginx等。

  ZLMediaKit是應(yīng)用廣泛的流媒體服務(wù)器,支持RTSP、RTMP、HTTP、HLS、MPEG-TS等多種協(xié)議,可以實(shí)現(xiàn)音視頻的推流、轉(zhuǎn)碼、錄制、播放等功能。具有高性能、低延遲、易擴(kuò)展等特點(diǎn),適用于直播、視頻會(huì)議、監(jiān)控等場(chǎng)景。ZLMediaKit可以運(yùn)行在Linux、Windows等操作系統(tǒng)上,支持多種硬件平臺(tái)。

  3. 播放端

  從流媒體服務(wù)器拉取音視頻數(shù)據(jù)流,對(duì)音視頻數(shù)據(jù)進(jìn)行解碼,將解碼后的音視頻數(shù)據(jù)播放渲染以呈現(xiàn)給最終用戶。

  因?yàn)榱髅襟w服務(wù)器已有較多現(xiàn)成軟件項(xiàng)目可用,所以本文主要說(shuō)明同屏推送端和播放端的開發(fā)實(shí)現(xiàn)技術(shù),對(duì)于流媒體服務(wù)器不再贅述。

 

  實(shí)現(xiàn)流程

  一、同屏推流端

  同屏推流端完成的功能包括:

  1. 屏幕截圖

  屏幕截圖功能包括對(duì)鼠標(biāo)、光標(biāo)位置和形狀的捕獲。

  (1)Linux系統(tǒng)的獲取屏幕圖片方法:

  A. framebuffer方式

  訪問(wèn)由顯卡顯存映射(mmap)的內(nèi)存幀緩沖區(qū),使用特殊的設(shè)備節(jié)點(diǎn):/dev/fb*。framebuffer是一種比較老的渲染方式,因?yàn)橹荒軐?shí)現(xiàn)簡(jiǎn)單的整張位圖輸入輸出,需要耗費(fèi)較多的CPU處理,目前僅仍然在一些輸出簡(jiǎn)單顯示界面或者對(duì)顯示性能要求不高的嵌入式設(shè)備上使用?,F(xiàn)代Linux系統(tǒng)在X Window System加載后便將其接管,相應(yīng)地,這種獲取屏幕圖片方式也就失效。

  B. OpenGL方式

  一種跨平臺(tái)的圖形編程接口,在Linux系統(tǒng)中最終仍然是通過(guò)X Window System的協(xié)議庫(kù)Xlib實(shí)現(xiàn)各種圖形操作。

  C. XCB方式

  X Window System由MIT在1984年發(fā)布的一種窗口系統(tǒng),廣泛使用于類UNIX操作系統(tǒng)上。X包括X server和X client,它們之間通過(guò)X協(xié)議通信。X server接收X client的顯示請(qǐng)求,調(diào)用底層的顯示設(shè)備驅(qū)動(dòng)程序,輸出到顯示設(shè)備上;同時(shí),把輸入設(shè)備的輸入事件,傳遞給相應(yīng)的X client。X協(xié)議是網(wǎng)絡(luò)透明的,server和client可以位于同一機(jī)器上、同一操作系統(tǒng)中,也可以位于不同機(jī)器、不同操作系統(tǒng)中(因此X是跨平臺(tái)的)。這為遠(yuǎn)端GUI登錄提供了便利。X client的實(shí)現(xiàn)上將X協(xié)議封裝為命令原語(yǔ),以庫(kù)的形式(xlib或者xcb)向外部應(yīng)用提供接口。外部應(yīng)用作為X client調(diào)用這些API,向X server發(fā)起請(qǐng)求。X server的實(shí)現(xiàn)幾經(jīng)演變?yōu)楝F(xiàn)在的Xorg。目前的主流版本是X11R6(R7)。

  這也是目前在Linux系統(tǒng)常用的獲取屏幕截圖方式。

  (2) Windows系統(tǒng)的獲取屏幕圖片方法:

  A. GDI方式

  在Windows10以前的版本使用GDI (Graphics Device Interface)接口從系統(tǒng)中獲取屏幕截圖,但這種方式性能比較差,獲取操作的耗時(shí)經(jīng)常超過(guò)40ms,無(wú)法保證25幀的截圖速率,也就無(wú)法保證同屏視頻的流暢性,視覺(jué)效果不是太好。

  B. DXGI方式

  DXGI (Microsoft DirectX Graphics Infrastructure ) 是隨 Windows Vista 引入的新子系統(tǒng),從Windows10開始可以通過(guò)DXGI接口從系統(tǒng)中獲取屏幕截圖,耗時(shí)大幅縮短,能夠保證25幀的截圖速率,大幅提升了同屏視頻的視覺(jué)效果。

  2. 聲音采集

  聲音采集功能用于獲取本機(jī)上其他應(yīng)用產(chǎn)生的聲音。

  (1)Linux系統(tǒng)的采集聲音方法:

  A. OSS聲卡系統(tǒng)

  OSS(Open Sound System)是一個(gè)類Unix和POSIX兼容系統(tǒng)上一個(gè)可選的聲音架構(gòu),提供了源代碼級(jí)的可移植性。OSSv3是Linux下原始的聲音系統(tǒng)并集成在內(nèi)核里,但是OSSv4在2002年OSS成為商業(yè)軟件時(shí)它的地位被ALSA所取代。OSSv4在2007年又成為開源軟件,4Front Technologies以GPL協(xié)議發(fā)布了它的源碼。OSS的設(shè)備節(jié)點(diǎn)在/dev目錄下,類型為字符設(shè)備,其主設(shè)備號(hào)為14:/dev/dsp: Digital audio。

  B. ALS聲卡系統(tǒng)

  ALSA提供了Playback和Capture兩種方式對(duì)聲卡進(jìn)行操作,應(yīng)用程序通過(guò)asound庫(kù)調(diào)用ALSA對(duì)聲卡進(jìn)行操作,但在默認(rèn)情況下Capture方式只能對(duì)聲卡的輸入通道進(jìn)行采集,不能進(jìn)行內(nèi)錄。

  通過(guò)配置ALSA環(huán)回(Loopback虛擬聲卡)路由,將真實(shí)的物理聲卡和Loopback輸入通道合并為一個(gè)邏輯聲卡設(shè)備,實(shí)現(xiàn)對(duì)Loopback輸出通道進(jìn)行采集。

  (2)Windows系統(tǒng)的采集聲音方法:

  使用MMDevice API來(lái)枚舉和獲取指定設(shè)備,用WASAPI來(lái)處理應(yīng)用程序和音頻設(shè)備之間的音頻流數(shù)據(jù)。

  3. 音視頻編碼

  音視頻編碼功能將屏幕截圖的bmp數(shù)據(jù)編碼壓縮成H264/H265數(shù)據(jù),將聲音采集的pcm數(shù)據(jù)編碼壓縮成G711/aac/mp3等格式數(shù)據(jù)。

  使用最為廣泛的音視頻編解碼開源軟件項(xiàng)目是ffmpeg, 這是一套可以功能強(qiáng)大、可運(yùn)行于很多軟硬件平臺(tái)的音視頻處理軟件,支持幾乎市面上絕大多數(shù)音視頻編解碼、采集、轉(zhuǎn)碼、記錄、推拉流等處理,支持Intel QSV、Linux VAAPI、Android MediaCode等硬件編解碼處理增強(qiáng)。同時(shí),ffmpeg也可由開發(fā)者自行開發(fā)代碼對(duì)接新的編解碼協(xié)議、實(shí)現(xiàn)和硬件編解碼增強(qiáng)。

  4. 音視頻傳輸

  音視頻傳輸功能將編碼壓縮后的音視頻碼流數(shù)據(jù)通過(guò)網(wǎng)絡(luò)傳輸協(xié)議推送給流媒體服務(wù)器,常用的網(wǎng)絡(luò)傳輸協(xié)議包括:RTMP、RTP、RTSP、HLS等。

  A. RTP/RTCP

  RTP/RTCP(Real-time Transport Protocol, RTP Control Protocol)用于在網(wǎng)絡(luò)中傳輸音視頻數(shù)據(jù)的IETF RFC標(biāo)準(zhǔn)協(xié)議,可工作在TCP或UDP上,可單播也可組播,通常和RTCP一起使用。

  B. RTSP

  RTSP(Real Time Streaming Protocol)是哥倫比亞大學(xué)、Netscape和RealNetworks公司提交的IETF RFC標(biāo)準(zhǔn)。RTSP在體系結(jié)構(gòu)上位于RTP/RTCP之上,語(yǔ)法和HTTP 1.1類似,默認(rèn)使用端口號(hào)554或8554。RTSP控制消息協(xié)商完成后可使用RTP/RTCP傳輸流媒體數(shù)據(jù)。

  常用的RTSP客戶端和流媒體轉(zhuǎn)發(fā)服務(wù)器有:live555、ZLMediaKit。

  C. RTMP

  RTMP(Real Time MessagingProtocol)是Adobe公司為Flash播放器和服務(wù)器之間音視頻數(shù)據(jù)傳輸開發(fā)的開放協(xié)議。工作在TCP之上,默認(rèn)使用端口號(hào)1935,并衍生出:RTMPE、RTMPT、RTMPS??蓪?shí)現(xiàn)主動(dòng)推送,常用的RTMP流媒體轉(zhuǎn)發(fā)服務(wù)器有:Nginx(rtmp-module)、SRS、ZLMediaKit。

  D. HLS

  HLS(HTTP Live Streaming)是蘋果公司基于 HTTP 的流媒體傳輸協(xié)議,主要應(yīng)用于 iOS 設(shè)備提供音視頻直播和點(diǎn)播服務(wù)。

  結(jié)合前述的介紹,同屏推流端在Linux操作系統(tǒng)的軟件架構(gòu)如下圖所示:

  同屏推流端在Windows操作系統(tǒng)的軟件架構(gòu)如下圖所示:

  上圖中左右邊分別表示視頻和音頻數(shù)據(jù)在同屏推流端中的數(shù)據(jù)流。

  二、 播放端

  播放端的實(shí)現(xiàn)方案相對(duì)比較簡(jiǎn)單,完成的功能包括:

  1. 音視頻傳輸

  音視頻傳輸功能通過(guò)網(wǎng)絡(luò)傳輸協(xié)議從流媒體服務(wù)器拉取編碼壓縮的音視頻碼流數(shù)據(jù),常用的網(wǎng)絡(luò)傳輸協(xié)議包括:RTMP、RTP、RTSP、HLS等,和同屏推流端使用的協(xié)議一致。

  2. 音視頻解碼

  音視頻解碼功能將編碼壓縮的H264/H265、G711/aac/mp3碼流數(shù)據(jù)解碼還原成YUV或BMP數(shù)據(jù)。常用的軟件開源項(xiàng)目除了前述的ffmpeg,還有l(wèi)ibyuv等。

  3. 音視頻渲染

  音視頻渲染功能渲染呈現(xiàn)解碼后的視頻圖像,播放解碼后的音頻。

  (1) 常用的視頻圖像渲染方式:

  A. OpenGL

  OpenGL是一種跨平臺(tái)的圖形編程接口,能夠充分利用GPU的強(qiáng)大處理能力,實(shí)現(xiàn)圖像和圖形的各種渲染顯示。相比較簡(jiǎn)單地由軟件繪圖方式呈現(xiàn)每一幀解碼后的BMP或YUV數(shù)據(jù),使用OpenGL能降低CPU占用率,提升整體性能和呈現(xiàn)效果。

  B. SDL

  SDL(Simple DirectMedia Layer)是一套開放源代碼的跨平臺(tái)多媒體開發(fā)庫(kù),提供了跨平臺(tái)的圖像、聲音控制功能,SDL的底層也能通過(guò)OpenGL實(shí)現(xiàn)圖像渲染顯示的功能。

  (2) 常用的音頻播放方式:

  A. SDL

  B. 直接調(diào)用系統(tǒng)原生的聲音播放API

  因?yàn)檫@種方式需要分別調(diào)用不同操作系統(tǒng)的聲卡處理API,且需要配置很多參數(shù),所以不推薦使用這種方式。

 

  總結(jié)

  本文完整地闡述和說(shuō)明了Windows和Linux平臺(tái)下的音視頻同屏技術(shù)解決方案,尤其是針對(duì)不同平臺(tái)的幾種常見主流處理技術(shù)進(jìn)行了討論和比較。音視頻技術(shù)的發(fā)展非常迅速,新的編解碼技術(shù)標(biāo)準(zhǔn)、傳輸協(xié)議和操作系統(tǒng)底層軟件驅(qū)動(dòng)框架也在不斷發(fā)展演變,我們也會(huì)持續(xù)跟進(jìn)。

免責(zé)聲明:本文來(lái)源于四川湖山電器股份有限公司,本文僅代表作者個(gè)人觀點(diǎn),本站不作任何保證和承諾,若有任何疑問(wèn),請(qǐng)與本文作者聯(lián)系或有侵權(quán)行為聯(lián)系本站刪除。
掃一掃關(guān)注數(shù)字音視工程網(wǎng)公眾號(hào)

相關(guān)閱讀related

評(píng)論comment

 
驗(yàn)證碼:
您還能輸入500