本發(fā)明涉及直播領(lǐng)域,特別是涉及一種基于移動(dòng)設(shè)備進(jìn)行錄屏直播的方法和裝置、移動(dòng)設(shè)備及直播系統(tǒng)。
背景技術(shù):
隨著智能手機(jī)、IPAD等移動(dòng)設(shè)備的硬件和通訊網(wǎng)絡(luò)的發(fā)展以及國(guó)內(nèi)手游玩家的意識(shí)逐步提升,手游重度化的趨勢(shì)越發(fā)明顯。在越來(lái)越多MOBA、FPS類型手游出現(xiàn)的同時(shí),也催生出了一個(gè)新的行業(yè)——“手游直播”。有權(quán)威數(shù)據(jù)機(jī)構(gòu)預(yù)測(cè),中國(guó)游戲直播市場(chǎng)三年后規(guī)模將達(dá)50億元以上,其中手游直播占其中的三成以上。
目前手游直播主要是通過(guò)在移動(dòng)設(shè)備上安裝直播軟件來(lái)錄制移動(dòng)設(shè)備的游戲畫(huà)面和聲音,進(jìn)行音視頻編碼,然后通過(guò)RTMP協(xié)議上傳到CDN(Content Delivery Network,內(nèi)容分發(fā)網(wǎng)絡(luò))服務(wù)器。其中,視頻編碼方式有硬編碼和軟編碼兩種,由于移動(dòng)設(shè)備的硬件配置不是很高,需要使用資源消耗較低的硬編碼的方式進(jìn)行編碼。但是由于不同機(jī)型、不同操作系統(tǒng)的移動(dòng)設(shè)備的幀頻(Frame rate)不同,并且同一移動(dòng)設(shè)備在不同情景下的幀頻也不盡相同,例如,在手機(jī)運(yùn)行不同的游戲時(shí),或者在處于同一游戲的不同場(chǎng)景下,手機(jī)的屏幕所顯示的游戲畫(huà)面的幀頻也不盡相同。由此,使用現(xiàn)有直播軟件錄制得到的移動(dòng)設(shè)備的屏幕畫(huà)面所對(duì)應(yīng)的視頻數(shù)據(jù)的幀頻不穩(wěn)定,使得編碼后的視頻數(shù)據(jù)的碼率變化較大,容易造成觀看端播放器卡頓,影響觀看質(zhì)量。
因此,需要一種能夠?qū)σ苿?dòng)設(shè)備的屏幕畫(huà)面所對(duì)應(yīng)的視頻數(shù)據(jù)進(jìn)行穩(wěn)定編碼以獲取穩(wěn)定碼率的視頻數(shù)據(jù)的錄屏直播方法和裝置、移動(dòng)設(shè)備及直播系統(tǒng)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的一個(gè)目的在于,提供一種基于移動(dòng)設(shè)備進(jìn)行錄屏直播的方法和裝置、移動(dòng)設(shè)備及直播系統(tǒng),其能夠?qū)崿F(xiàn)對(duì)移動(dòng)設(shè)備的屏幕畫(huà)面所對(duì)應(yīng)的視頻數(shù)據(jù)進(jìn)行穩(wěn)定編碼,從而能夠獲取穩(wěn)定碼率的視頻數(shù)據(jù),進(jìn)而可以提升觀看端播放器播放該視頻數(shù)據(jù)的流暢性。
根據(jù)本發(fā)明的一個(gè)方面,提供了一種基于移動(dòng)設(shè)備進(jìn)行錄屏直播的方法,包括:使用應(yīng)用程序接口Opengl ES以預(yù)設(shè)的第一幀頻采集移動(dòng)設(shè)備的屏幕畫(huà)面所對(duì)應(yīng)的第一屏幕數(shù)據(jù);對(duì)采集得到的第一屏幕數(shù)據(jù)進(jìn)行編碼,以得到編碼后的第一視頻數(shù)據(jù);將第一視頻數(shù)據(jù)封裝成第一RTMP數(shù)據(jù)包。
由此,利用應(yīng)用程序接口Opengl ES以預(yù)設(shè)的幀頻采集屏幕畫(huà)面,可以得到穩(wěn)定幀頻的視頻數(shù)據(jù),對(duì)該視頻數(shù)據(jù)進(jìn)行編碼,就可以得到穩(wěn)定碼率的視頻數(shù)據(jù)。
可選地,使用應(yīng)用程序接口Opengl ES采集屏幕數(shù)據(jù)的步驟可以包括:創(chuàng)建虛擬屏幕;使用應(yīng)用程序接口Opengl ES以預(yù)設(shè)的第一幀頻從虛擬屏幕采集第一屏幕數(shù)據(jù)。
可選地,該方法還可以包括:在用戶選擇使用移動(dòng)設(shè)備進(jìn)行直播的情況下,可以將第一RTMP數(shù)據(jù)包發(fā)送到內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù)器;在用戶選擇使用終端計(jì)算機(jī)進(jìn)行直播的情況下,可以將第一RTMP數(shù)據(jù)包發(fā)送到終端計(jì)算機(jī)。
由此,根據(jù)實(shí)際情況,用戶可以選擇使用移動(dòng)設(shè)備進(jìn)行直播,也可以將移動(dòng)設(shè)備的屏幕數(shù)據(jù)推送到終端計(jì)算機(jī),使用終端計(jì)算機(jī)進(jìn)行直播。
可選地,在用戶選擇使用終端計(jì)算機(jī)進(jìn)行直播的情況下,移動(dòng)設(shè)備可以通過(guò)局域網(wǎng)內(nèi)推流將RTMP數(shù)據(jù)包發(fā)送到與移動(dòng)設(shè)備處于同一局域網(wǎng)內(nèi)的終端計(jì)算機(jī)。
這樣,網(wǎng)絡(luò)上行帶寬和穩(wěn)定性都比較好,可以提高移動(dòng)設(shè)備和終端計(jì)算機(jī)之間的數(shù)據(jù)傳輸效率。
可選地,在用戶選擇使用移動(dòng)設(shè)備進(jìn)行直播的情況下,該方法還可以包括:通過(guò)移動(dòng)設(shè)備的麥克風(fēng)采集第一音頻數(shù)據(jù);對(duì)第一音頻數(shù)據(jù)進(jìn)行編碼;將編碼后的第一音頻數(shù)據(jù)封裝到RTMP數(shù)據(jù)包中。
由此,在用戶選擇使用移動(dòng)設(shè)備進(jìn)行直播時(shí),還可以通過(guò)移動(dòng)設(shè)備的麥克風(fēng)采集移動(dòng)設(shè)備和/或用戶發(fā)出的音頻數(shù)據(jù),將該音頻數(shù)據(jù)進(jìn)行音頻編碼,并將編碼后的音頻數(shù)據(jù)連同視頻數(shù)據(jù)一同封裝到RTMP數(shù)據(jù)包中。這樣,可以提升觀看端的觀看體驗(yàn),并且可以有利于實(shí)現(xiàn)直播端和觀看端的互動(dòng)。
可選地,在用戶選擇使用終端計(jì)算機(jī)進(jìn)行直播的情況下,該方法還可以包括:由終端計(jì)算機(jī)接收移動(dòng)設(shè)備發(fā)送的第一RTMP數(shù)據(jù)包;終端計(jì)算機(jī)對(duì)第一RTMP數(shù)據(jù)包進(jìn)行解封裝,以得到第一視頻數(shù)據(jù);終端計(jì)算機(jī)基于第一視頻數(shù)據(jù),在終端計(jì)算機(jī)的屏幕上呈現(xiàn)移動(dòng)設(shè)備的屏幕畫(huà)面;終端計(jì)算機(jī)以預(yù)設(shè)的第二幀頻采集終端計(jì)算機(jī)的屏幕畫(huà)面所對(duì)應(yīng)的第二屏幕數(shù)據(jù);終端計(jì)算機(jī)對(duì)采集得到的第二屏幕數(shù)據(jù)進(jìn)行視頻編碼,以得到第二視頻數(shù)據(jù);終端計(jì)算機(jī)將第二視頻數(shù)據(jù)封裝成第二RTMP數(shù)據(jù)包;終端計(jì)算機(jī)將第二RTMP數(shù)據(jù)包發(fā)送到內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù)器。
由于終端計(jì)算機(jī)的顯示器的顯示效果更加清晰,并且終端計(jì)算機(jī)的處理能力更強(qiáng),經(jīng)過(guò)終端計(jì)算機(jī)的重新編碼,可以獲得碼率更高的視頻數(shù)據(jù),從而使得觀看端可以看到畫(huà)質(zhì)更好的直播畫(huà)面。
可選地,終端計(jì)算機(jī)可以通過(guò)終端計(jì)算機(jī)的麥克風(fēng)采集第二音頻數(shù)據(jù);終端計(jì)算機(jī)對(duì)第二音頻數(shù)據(jù)進(jìn)行音頻編碼;終端計(jì)算機(jī)將編碼后的第二音頻數(shù)據(jù)封裝到第二RTMP數(shù)據(jù)包中。
由此,在用戶選擇使用終端計(jì)算機(jī)進(jìn)行直播時(shí),還可以通過(guò)終端計(jì)算機(jī)的麥克風(fēng)采集終端計(jì)算機(jī)和/或用戶發(fā)出的音頻數(shù)據(jù)。這樣,可以提升觀看端的觀看體驗(yàn),并且可以有利于實(shí)現(xiàn)直播端和觀看端的互動(dòng)。
可選地,該方法還可以包括:終端計(jì)算機(jī)采集計(jì)算機(jī)終端的攝像頭拍攝得到的第三視頻數(shù)據(jù);終端計(jì)算機(jī)將采集得到的第三視頻數(shù)據(jù)和第二屏幕數(shù)據(jù)合成為第四視頻數(shù)據(jù);終端計(jì)算機(jī)對(duì)第四視頻數(shù)據(jù)進(jìn)行編碼,以得到第二視頻數(shù)據(jù)。
由此,在用戶選擇使用終端計(jì)算機(jī)進(jìn)行直播時(shí),還可以開(kāi)啟終端計(jì)算機(jī)的攝像頭,采集用戶的頭像信息或直播背景信息,并且可以對(duì)攝像頭采集的畫(huà)面進(jìn)行美顏處理。
可選地,第四視頻數(shù)據(jù)可以為YUV格式數(shù)據(jù),終端計(jì)算機(jī)對(duì)第四視頻數(shù)據(jù)進(jìn)行編碼的步驟可以包括:終端計(jì)算機(jī)采用開(kāi)源庫(kù)x264對(duì)第四視頻數(shù)據(jù)進(jìn)行軟編碼,以得到符合H264標(biāo)準(zhǔn)的第二視頻數(shù)據(jù)。
根據(jù)本發(fā)明的另一個(gè)方面,還提供了一種基于移動(dòng)設(shè)備進(jìn)行錄屏直播的裝置,包括:第一采集模塊,用于使用應(yīng)用程序接口Opengl ES以預(yù)設(shè)的第一幀頻采集移動(dòng)設(shè)備的屏幕畫(huà)面所對(duì)應(yīng)的第一屏幕數(shù)據(jù);第一編碼模塊,用于對(duì)采集得到的第一屏幕數(shù)據(jù)進(jìn)行編碼,以得到編碼后的第一視頻數(shù)據(jù);封裝模塊,用于將第一視頻數(shù)據(jù)封裝成第一RTMP數(shù)據(jù)包。
優(yōu)選地,第一采集模塊可以創(chuàng)建虛擬屏幕,并使用應(yīng)用程序接口Opengl ES以預(yù)設(shè)的第一幀頻從虛擬屏幕采集第一屏幕數(shù)據(jù)。
優(yōu)選地,該裝置還可以包括發(fā)送模塊,其中,在用戶選擇使用移動(dòng)設(shè)備進(jìn)行直播的情況下,發(fā)送模塊可以將第一RTMP數(shù)據(jù)包發(fā)送到內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù)器,在用戶選擇使用終端計(jì)算機(jī)進(jìn)行直播的情況下,發(fā)送模塊可以將第一RTMP數(shù)據(jù)包發(fā)送到終端計(jì)算機(jī)。
優(yōu)選地,在用戶選擇使用終端計(jì)算機(jī)進(jìn)行直播的情況下,發(fā)送模塊可以通過(guò)局域網(wǎng)內(nèi)推流將RTMP數(shù)據(jù)包發(fā)送到與移動(dòng)設(shè)備處于同一局域網(wǎng)內(nèi)的終端計(jì)算機(jī)。
優(yōu)選地,在用戶選擇使用移動(dòng)設(shè)備進(jìn)行直播的情況下,該裝置還可以包括:第二采集模塊,用于通過(guò)移動(dòng)設(shè)備的麥克風(fēng)采集第一音頻數(shù)據(jù);第二編碼模塊,用于對(duì)第一音頻數(shù)據(jù)進(jìn)行編碼,封裝模塊將編碼后的第一音頻數(shù)據(jù)封裝到第一RTMP數(shù)據(jù)包中。
根據(jù)本發(fā)明的另一個(gè)方面,還提供了一種用于進(jìn)行錄屏直播的移動(dòng)設(shè)備,包括:屏幕;存儲(chǔ)器;通信模塊;以及處理器,處理器使用應(yīng)用程序接口Opengl ES以預(yù)設(shè)的第一幀頻采集屏幕所呈現(xiàn)的屏幕畫(huà)面所對(duì)應(yīng)的第一屏幕數(shù)據(jù),對(duì)第一屏幕數(shù)據(jù)進(jìn)行編碼,以得到編碼后的第一視頻數(shù)據(jù),處理器將第一視頻數(shù)據(jù)封裝成第一RTMP數(shù)據(jù)包,并將第一RTMP數(shù)據(jù)包存儲(chǔ)到存儲(chǔ)器中,其中,在用戶選擇使用移動(dòng)設(shè)備進(jìn)行直播的情況下,處理器通過(guò)通信模塊將第一RTMP數(shù)據(jù)包發(fā)送到內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù)器,在用戶選擇使用終端計(jì)算機(jī)進(jìn)行直播的情況下,處理器通過(guò)通信模塊將第一RTMP數(shù)據(jù)包發(fā)送到終端計(jì)算機(jī)。
根據(jù)本發(fā)明的另一個(gè)方面,還提供了一種錄屏直播系統(tǒng),包括:上文述及的移動(dòng)設(shè)備;以及終端計(jì)算機(jī),其中,移動(dòng)設(shè)備與終端計(jì)算機(jī)處于同一局域網(wǎng)內(nèi),終端計(jì)算機(jī)接收移動(dòng)設(shè)備通過(guò)局域網(wǎng)內(nèi)推流的方式發(fā)送的第一RTMP數(shù)據(jù)包,并對(duì)第一RTMP數(shù)據(jù)包進(jìn)行解封裝,以得到第一視頻數(shù)據(jù),終端計(jì)算機(jī)基于第一視頻數(shù)據(jù),在終端計(jì)算機(jī)的屏幕上呈現(xiàn)移動(dòng)設(shè)備的屏幕畫(huà)面,并以預(yù)設(shè)的第二幀頻采集終端計(jì)算機(jī)的屏幕畫(huà)面所對(duì)應(yīng)的第二屏幕數(shù)據(jù),終端計(jì)算機(jī)對(duì)采集得到的第二屏幕數(shù)據(jù)進(jìn)行視頻編碼,以得到第二視頻數(shù)據(jù),終端計(jì)算機(jī)將第二視頻數(shù)據(jù)封裝成第二RTMP數(shù)據(jù)包,并將第二RTMP數(shù)據(jù)包發(fā)送到內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù)器。
本發(fā)明的基于移動(dòng)設(shè)備進(jìn)行錄屏直播的方法、移動(dòng)設(shè)備及錄屏直播系統(tǒng),利用應(yīng)用程序接口Opengl ES以預(yù)設(shè)的幀頻采集移動(dòng)設(shè)備的屏幕畫(huà)面,可以得到穩(wěn)定幀頻的視頻數(shù)據(jù),對(duì)該視頻數(shù)據(jù)進(jìn)行編碼,就可以得到穩(wěn)定碼率的視頻數(shù)據(jù)。由此可以提升觀看端播放器播放該視頻數(shù)據(jù)的流暢性。
附圖說(shuō)明
通過(guò)結(jié)合附圖對(duì)本公開(kāi)示例性實(shí)施方式進(jìn)行更詳細(xì)的描述,本公開(kāi)的上述以及其它目的、特征和優(yōu)勢(shì)將變得更加明顯,其中,在本公開(kāi)示例性實(shí)施方式中,相同的參考標(biāo)號(hào)通常代表相同部件。
圖1示出了根據(jù)本發(fā)明一實(shí)施例的基于移動(dòng)設(shè)備進(jìn)行錄屏直播的方法的示意性流程圖。
圖2根據(jù)本發(fā)明另一實(shí)施例的基于移動(dòng)設(shè)備進(jìn)行錄屏直播的方法的示意性流程圖。
圖3示出了根據(jù)本發(fā)明一實(shí)施例的基于移動(dòng)設(shè)備進(jìn)行錄屏直播的裝置的結(jié)構(gòu)的示意性方框圖。
圖4示出了根據(jù)本發(fā)明一實(shí)施例的直播系統(tǒng)的示意性方框圖。
具體實(shí)施方式
下面將參照附圖更詳細(xì)地描述本公開(kāi)的優(yōu)選實(shí)施方式。雖然附圖中顯示了本公開(kāi)的優(yōu)選實(shí)施方式,然而應(yīng)該理解,可以以各種形式實(shí)現(xiàn)本公開(kāi)而不應(yīng)被這里闡述的實(shí)施方式所限制。相反,提供這些實(shí)施方式是為了使本公開(kāi)更加透徹和完整,并且能夠?qū)⒈竟_(kāi)的范圍完整地傳達(dá)給本領(lǐng)域的技術(shù)人員。
在對(duì)本發(fā)明進(jìn)行描述之前,首先就本發(fā)明涉及的相關(guān)術(shù)語(yǔ)做以簡(jiǎn)要說(shuō)明。
AAC(Advanced Audio Coding),高級(jí)音頻編碼,一種專為聲音數(shù)據(jù)設(shè)計(jì)的文件壓縮格式。
x264是一個(gè)開(kāi)源的H.264/MPEG-4AVC視頻編碼函數(shù)庫(kù)。
H264是ITU(International Telecommunication Unite國(guó)際通信聯(lián)盟)和MPEG(Motion Picture Experts Group運(yùn)動(dòng)圖像專家組)聯(lián)合制定的視頻編碼標(biāo)準(zhǔn)。
RTMP是Real Time Messaging Protocol(實(shí)時(shí)消息傳輸協(xié)議)的首字母縮寫(xiě)。
CDN(Content Delivery Network),即內(nèi)容分發(fā)網(wǎng)絡(luò)。
PCM(Pulse Code Modulation----脈碼調(diào)制錄音)。
FFmpeg是一套可以用來(lái)記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開(kāi)源計(jì)算機(jī)程序。采用LGPL或GPL許可證,它提供了錄制、轉(zhuǎn)換以及流化音視頻的完整解決方案。
OpenGL ES(OpenGL for Embedded Systems)是OpenGL三維圖形API(應(yīng)用程序接口)的子集,針對(duì)手機(jī)、PDA和游戲主機(jī)等嵌入式設(shè)備而設(shè)計(jì)。
如前所述,為了能夠?qū)崿F(xiàn)對(duì)移動(dòng)設(shè)備的屏幕畫(huà)面所對(duì)應(yīng)的視頻數(shù)據(jù)進(jìn)行穩(wěn)定地編碼,本發(fā)明利用應(yīng)用程序接口Opengl ES以預(yù)設(shè)的幀頻采集移動(dòng)設(shè)備的屏幕畫(huà)面,以得到穩(wěn)定幀頻的視頻數(shù)據(jù),通過(guò)對(duì)該視頻數(shù)據(jù)進(jìn)行編碼、封裝,就可以得到可供觀看端觀看的碼率穩(wěn)定的視頻數(shù)據(jù)。
圖1示出了根據(jù)本發(fā)明一實(shí)施例的基于移動(dòng)設(shè)備進(jìn)行錄屏直播的方法的示意性流程圖。其中,本發(fā)明述及的移動(dòng)設(shè)備可以是手機(jī)、IPAD等便于用戶攜帶的移動(dòng)終端。
參見(jiàn)圖1,在步驟S110,使用應(yīng)用程序接口Opengl ES以預(yù)設(shè)的第一幀頻采集移動(dòng)設(shè)備的屏幕畫(huà)面所對(duì)應(yīng)的第一屏幕數(shù)據(jù)。其中,第一幀頻可以是使用移動(dòng)設(shè)備的用戶預(yù)先設(shè)定的,也可以是一個(gè)默認(rèn)值(常數(shù))。
如前文背景技術(shù)部分所述,軟編碼對(duì)硬件配置的要求比較高,因此對(duì)于移動(dòng)設(shè)備來(lái)說(shuō),優(yōu)選地使用資源消耗較低的硬編碼的方式進(jìn)行編碼。但是不同機(jī)型、不同操作系統(tǒng)的移動(dòng)設(shè)備所顯示的屏幕畫(huà)面的幀頻不同,因此,在使用編碼器對(duì)采集到的不同機(jī)型的移動(dòng)設(shè)備的屏幕畫(huà)面所對(duì)應(yīng)的第一屏幕數(shù)據(jù)進(jìn)行硬編碼時(shí),需要對(duì)編碼器進(jìn)行不同的設(shè)置,以使得其能夠適配不同的移動(dòng)設(shè)備,適配過(guò)程比較復(fù)雜,并且還有可能會(huì)造成編碼后的視頻數(shù)據(jù)的幀頻較低(有可能低于每秒25幀),不能很好地滿足直播要求。
針對(duì)于此,本發(fā)明根據(jù)預(yù)先設(shè)定的第一幀頻(可以是用戶預(yù)先設(shè)定的,也可以是一個(gè)默認(rèn)常數(shù)值),可以計(jì)算T0=1000ms/f(f為第一幀頻)以獲取期望采集到的兩幀視頻數(shù)據(jù)的時(shí)間間隔,然后可以每間隔T0時(shí)間進(jìn)行一次屏幕數(shù)據(jù)采集,這樣,采集到的屏幕數(shù)據(jù)就具有穩(wěn)定的幀頻f(第一幀頻)。
由此,對(duì)于不同的機(jī)型的移動(dòng)設(shè)備,就不必再單獨(dú)為其配置適配的編碼器,并且基于穩(wěn)定幀頻的屏幕數(shù)據(jù),可以通過(guò)編碼得到穩(wěn)定碼率的視頻數(shù)據(jù)。
其中,可以利用應(yīng)用程序接口Opengl ES以截屏的方式對(duì)移動(dòng)設(shè)備的屏幕所顯示的屏幕數(shù)據(jù)進(jìn)行采集。即可以根據(jù)第一幀頻計(jì)算得到的期望采集到的兩幀視頻數(shù)據(jù)的時(shí)間間隔T0,每隔時(shí)間T0對(duì)移動(dòng)設(shè)備的屏幕所顯示的屏幕畫(huà)面進(jìn)行一次截圖操作,以得到移動(dòng)設(shè)備的屏幕畫(huà)面所對(duì)應(yīng)的第一屏幕數(shù)據(jù)。
另外,也可以通過(guò)創(chuàng)建虛擬屏幕,然后調(diào)用應(yīng)用程序接口Opengl ES從虛擬屏幕采集得到第一屏幕數(shù)據(jù)。這里采集得到的第一屏幕數(shù)據(jù)可以是YUV格式的視頻數(shù)據(jù)。
這樣,通過(guò)利用應(yīng)用程序接口Opengl ES以第一幀頻采集移動(dòng)設(shè)備所顯示的屏幕畫(huà)面,就可以得到穩(wěn)定幀頻(第一幀頻)的第一屏幕數(shù)據(jù)。由此,即使移動(dòng)設(shè)備所顯示的屏幕畫(huà)面的幀頻變化較大,基于步驟S110所采集到的屏幕數(shù)據(jù)也具有穩(wěn)定的幀頻,從而為后續(xù)的編碼、封裝以得到穩(wěn)定碼率的視頻數(shù)據(jù)提供了基礎(chǔ)。
其中,在執(zhí)行步驟S110的過(guò)程中,還可以按照預(yù)設(shè)的分辨率、碼率、關(guān)鍵幀時(shí)間間隔等視頻參數(shù)進(jìn)行采集。與上文述及的第一幀頻相同,這里述及的分辨率、碼率、關(guān)鍵幀時(shí)間間隔等視頻參數(shù)也可以是使用移動(dòng)設(shè)備的用戶預(yù)先設(shè)定的。
在采集了移動(dòng)設(shè)備的屏幕畫(huà)面所對(duì)應(yīng)的第一屏幕數(shù)據(jù)后,就可以執(zhí)行步驟S120,對(duì)采集得到的第一屏幕數(shù)據(jù)進(jìn)行編碼,以得到編碼后的第一視頻數(shù)據(jù)。
這里,可以根據(jù)移動(dòng)設(shè)備的操作系統(tǒng)、機(jī)器型號(hào),可以采取相應(yīng)的編碼器對(duì)第一屏幕數(shù)據(jù)進(jìn)行編碼。例如,在移動(dòng)設(shè)備的操作系統(tǒng)為Android系統(tǒng)時(shí),可以使用Android系統(tǒng)下的應(yīng)用程序接口MediaCodec對(duì)第一屏幕數(shù)據(jù)進(jìn)行硬編碼,由此可以得到穩(wěn)定幀頻的符合H264標(biāo)準(zhǔn)的視頻數(shù)據(jù)(第一視頻數(shù)據(jù))。
在對(duì)第一屏幕數(shù)據(jù)進(jìn)行編碼得到第一視頻數(shù)據(jù)后,就可以將第一視頻數(shù)據(jù)封裝成第一RTMP數(shù)據(jù)包(步驟S130)。這里,可以使用FFmpeg下的庫(kù)文件libavformat來(lái)將第一視頻數(shù)據(jù)封裝成第一RTMP數(shù)據(jù)包。
在封裝完成后,用戶就可以根據(jù)實(shí)際情況選擇使用移動(dòng)設(shè)備或終端計(jì)算機(jī)進(jìn)行直播(步驟S140)。
其中,在用戶選擇使用移動(dòng)設(shè)備進(jìn)行直播的情況下,可以通過(guò)推流器將第一RTMP數(shù)據(jù)包直接發(fā)送到內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù)器(步驟S150)。
在用戶選擇使用終端計(jì)算機(jī)進(jìn)行直播的情況下,可以將第一RTMP數(shù)據(jù)包發(fā)送到終端計(jì)算機(jī),由終端計(jì)算機(jī)進(jìn)行直播(步驟S160)。
這里,移動(dòng)設(shè)備可以通過(guò)局域網(wǎng)內(nèi)推流的方式將RTMP數(shù)據(jù)包發(fā)送到與移動(dòng)設(shè)備處于同一局域網(wǎng)內(nèi)的終端計(jì)算機(jī)。具體地說(shuō),移動(dòng)設(shè)備可以通過(guò)掃描終端計(jì)算機(jī)的二維碼,來(lái)獲取終端計(jì)算機(jī)RTMP server的推流地址,然后可以通過(guò)局域網(wǎng)內(nèi)推流的方式將RTMP數(shù)據(jù)包發(fā)送到相應(yīng)的推流地址。由于局域網(wǎng)的網(wǎng)絡(luò)上行帶寬和穩(wěn)定性較好,因此移動(dòng)設(shè)備向終端計(jì)算機(jī)發(fā)送數(shù)據(jù)時(shí),可以選擇較高的碼率,碼率越高,在終端計(jì)算機(jī)上面的預(yù)覽效果越清晰。由此,在使用終端計(jì)算機(jī)對(duì)移動(dòng)設(shè)備的屏幕畫(huà)面進(jìn)行直播時(shí),觀看端的用戶可以看到更好畫(huà)質(zhì)的直播畫(huà)面。
其中,在用戶選擇使用移動(dòng)設(shè)備進(jìn)行直播的情況下,在執(zhí)行步驟S150(將第一RTMP數(shù)據(jù)包發(fā)送到內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù)器)之前,還可以通過(guò)移動(dòng)設(shè)備的麥克風(fēng)采集第一音頻數(shù)據(jù)(PCM格式),對(duì)該第一音頻數(shù)據(jù)進(jìn)行編碼,并將編碼后的第一音頻數(shù)據(jù)封裝到第一RTMP數(shù)據(jù)包中。然后再通過(guò)推流器將同時(shí)封裝有視頻數(shù)據(jù)和音頻數(shù)據(jù)的第一RTMP數(shù)據(jù)包發(fā)送到內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù)器。
這里,可以采用開(kāi)源編碼庫(kù)libfaac對(duì)麥克風(fēng)采集到的第一音頻數(shù)據(jù)進(jìn)行軟編碼,獲取AAC格式音頻數(shù)據(jù)。在對(duì)第一音頻數(shù)據(jù)進(jìn)行編碼前,還可以對(duì)采集到的第一音頻數(shù)據(jù)進(jìn)行降噪和回音消除處理,以提高音頻質(zhì)量。
其中,這里述及的第一音頻數(shù)據(jù)可以包括麥克風(fēng)采集的移動(dòng)設(shè)備發(fā)出的聲音,也可以包括使用移動(dòng)設(shè)備的用戶發(fā)出的聲音。這樣,在將第一RTMP數(shù)據(jù)包分發(fā)到相應(yīng)的內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù)器后,觀看端不僅能看到移動(dòng)設(shè)備的屏幕畫(huà)面,還可以聽(tīng)到移動(dòng)設(shè)備和主播發(fā)出的聲音。由此,可以提升觀眾的觀看體驗(yàn),并且可以有利于實(shí)現(xiàn)主播和觀眾的互動(dòng)。
另外,對(duì)于編碼后的第一音頻數(shù)據(jù)和編碼后的第一視頻數(shù)據(jù),可以按照系統(tǒng)相對(duì)時(shí)間打時(shí)間戳,然后封裝成第一RTMP數(shù)據(jù)包,再發(fā)送到內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù)器(即CDN服務(wù)器)。然后觀眾就可以獲取CDN服務(wù)器轉(zhuǎn)碼的音視頻流,欣賞高質(zhì)量的直播。
圖2示出了終端計(jì)算機(jī)接收到來(lái)自移動(dòng)設(shè)備的第一RTMP數(shù)據(jù)包后,終端計(jì)算機(jī)的具體執(zhí)行過(guò)程的示意性流程圖。
參見(jiàn)圖2,在步驟S210,由終端計(jì)算機(jī)接收移動(dòng)設(shè)備發(fā)送的第一RTMP數(shù)據(jù)包。
如上文所述,終端計(jì)算機(jī)可以與移動(dòng)設(shè)備處于同一局域網(wǎng)內(nèi),因此,終端計(jì)算機(jī)可以開(kāi)啟本地RTMP server服務(wù),以便于接收移動(dòng)設(shè)備發(fā)送的第一RTMP數(shù)據(jù)包。
在步驟S220,終端計(jì)算機(jī)對(duì)第一RTMP數(shù)據(jù)包進(jìn)行解封裝,以得到第一視頻數(shù)據(jù)。
這里,可以通過(guò)開(kāi)源庫(kù)FFmpeg來(lái)解碼第一RTMP數(shù)據(jù)包,以得到第一視頻數(shù)據(jù)。
在步驟S230,終端計(jì)算機(jī)基于第一視頻數(shù)據(jù),在終端計(jì)算機(jī)的屏幕上呈現(xiàn)移動(dòng)設(shè)備的屏幕畫(huà)面。
在步驟S240,終端計(jì)算機(jī)以預(yù)設(shè)的第二幀頻采集終端計(jì)算機(jī)的屏幕畫(huà)面所對(duì)應(yīng)的第二屏幕數(shù)據(jù)。其中,第二幀頻可以是用戶預(yù)先設(shè)定的。
在步驟S250,終端計(jì)算機(jī)對(duì)采集得到的第二屏幕數(shù)據(jù)進(jìn)行視頻編碼,以得到第二視頻數(shù)據(jù)。
在終端計(jì)算機(jī)的攝像頭開(kāi)啟的狀態(tài)下,還可以采集計(jì)算機(jī)終端的攝像頭拍攝得到的視頻數(shù)據(jù),為了便于區(qū)分,這里的視頻數(shù)據(jù)可以稱為第三視頻數(shù)據(jù),終端計(jì)算機(jī)可以將采集得到的第三視頻數(shù)據(jù)和第二屏幕數(shù)據(jù)合成為第四視頻數(shù)據(jù),并對(duì)第四視頻數(shù)據(jù)進(jìn)行編碼,編碼后的數(shù)據(jù)可以認(rèn)為是第二視頻數(shù)據(jù)。
其中,合成的第四視頻數(shù)據(jù)可以為YUV格式的數(shù)據(jù),終端計(jì)算機(jī)可以采用開(kāi)源庫(kù)x264對(duì)第四視頻數(shù)據(jù)進(jìn)行軟編碼,以獲取符合H264標(biāo)準(zhǔn)的視頻數(shù)據(jù)。另外,在將第三視頻數(shù)據(jù)和第二屏幕數(shù)據(jù)合成為第四視頻數(shù)據(jù)之前,還可以對(duì)第三視頻數(shù)據(jù)進(jìn)行美顏處理。
在步驟S260,終端計(jì)算機(jī)將第二視頻數(shù)據(jù)封裝成第二RTMP數(shù)據(jù)包。
在步驟S270,終端計(jì)算機(jī)將第二RTMP數(shù)據(jù)包發(fā)送到內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù)器。
另外,在執(zhí)行步驟S270(將第二RTMP數(shù)據(jù)包發(fā)送到內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù)器)之前,還可以通過(guò)終端計(jì)算機(jī)的麥克風(fēng)采集第二音頻數(shù)據(jù)(PCM格式),對(duì)該第二音頻數(shù)據(jù)進(jìn)行編碼,并將編碼后的第二音頻數(shù)據(jù)封裝到第二RTMP數(shù)據(jù)包中。
這里,可以采用開(kāi)源編碼庫(kù)libfaac對(duì)麥克風(fēng)采集到的第二音頻數(shù)據(jù)進(jìn)行軟編碼,獲取AAC格式音頻數(shù)據(jù)。在對(duì)第二音頻數(shù)據(jù)進(jìn)行編碼前,還可以對(duì)采集到的第二音頻數(shù)據(jù)進(jìn)行降噪和回音消除處理,以提高音頻質(zhì)量。
其中,這里述及的第二音頻數(shù)據(jù)可以包括麥克風(fēng)采集的終端計(jì)算機(jī)發(fā)出的聲音,也可以包括直播端的用戶發(fā)出的聲音。這樣,在將第二RTMP數(shù)據(jù)包分發(fā)到相應(yīng)的內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù)器后,觀看端不僅能看到移動(dòng)設(shè)備的屏幕畫(huà)面,還可以聽(tīng)到主播發(fā)出的聲音。由此,可以提升觀眾的觀看體驗(yàn),并且可以有利于實(shí)現(xiàn)主播和觀眾的互動(dòng)。
綜上,本發(fā)明的基于移動(dòng)設(shè)備進(jìn)行直播的方法,不僅可以利用應(yīng)用程序接口Opengl ES采集得到穩(wěn)定幀頻的對(duì)應(yīng)于移動(dòng)設(shè)備的屏幕畫(huà)面的視頻數(shù)據(jù),還可以為用戶(即主播)提供移動(dòng)設(shè)備和終端計(jì)算機(jī)兩種直播方式。由此,可以充分利用終端計(jì)算機(jī)在視頻軟編碼、攝像頭美顏效果和變聲等方面的優(yōu)勢(shì),同時(shí)主播也可以直接用手機(jī)進(jìn)行直播,降低使用門(mén)檻,可以更大程度的滿足不同主播的需求,同時(shí)提高直播質(zhì)量。
至此,結(jié)合圖1、圖2詳細(xì)說(shuō)明了本發(fā)明的基于移動(dòng)設(shè)備進(jìn)行錄屏直播的方法。另外,基于本發(fā)明的錄屏直播方法,本發(fā)明還提供了一種基于移動(dòng)設(shè)備進(jìn)行錄屏直播的裝置。
圖3示出了根據(jù)本發(fā)明一實(shí)施例的基于移動(dòng)設(shè)備進(jìn)行錄屏直播的裝置的結(jié)構(gòu)框圖。
參見(jiàn)圖3,本發(fā)明實(shí)施例的基于移動(dòng)設(shè)備進(jìn)行錄屏直播的裝置包括第一采集模塊31、第一編碼模塊32以及封裝模塊33。
第一采集模塊31可以使用應(yīng)用程序接口Opengl ES以預(yù)設(shè)的第一幀頻采集移動(dòng)設(shè)備的屏幕畫(huà)面所對(duì)應(yīng)的第一屏幕數(shù)據(jù)。這里,第一采集模塊31可以通過(guò)創(chuàng)建虛擬屏幕,并使用應(yīng)用程序接口Opengl ES以預(yù)設(shè)的第一幀頻從虛擬屏幕采集得到第一屏幕數(shù)據(jù)。
第一編碼模塊32可以對(duì)第一采集模塊31所采集得到的第一屏幕數(shù)據(jù)進(jìn)行編碼,以得到編碼后的第一視頻數(shù)據(jù)。
封裝模塊33可以將第一視頻數(shù)據(jù)封裝成第一RTMP數(shù)據(jù)包。
另外,參見(jiàn)圖3,本發(fā)明實(shí)施例的基于移動(dòng)設(shè)備進(jìn)行錄屏直播的裝置還可以可選地包括發(fā)送模塊34。
在用戶選擇使用移動(dòng)設(shè)備進(jìn)行直播的情況下,發(fā)送模塊34可以將第一RTMP數(shù)據(jù)包發(fā)送到內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù)器,在用戶選擇使用終端計(jì)算機(jī)進(jìn)行直播的情況下,發(fā)送模塊34可以將第一RTMP數(shù)據(jù)包發(fā)送到終端計(jì)算機(jī)。
在用戶選擇使用所述移動(dòng)設(shè)備進(jìn)行直播的情況下,該裝置還可以包括圖中虛線部分所示的第二采集模塊35和第二編碼模塊36。
第二采集模塊35可以通過(guò)所述移動(dòng)設(shè)備的麥克風(fēng)采集第一音頻數(shù)據(jù)。第二編碼模塊36可以對(duì)第一音頻數(shù)據(jù)進(jìn)行編碼,封裝模塊33可以將編碼后的第一音頻數(shù)據(jù)封裝到第一RTMP數(shù)據(jù)包中。
其中,圖3所示的各個(gè)功能模塊可以執(zhí)行的方法步驟的細(xì)節(jié)部分,可參見(jiàn)上文結(jié)合圖1的相關(guān)說(shuō)明,這里不再贅述。
基于上文述及的錄屏直播方法,本發(fā)明還提供了一種移動(dòng)設(shè)備和錄屏直播系統(tǒng)。
其中,錄屏直播系統(tǒng)包括移動(dòng)設(shè)備和上文述及的終端計(jì)算機(jī)。下面結(jié)合圖4對(duì)本發(fā)明的移動(dòng)設(shè)備和錄屏直播系統(tǒng)進(jìn)行簡(jiǎn)要說(shuō)明。
圖4示出了根據(jù)本發(fā)明一實(shí)施例的錄屏直播系統(tǒng)的示意性方框圖。
參見(jiàn)圖4,其中圖4示出的內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù)器30是為了更清楚地理解本發(fā)明,應(yīng)該知道,本發(fā)明實(shí)施例的錄屏直播系統(tǒng)可以包括也可以不包括內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù)器30。
參見(jiàn)圖4,移動(dòng)設(shè)備10包括屏幕1、處理器2、存儲(chǔ)器3以及通信模塊4。
處理器2可以使用應(yīng)用程序接口Opengl ES以預(yù)設(shè)的第一幀頻采集屏幕1所呈現(xiàn)的屏幕畫(huà)面所對(duì)應(yīng)的第一屏幕數(shù)據(jù),對(duì)第一屏幕數(shù)據(jù)進(jìn)行編碼,以得到編碼后的第一視頻數(shù)據(jù),處理器2將第一視頻數(shù)據(jù)封裝成第一RTMP數(shù)據(jù)包,并將第一RTMP數(shù)據(jù)包存儲(chǔ)到存儲(chǔ)器3中。
其中,在用戶選擇使用移動(dòng)設(shè)備10進(jìn)行直播的情況下,處理器2可以通過(guò)通信模塊4將第一RTMP數(shù)據(jù)包發(fā)送到內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù)器30。
在用戶選擇使用終端計(jì)算機(jī)20進(jìn)行直播的情況下,處理器2可以通過(guò)通信模塊4將第一RTMP數(shù)據(jù)包發(fā)送到終端計(jì)算機(jī)20。
優(yōu)選地,移動(dòng)設(shè)備10與終端計(jì)算機(jī)20處于同一局域網(wǎng)內(nèi)。終端計(jì)算機(jī)20接收移動(dòng)設(shè)備10通過(guò)局域網(wǎng)內(nèi)推流的方式發(fā)送的第一RTMP數(shù)據(jù)包,并對(duì)第一RTMP數(shù)據(jù)包進(jìn)行解封裝,以得到第一視頻數(shù)據(jù),終端計(jì)算機(jī)20基于第一視頻數(shù)據(jù),在終端計(jì)算機(jī)20的屏幕上呈現(xiàn)移動(dòng)設(shè)備的屏幕畫(huà)面,并以預(yù)設(shè)的第二幀頻采集終端計(jì)算機(jī)20的屏幕畫(huà)面所對(duì)應(yīng)的第二屏幕數(shù)據(jù),終端計(jì)算機(jī)20對(duì)采集得到的第二屏幕數(shù)據(jù)進(jìn)行視頻編碼,以得到第二視頻數(shù)據(jù),終端計(jì)算機(jī)20將第二視頻數(shù)據(jù)封裝成第二RTMP數(shù)據(jù)包,并將第二RTMP數(shù)據(jù)包發(fā)送到內(nèi)容分發(fā)網(wǎng)絡(luò)服務(wù)器30。
至此,結(jié)合圖3對(duì)移動(dòng)設(shè)備10和終端計(jì)算機(jī)20做了基本說(shuō)明,其中,關(guān)于移動(dòng)設(shè)備10、終端計(jì)算機(jī)20可以執(zhí)行的方法步驟的細(xì)節(jié)部分,可參見(jiàn)上文結(jié)合圖1、圖2的相關(guān)說(shuō)明,這里不再贅述。
上文中已經(jīng)參考附圖詳細(xì)描述了根據(jù)本發(fā)明的錄屏直播的方法和裝置、移動(dòng)設(shè)備及錄屏直播系統(tǒng)。
此外,根據(jù)本發(fā)明的方法還可以實(shí)現(xiàn)為一種計(jì)算機(jī)程序,該計(jì)算機(jī)程序包括用于執(zhí)行本發(fā)明的上述方法中限定的上述各步驟的計(jì)算機(jī)程序代碼指令。或者,根據(jù)本發(fā)明的方法還可以實(shí)現(xiàn)為一種計(jì)算機(jī)程序產(chǎn)品,該計(jì)算機(jī)程序產(chǎn)品包括計(jì)算機(jī)可讀介質(zhì),在該計(jì)算機(jī)可讀介質(zhì)上存儲(chǔ)有用于執(zhí)行本發(fā)明的上述方法中限定的上述功能的計(jì)算機(jī)程序。本領(lǐng)域技術(shù)人員還將明白的是,結(jié)合這里的公開(kāi)所描述的各種示例性邏輯塊、模塊、電路和算法步驟可以被實(shí)現(xiàn)為電子硬件、計(jì)算機(jī)軟件或兩者的組合。
附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個(gè)實(shí)施例的系統(tǒng)和方法的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)記的功能也可以以不同于附圖中所標(biāo)記的順序發(fā)生。例如,兩個(gè)連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或操作的專用的基于硬件的系統(tǒng)來(lái)實(shí)現(xiàn),或者可以用專用硬件與計(jì)算機(jī)指令的組合來(lái)實(shí)現(xiàn)。
以上已經(jīng)描述了本發(fā)明的各實(shí)施例,上述說(shuō)明是示例性的,并非窮盡性的,并且也不限于所披露的各實(shí)施例。在不偏離所說(shuō)明的各實(shí)施例的范圍和精神的情況下,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō)許多修改和變更都是顯而易見(jiàn)的。本文中所用術(shù)語(yǔ)的選擇,旨在最好地解釋各實(shí)施例的原理、實(shí)際應(yīng)用或?qū)κ袌?chǎng)中的技術(shù)的改進(jìn),或者使本技術(shù)領(lǐng)域的其它普通技術(shù)人員能理解本文披露的各實(shí)施例。