欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

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

文檔序號:12038206閱讀:1409來源:國知局
一種移動設(shè)備音視頻流實時傳輸方法與流程

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



背景技術(shù):

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

附圖說明

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

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

具體實施方式

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

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

實施例:

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

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

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

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

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

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

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

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

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

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

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

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

b2、協(xié)議頭第一行為“<chunkstart>”,標(biāo)志一個完整數(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ù)時記錄的時間戳;

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

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

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

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

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

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

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

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

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

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
柘荣县| 彭山县| 剑河县| 额尔古纳市| 扎囊县| 巴塘县| 平度市| 库车县| 大悟县| 石嘴山市| 定陶县| 保靖县| 屏山县| 田阳县| 延安市| 宝丰县| 洞头县| 大姚县| 湘乡市| 星座| 稻城县| 甘孜| 门头沟区| 咸丰县| 雷波县| 桃江县| 天峻县| 辰溪县| 崇明县| 锦屏县| 毕节市| 宿松县| 塔河县| 万安县| 文水县| 博白县| 夏邑县| 台湾省| 儋州市| 申扎县| 获嘉县|