亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種移動(dòng)設(shè)備音視頻流實(shí)時(shí)傳輸方法與流程

文檔序號(hào):12038206閱讀:1428來源:國知局
一種移動(dòng)設(shè)備音視頻流實(shí)時(shí)傳輸方法與流程

本發(fā)明涉及移動(dòng)設(shè)備通信技術(shù),特別涉及一種移動(dòng)設(shè)備音視頻流實(shí)時(shí)傳輸方法。



背景技術(shù):

自2011年起,移動(dòng)設(shè)備(主要包括手機(jī),平板等)全球出貨量就已經(jīng)超越pc,隨后,移動(dòng)設(shè)備一直保持著快速發(fā)展,從2007年到2015年,移動(dòng)設(shè)備的出貨量增長1000%以上,同時(shí),移動(dòng)設(shè)備的智能化程度越來越高,其運(yùn)算能力已不弱于普通pc,這使得人們對(duì)于移動(dòng)設(shè)備的功能需求越來越豐富和多樣化。

音視頻通信是近年來非常熱門的移動(dòng)設(shè)備通信方式,有別于傳統(tǒng)的電話/短信通信,音視頻通信包含了更豐富的信息維度,特別是視頻數(shù)據(jù)的加入,大大增強(qiáng)了通信數(shù)據(jù)的表現(xiàn)力。但是由于音視頻通信的數(shù)據(jù)量大,數(shù)據(jù)使用復(fù)雜等原因,音視頻通信的穩(wěn)定性、實(shí)時(shí)性一直是一項(xiàng)頗具挑戰(zhàn)性的工作。

當(dāng)下流行的音視頻傳輸技術(shù)包括hpd(httpprogressivedownload)、hls(httplivingstreaming)、rtsp(realtimestreamingprotocol)三種方式。hpd在開始播放之前僅需等待一段較短的時(shí)間用于下載和緩沖該媒體文件最前面的一部分?jǐn)?shù)據(jù),之后便可以一邊下載一邊播放。在正式開始播放之前的這一小段緩沖應(yīng)使得后續(xù)即使在網(wǎng)絡(luò)較為擁塞的情況下媒體數(shù)據(jù)也能夠得以不間斷地連續(xù)播放。hls是蘋果公司(appleinc.)實(shí)現(xiàn)的基于http的流媒體傳輸協(xié)議,可實(shí)現(xiàn)流媒體的直播和點(diǎn)播,主要應(yīng)用在ios系統(tǒng)。hls協(xié)議在服務(wù)器端將音視頻數(shù)據(jù)流存儲(chǔ)為連續(xù)的、很短時(shí)長的媒體文件,而客戶端則不斷的下載并播放這些小文件,因?yàn)榉?wù)器端總是會(huì)將最新的直播數(shù)據(jù)生成新的小文件,這樣客戶端只要不停的按順序播放從服務(wù)器獲取到的文件,就實(shí)現(xiàn)了直播。rtsp實(shí)際上是由一組在ietf中標(biāo)準(zhǔn)化的協(xié)議所組成,包括rtsp(實(shí)時(shí)流媒體會(huì)話協(xié)議),sdp(會(huì)話描述協(xié)議),rtp(實(shí)時(shí)傳輸協(xié)議),以及針對(duì)不同編解碼標(biāo)準(zhǔn)的rtp凈載格式等,共同協(xié)作來構(gòu)成一個(gè)流媒體協(xié)議棧,支持實(shí)時(shí)的音視頻通信。

經(jīng)過實(shí)際應(yīng)用證明,hpd、hls、rtsp都有相應(yīng)的缺陷:hpd不支持實(shí)時(shí)音視頻通信,缺少會(huì)話控制和流量控制;hls的實(shí)時(shí)性欠佳,在ios以外的設(shè)備支持度較低;而rtsp實(shí)現(xiàn)較為復(fù)雜,其開發(fā)和維護(hù)成本都較高。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明所要解決的技術(shù)問題是:提出一種移動(dòng)設(shè)備音視頻流實(shí)時(shí)傳輸方法,解決傳統(tǒng)技術(shù)中移動(dòng)設(shè)備音視頻傳輸方案存在的穩(wěn)定性、實(shí)時(shí)性不好的問題。

本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:

一種移動(dòng)設(shè)備音視頻流實(shí)時(shí)傳輸方法,包括以下步驟:

a.作為音視頻數(shù)據(jù)發(fā)送端的移動(dòng)設(shè)備a和作為音視頻數(shù)據(jù)接收端的移動(dòng)設(shè)備b啟動(dòng),然后開始參數(shù)配置工作;

b.移動(dòng)設(shè)備a開啟音視頻數(shù)據(jù)采集的線程進(jìn)行音視頻數(shù)據(jù)采集,并采用編碼器分別對(duì)音頻和視頻進(jìn)行編碼,并記錄對(duì)應(yīng)的配置信息;

c.移動(dòng)設(shè)備a將每一幀音視頻數(shù)據(jù)和對(duì)應(yīng)的配置信息封裝成對(duì)象并存入緩存池中;

d.移動(dòng)設(shè)備a讀取緩存池中的音視頻數(shù)據(jù),將對(duì)應(yīng)配置信息封裝至協(xié)議頭中,已編碼的數(shù)據(jù)緊跟協(xié)議頭之后;

e.移動(dòng)設(shè)備a將經(jīng)過步驟d封裝的音視頻數(shù)據(jù)發(fā)送給移動(dòng)設(shè)備b;

f.移動(dòng)設(shè)備b接收到音視頻數(shù)據(jù)后首先讀取協(xié)議頭,根據(jù)讀取的信息查找對(duì)應(yīng)的解碼器進(jìn)行解碼,然后將解碼的數(shù)據(jù)放入其緩存池中待用。

作為進(jìn)一步優(yōu)化,步驟a中,所述開始參數(shù)配置工作包括:

a1、移動(dòng)設(shè)備a開啟兩個(gè)tcpsocket與移動(dòng)設(shè)備b建立連接,其中一個(gè)連接用于傳輸視頻數(shù)據(jù),另外一個(gè)連接用于傳輸音頻數(shù)據(jù);

a2、移動(dòng)設(shè)備a初始化三個(gè)線程at0、at1、at2,其中,at0用于音視頻數(shù)據(jù)采集,at1用于音頻數(shù)據(jù)的發(fā)送,at2用于視頻數(shù)據(jù)的發(fā)送;移動(dòng)設(shè)備b初始化兩個(gè)線程bt1、bt2,其中,bt1用于音頻數(shù)據(jù)的接收和解碼,bt2用于視頻數(shù)據(jù)的接收和解碼;

a3、移動(dòng)設(shè)備a初始化兩個(gè)緩存池apool1、apool2,其中,apool1用于存放已編碼的音頻數(shù)據(jù)及其對(duì)應(yīng)的配置信息,apool2用于存放已編碼的視頻數(shù)據(jù)及其對(duì)應(yīng)的配置信息;移動(dòng)設(shè)備b初始化兩個(gè)緩存池bpool1、bpool2,其中,bpool1用于存放已解碼的音頻數(shù)據(jù)及其對(duì)應(yīng)的配置信息,bpool2用于存放已解碼的視頻數(shù)據(jù)及其對(duì)應(yīng)的配置信息;

a4、移動(dòng)設(shè)備a初始化音視頻編碼器。

作為進(jìn)一步優(yōu)化,步驟b、c中,所述對(duì)應(yīng)的配置信息包括:編碼格式、數(shù)據(jù)長度和時(shí)間戳信息。

作為進(jìn)一步優(yōu)化,步驟d中,所述移動(dòng)設(shè)備a讀取緩存池中的音視頻數(shù)據(jù),具體包括:

移動(dòng)設(shè)備a初始化的線程at1和at2檢測到緩存池有音視頻數(shù)據(jù)時(shí),從緩存池中讀取數(shù)據(jù)。

作為進(jìn)一步優(yōu)化,步驟d中,在配置信息和數(shù)據(jù)封裝時(shí)需要遵循以下規(guī)則:

d1、協(xié)議頭每行以“\r\n”結(jié)尾;

d2、協(xié)議頭第一行為“<chunkstart>”,標(biāo)志一個(gè)完整數(shù)據(jù)的開始

d3、協(xié)議頭第二行為“command:”,緊隨其后是該數(shù)據(jù)的編碼格式,以及其它自定義命令以“/”分隔,內(nèi)容格式為“[數(shù)據(jù)類型]/[編碼方式]/[命令]”;

d4、協(xié)議頭第三行為“content-length:”,緊隨其后是該數(shù)據(jù)的長度,單位是字節(jié);

d5、協(xié)議頭第四行為“timestamp:”,緊隨其后是采集數(shù)據(jù)時(shí)記錄的時(shí)間戳;

d6、協(xié)議頭第五行為空白,僅包含“\r\n”結(jié)尾符。

作為進(jìn)一步優(yōu)化,步驟e中,所述移動(dòng)設(shè)備a通過與移動(dòng)設(shè)備b之間建立的兩個(gè)tcp連接分別將音頻數(shù)據(jù)和視頻數(shù)據(jù)發(fā)送給移動(dòng)設(shè)備b。

作為進(jìn)一步優(yōu)化,步驟f中,移動(dòng)設(shè)備b接收到音視頻數(shù)據(jù)后首先讀取協(xié)議頭,根據(jù)讀取的信息查找對(duì)應(yīng)的解碼器進(jìn)行解碼,具體包括:

根據(jù)協(xié)議頭數(shù)據(jù)長度讀取對(duì)應(yīng)大小的流數(shù)據(jù),根據(jù)編碼格式和時(shí)間戳來查找對(duì)應(yīng)的解碼器進(jìn)行解碼。

作為進(jìn)一步優(yōu)化,步驟f中,移動(dòng)設(shè)備b通過初始化的線程bt1和bt2監(jiān)聽對(duì)應(yīng)的tcpsocket端口,當(dāng)有數(shù)據(jù)來時(shí),解析協(xié)議頭。

作為進(jìn)一步優(yōu)化,步驟f具體包括:

f1、移動(dòng)設(shè)備b以”\r\n\r\n”為協(xié)議頭結(jié)束標(biāo)志位,從tcpsocket緩存池中讀取協(xié)議頭數(shù)據(jù);

f2、以“\r\n”為協(xié)議頭每行結(jié)束標(biāo)志位,將讀取的協(xié)議頭分割為對(duì)應(yīng)的四行內(nèi)容,檢查第一行是否為“<chunkstart>”,驗(yàn)證協(xié)議頭正確性,檢驗(yàn)其余行內(nèi)容關(guān)鍵字,若包含“command”,則從該行內(nèi)容中讀取數(shù)據(jù)類型和編碼方式的信息以及協(xié)商的命令;若包含“content-length”,則從該行內(nèi)容中讀取數(shù)據(jù)長度信息;若包含“timestamp”,則從該行內(nèi)容中讀取數(shù)據(jù)時(shí)間戳信息;

f3、根據(jù)f2步驟中讀取的數(shù)據(jù)長度信息,讀取對(duì)應(yīng)長度的數(shù)據(jù),根據(jù)f2步驟中讀取的編碼方式,選取對(duì)應(yīng)的解碼器進(jìn)行數(shù)據(jù)解碼;

f4、將解碼的數(shù)據(jù)和讀取的時(shí)間戳信息封裝成對(duì)象,存入對(duì)應(yīng)的緩存池以備使用。

本發(fā)明的有益效果是:

本發(fā)明利用局域網(wǎng)低延時(shí)的優(yōu)勢,采用基于tcp的傳輸協(xié)議,在保證實(shí)時(shí)、穩(wěn)定的傳輸性能的同時(shí),通過有效的協(xié)議頭控制,極大的增強(qiáng)了通信雙方的靈活性,對(duì)現(xiàn)有的音視頻通信技術(shù)是一種非常有效的補(bǔ)充。

附圖說明

圖1為實(shí)施例中的音視頻傳輸和接收流程圖;

圖2為協(xié)議頭結(jié)構(gòu)示意圖。

具體實(shí)施方式

本發(fā)明旨在提出一種移動(dòng)設(shè)備音視頻流實(shí)時(shí)傳輸方法,解決傳統(tǒng)技術(shù)中移動(dòng)設(shè)備音視頻傳輸方案存在的穩(wěn)定性、實(shí)時(shí)性不好的問題。其核心思想是:使用兩個(gè)tcp連接分別傳輸音頻數(shù)據(jù)和視頻幀,所有的數(shù)據(jù)與特定的協(xié)議頭綁定,協(xié)議頭包含了數(shù)據(jù)的長度,數(shù)據(jù)類型,時(shí)間戳,操作指令等內(nèi)容,接收端收到數(shù)據(jù)后,首先讀取協(xié)議頭,根據(jù)協(xié)議頭數(shù)據(jù)長度讀取對(duì)應(yīng)大小的流數(shù)據(jù),根據(jù)數(shù)據(jù)類型和時(shí)間戳來查找對(duì)應(yīng)的解碼器進(jìn)行解碼,協(xié)議頭的操作指令可以包含各種自定義的操作,比如切換分辨率,停止傳輸,重連接等等。

下面結(jié)合附圖及實(shí)施例對(duì)本發(fā)明的方案做進(jìn)一步的描述:

實(shí)施例:

本實(shí)施例中的作為發(fā)送端的移動(dòng)設(shè)備a與作為接收端的移動(dòng)設(shè)備b之間的音視頻傳輸和接收流程如圖1所示,其包含以下實(shí)施步驟:

1、移動(dòng)設(shè)備a、b啟動(dòng)程序,隨后,移動(dòng)設(shè)備a、b開始參數(shù)配置工作。

參數(shù)配置包括如下子步驟:

a1、發(fā)動(dòng)端移動(dòng)設(shè)備a開啟兩個(gè)tcpsocket與接收端移動(dòng)設(shè)備b建立連接,其中一個(gè)連接用于傳輸視頻數(shù)據(jù),另外一個(gè)連接用于傳輸音頻數(shù)據(jù),啟動(dòng)獨(dú)立的線程備用;

a2、發(fā)送端移動(dòng)設(shè)備a初始化三個(gè)線程at0、at1、at2,其中,at0用于音視頻數(shù)據(jù)采集,at1用于音頻數(shù)據(jù)的發(fā)送,at2用于視頻數(shù)據(jù)的發(fā)送;接收端移動(dòng)設(shè)備b初始化兩個(gè)線程bt1、bt2,其中,bt1用于音頻數(shù)據(jù)的接收和解碼,bt2用于視頻數(shù)據(jù)的接收和解碼;

a3、發(fā)送端移動(dòng)設(shè)備a初始化兩個(gè)緩存池apool1、apool2,其中,apool1用于存放已編碼的音頻數(shù)據(jù)及其對(duì)應(yīng)的配置信息,apool2用于存放已編碼的視頻數(shù)據(jù)及其對(duì)應(yīng)的配置信息;接收端移動(dòng)設(shè)備b初始化兩個(gè)緩存池bpool1、bpool2,其中,bpool1用于存放已解碼的音頻數(shù)據(jù)及其對(duì)應(yīng)的配置信息,bpool2用于存放已解碼的視頻數(shù)據(jù)及其對(duì)應(yīng)的配置信息;

a4、發(fā)送端移動(dòng)設(shè)備a初始化音視頻編碼器,注意,此處接收端移動(dòng)設(shè)備b并沒有初始化解碼器,而是根據(jù)接收到的數(shù)據(jù),動(dòng)態(tài)初始化對(duì)應(yīng)的解碼器進(jìn)行解碼;

2、發(fā)送端移動(dòng)設(shè)備a使用線程at0開始采集音視頻數(shù)據(jù),通過編碼器分別將音頻和視頻數(shù)據(jù)編碼為對(duì)應(yīng)的數(shù)據(jù)格式,并記錄各自的編碼格式、數(shù)據(jù)長度、時(shí)間戳信息等配置信息;

3、發(fā)送端移動(dòng)設(shè)備a使用線程at0將步驟2中采集的每一幀音視頻數(shù)據(jù)和對(duì)應(yīng)記錄的編碼方式、數(shù)據(jù)長度和時(shí)間戳封裝成對(duì)象存入緩存池中,并將at0的任務(wù)跳轉(zhuǎn)至步驟2;

4、發(fā)送端移動(dòng)設(shè)備a在步驟1中所初始化的線程at1和at2檢測到緩存池有音視頻數(shù)據(jù)時(shí),從緩存池中讀取數(shù)據(jù),并將數(shù)據(jù)的配置信息封裝到協(xié)議頭里面,已編碼的音視頻數(shù)據(jù)緊隨在協(xié)議頭之后,通過對(duì)應(yīng)的音視頻socket發(fā)送至移動(dòng)設(shè)備接收端b。

將配置信息和數(shù)據(jù)封裝需要遵循特定的規(guī)則,規(guī)則具體如下:

b1、協(xié)議頭每行以“\r\n”結(jié)尾;

b2、協(xié)議頭第一行為“<chunkstart>”,標(biāo)志一個(gè)完整數(shù)據(jù)的開始

b3、協(xié)議頭第二行為“command:”,緊隨其后是該數(shù)據(jù)的編碼格式,以及其它自定義命令以提供控制的靈活性,以“/”分隔,內(nèi)容格式為“[數(shù)據(jù)類型]/[編碼方式]/[命令]”,例如”audio/aac”?!皏ideo/h.264/exit”等;

b4、協(xié)議頭第三行為“content-length:”,緊隨其后是該數(shù)據(jù)的長度,單位是字節(jié)(byte);

b5、協(xié)議頭第四行為“timestamp:”,緊隨其后是采集數(shù)據(jù)時(shí)記錄的時(shí)間戳;

b6、協(xié)議頭第五行為空白,僅包含“\r\n”結(jié)尾符。

協(xié)議頭的結(jié)構(gòu)如圖2所示。

5、接收端移動(dòng)設(shè)備b在步驟1中初始化的線程bt1,bt2監(jiān)聽對(duì)應(yīng)的tcpsocket端口,當(dāng)有數(shù)據(jù)來時(shí),解析協(xié)議頭,并將數(shù)據(jù)解碼放入到緩存池等待使用。

所述讀取數(shù)據(jù)、解析協(xié)議頭、存放緩存池包括如下幾個(gè)步驟:

c1、以”\r\n\r\n”為協(xié)議頭結(jié)束標(biāo)志位,從tcpsocket緩存池中讀取協(xié)議頭數(shù)據(jù);

c2、以“\r\n”為協(xié)議頭每行結(jié)束標(biāo)志位,將讀取的協(xié)議頭分割為對(duì)應(yīng)的四行內(nèi)容,檢查第一行是否為“<chunkstart>”,驗(yàn)證協(xié)議頭正確性,檢驗(yàn)其余行內(nèi)容關(guān)鍵字,若包含“command”,則從該行內(nèi)容中讀取數(shù)據(jù)類型和編碼方式的信息以及協(xié)商的命令;若包含“content-length”,則從該行內(nèi)容中讀取數(shù)據(jù)長度信息;若包含“timestamp”,則從該行內(nèi)容中讀取數(shù)據(jù)時(shí)間戳信息;

c3、根據(jù)c2步驟中讀取的數(shù)據(jù)長度信息,讀取對(duì)應(yīng)長度的數(shù)據(jù),根據(jù)c2步驟中讀取的編碼方式,選取對(duì)應(yīng)的解碼器將數(shù)據(jù)解碼;

c4、將c3步驟解碼的數(shù)據(jù)和c2步驟讀取的時(shí)間戳信息封裝成對(duì)象,存入對(duì)應(yīng)的緩存池以備使用。

基于以上方案,本發(fā)明中的移動(dòng)設(shè)備音視頻流實(shí)時(shí)傳輸方法在保證實(shí)時(shí)、穩(wěn)定的傳輸性能的同時(shí),通過有效的協(xié)議頭控制,極大的增強(qiáng)了通信雙方的靈活性。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1