基于mp4文件格式的http實時視頻傳輸方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明設(shè)及視頻傳輸技術(shù)領(lǐng)域,特別是指基于MP4文件格式的HTTP實時視頻傳輸 方法。
【背景技術(shù)】
[0002] 實時視頻在互聯(lián)網(wǎng)的傳輸多采用W下幾種協(xié)議:
[0003] 1:RTP(實時傳輸協(xié)議)主要用于攝像頭,視頻監(jiān)控,視頻互動。缺點是在web頁面要 用插件接收數(shù)據(jù)流。
[0004] 2:RTMP/RTMFP RTMP主要用來在Flash/AIR平臺和支持RTMP協(xié)議的流媒體/交互服 務(wù)器之間進行音視頻和數(shù)據(jù)通信.RTMFP是Adobe公司開發(fā)的一套新的通信協(xié)議,主要用來 在Adobe Flash Player的終端用戶之間進行直接通信。包括音頻視頻數(shù)據(jù)通信。Web頁面要 用Flash插件接收數(shù)據(jù)流,apple ios不支持Flash插件。
[0005] 3:HLS巧ttp Live Streaming,ht1:p實時流協(xié)議化LS是蘋果公司推出的基于ht1:p 流媒體傳輸協(xié)議,使用MPEG-2的封裝音視頻壓縮數(shù)據(jù)流。缺點是只有apple ios支持, google C虹ome支持的不是很好。其他的瀏覽器不支持。
[0006] 4:其他各類私有協(xié)議。出現(xiàn)在各種不同的應(yīng)用中,都無法簡單的嵌入到web頁面 中。
[0007] W上的幾種的視頻傳輸方案,在接收端都無法實現(xiàn)與所有主流瀏覽器的兼容,或 者需要自定義的插件來實現(xiàn);在不同的接收端要使用不同的系統(tǒng)和瀏覽器。
【發(fā)明內(nèi)容】
[000引本發(fā)明提出一種基于MP4文件格式的HTTP實時視頻傳輸方法,解決了現(xiàn)在的視頻 傳輸方案兼容性差的問題,
[0009] 本發(fā)明的技術(shù)方案是運樣實現(xiàn)的:
[0010] -種基于MP4文件格式的HTTP實時視頻傳輸方法,包括W下步驟:
[0011] (1)啟動HTTP服務(wù)器;
[0012] (2)客戶端向服務(wù)器發(fā)送HTT內(nèi)青求,請求服務(wù)器傳輸實時音視頻數(shù)據(jù)流;
[0013] (3)服務(wù)器檢查HTTP請求格式是否有效,若無效則返回404,或者其他錯誤數(shù)據(jù),關(guān) 閉連接;否則,進入下一步;
[0014] (4)若還沒有啟動采集編碼則啟動編碼采集,將H. 264視頻編碼器和AAC音頻編碼 器的參數(shù)信息封裝到MP4文件頭中,并首先將封裝好MPEG-4文件頭通過HTTP協(xié)議發(fā)送給客 戶端;
[0015] (5)若已經(jīng)啟動編碼采集,則將封裝好的MP4文件頭通過HTTP協(xié)議發(fā)送給客戶端;
[0016] (6)將H.264視頻編碼器得到的視頻編碼數(shù)據(jù)和AAC音頻編碼器得到的音頻編碼數(shù) 據(jù)封裝到MP4文件的影片分片數(shù)據(jù)塊中;
[0017] (7)將影片分片數(shù)據(jù)塊加載到多媒體數(shù)據(jù)流中進行發(fā)送;
[0018] (8)停止接收多媒體數(shù)據(jù)流。
[0019] 進一步的,在步驟(4)中,H. 264視頻編碼器和AAC音頻編碼器從多媒體源中的視頻 數(shù)據(jù)和音頻數(shù)據(jù)進行采集編碼,多媒體源包括W路徑和文件名表示的標(biāo)簽W及引用計數(shù)標(biāo) 識,多媒體源對應(yīng)N個多媒體數(shù)據(jù)流,N為整數(shù),N大于等于1。
[0020] 進一步的,MP4文件包括文件類型數(shù)據(jù)塊、影片信息數(shù)據(jù)塊和若干影片分片,文件 類型數(shù)據(jù)塊用于指示該MP4文件的應(yīng)用信息;影片信息數(shù)據(jù)塊用于指示該MP4文件的影片信 息;影片分片用于包含音頻數(shù)據(jù)和視頻數(shù)據(jù)。
[0021] 進一步的,文件類型數(shù)據(jù)塊位于MP4文件的開始部位,依次包括1個32位的主標(biāo)識, 1個32位的副版本號和1個W32位為單位元素的公司標(biāo)識。
[0022] 進一步的,影片信息數(shù)據(jù)塊包括影片頭數(shù)據(jù)塊和多媒體軌道數(shù)據(jù)塊;多媒體軌道 數(shù)據(jù)塊包括多媒體軌道頭數(shù)據(jù)塊和媒體數(shù)據(jù)塊;媒體數(shù)據(jù)塊包括媒體頭數(shù)據(jù)塊、管理引用 數(shù)據(jù)塊和媒體信息數(shù)據(jù)塊;媒體信息數(shù)據(jù)塊包括視頻媒體頭數(shù)據(jù)塊、音頻媒體頭數(shù)據(jù)塊、媒 體數(shù)據(jù)信息塊和帖表數(shù)據(jù)塊。
[0023] 進一步的,影片分片包括擴展的影片數(shù)據(jù)塊、影片分片數(shù)據(jù)塊和影片分片隨機訪 問數(shù)據(jù)塊。
[0024] 進一步的,擴展的影片數(shù)據(jù)塊包括擴展的影片頭數(shù)據(jù)塊和擴展的多媒體軌道信 息;擴展的影片頭數(shù)據(jù)塊包括一個用于表示MP4文件的持續(xù)時間的fragment_duration字 段;擴展的多媒體軌道信息用于描述每個多媒體數(shù)據(jù)流的分片信息。
[0025] 進一步的,影片分片數(shù)據(jù)塊包括影片分片頭數(shù)據(jù)塊和分片的多媒體軌道數(shù)據(jù)塊; 分片的多媒體軌道數(shù)據(jù)塊的個數(shù)大于等于1,影片分片頭數(shù)據(jù)塊包含一個序列號,序列號用 于表示影片分片的序號。
[0026] 進一步的,分片的多媒體軌道數(shù)據(jù)塊包括分片的多媒體軌道頭數(shù)據(jù)塊、分片的多 媒體軌道運行信息數(shù)據(jù)塊。
[0027] 本發(fā)明的有益效果在于:通過將視頻編碼的H. 264碼流和音頻編碼的AAC碼流W MP4文件格式封裝到多媒體數(shù)據(jù)流中,再通過HTTP協(xié)議傳輸?shù)浇邮斩?,由瀏覽器接收和播放 收到的實時的MP4文件的碼流。解決了音視頻在Web應(yīng)用中無法兼容各種系統(tǒng)各種瀏覽器的 問題。
【附圖說明】
[0028] 為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可 W根據(jù)運些附圖獲得其他的附圖,
[0029] 圖1為本發(fā)明基于MP4文件格式的HTTP實時視頻傳輸方法的流程圖。
【具體實施方式】
[0030] 下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完 整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例,基于 本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他 實施例,都屬于本發(fā)明保護的范圍,
[00川 1、MP4文件格式概述
[0032] MP4文件中的所有數(shù)據(jù)都裝在box(數(shù)據(jù)塊)中,也就是說MP4文件由若干個box(數(shù) 據(jù)塊)組成,每個box(數(shù)據(jù)塊)有類型和長度,可W將box理解為一個數(shù)據(jù)對象塊。box(數(shù)據(jù) 塊)中可W包含另一個box(數(shù)據(jù)塊),運種box(數(shù)據(jù)塊)稱為container box(數(shù)據(jù)塊容器)。 一個MP4文件首先會有且只有一個"ftyp"類型的box(數(shù)據(jù)塊),作為MP4格式的標(biāo)志并包含 關(guān)于文件的一些信息;之后會有且只有一個"moov"類型的box(數(shù)據(jù)塊),它是一種 con化iner box(數(shù)據(jù)塊容器),子box包含了媒體的metadata(元數(shù)據(jù))信息;MP4文件的媒體 數(shù)據(jù)包含在"mdat"類型的box(Midia Data Box)中,該類型的box也是container box,可W 有多個,也可W沒有(當(dāng)媒體數(shù)據(jù)全部引用其他文件時),媒體數(shù)據(jù)的結(jié)構(gòu)由me化da化(元數(shù) 據(jù))進行描述。
[0033] 2、基礎(chǔ)概念:
[0034] 化ack(多媒體軌道)表示一些sample(帖)的集合,對于媒體數(shù)據(jù)來說,track表示 一個視頻或音頻序列。
[0035] hint化ack(多媒體軌道信息指示)運個特殊的化ack并不包含媒體數(shù)據(jù),而是包 含了一些將其他數(shù)據(jù)track(多媒體軌道)打包成流媒體的指示信息。
[0036] sample(帖)對于非hint track來說,video sample(視頻帖)即為一帖視頻,或一 組連續(xù)視頻帖,audio samp 1 e(音頻帖)即為一段連續(xù)的壓縮音頻,它們統(tǒng)稱samp 1 e。對于 hint track ,sample定義一個或多個流媒體包的格式。
[0037] sample化ble(帖表)指明sampe時序和物理布局的表。
[003引 chunk (帖塊)一個track (軌道)的幾個samp 1 e (帖)組成的單元。
[0039] 3、Box (數(shù)據(jù)塊)
[0040] 首先,box(數(shù)據(jù)塊)中的字節(jié)序為網(wǎng)絡(luò)字節(jié)序,也就是大端字節(jié)序(Big-Endian), 簡單的說,就是一個32位的4字節(jié)整數(shù)存儲方式為高位字節(jié)在內(nèi)存的低端。Box由header (頭)和body(體)組成,其中header(頭)統(tǒng)一指明box的大小和類型,body(體)根據(jù)類型有不 同的意義和格式。
[0041] 標(biāo)準(zhǔn)的box(數(shù)據(jù)塊)開頭的4個字節(jié)(32位)為box size(數(shù)據(jù)塊大?。摯笮“?box header!;數(shù)據(jù)塊頭)和box body(數(shù)據(jù)塊體)整個box(數(shù)據(jù)塊)的大小,可W在文件中定 位各個box(數(shù)據(jù)塊)。如果size(數(shù)據(jù)塊大?。?,則表示運個box的大小為large size(數(shù) 據(jù)塊大小超過4G,無法用4字節(jié)值保存),真正的size(數(shù)據(jù)塊大小)值要在Iargesize域上 得到。(實際上只有"mdat"類型的box才有可能用到large size。)如果size為0,表示該box 為文件的最后一個box,文件結(jié)尾即為該box結(jié)尾。(同樣只存在于"mdat"類型的box中。)
[0042] box size(數(shù)據(jù)塊大?。┖竺婢o跟的32位為box type(數(shù)據(jù)塊類型),一般是4個字 符,如吁typ"、"moov"等,運些box type都是已經(jīng)預(yù)定義好的,分別表示固定的意義。如果是 "uuid",表示該box(數(shù)據(jù)塊)為用戶擴展類型。如果box type是未定義的,應(yīng)該將其忽略。
[0043] MP4文件包括文件類型數(shù)據(jù)塊、影片信息數(shù)據(jù)塊和若干影片分片,文件類型數(shù)據(jù)塊 用于指示該MP4文件的應(yīng)用信息;影片信息數(shù)據(jù)塊用于指示該MP4文件的影片信息;影片分 片用于包含音頻數(shù)據(jù)和視頻數(shù)據(jù)。
[0044] 文件類型數(shù)據(jù)塊位于MP4文件的開始部位,依次包括1個32位的主標(biāo)識,1個32位的 副版本號和I個W32位為單位元素的公司標(biāo)識,用來指示MP4文件應(yīng)用級別的信息。
[0045] 影片信息數(shù)據(jù)塊放置在文件類型數(shù)據(jù)塊的后面,包括1個影片頭數(shù)據(jù)塊和若干個 多媒體軌道數(shù)據(jù)塊;
[0046] 影片頭數(shù)據(jù)塊結(jié)構(gòu)如下表所示:
[0049] 多媒體軌道數(shù)據(jù)塊(Track Box,trak)包括多媒體軌道頭數(shù)據(jù)塊和媒體數(shù)據(jù)塊; "trak"也是一個container box(數(shù)據(jù)塊容器),其子box包含了hack(多媒體軌道)的媒體 數(shù)據(jù)引用和描述化int track除外)。一個MP4文件中可W包含多個化ack,且至少有一個 track,運些track之間彼此獨立,有自己的時間和空間信息。"trak"必須包含一個"t化d"和 一個"mdia",其中"tldicT為t