一種基于幀定位技術(shù)的流媒體播放方法
【專利摘要】本發(fā)明涉及視頻監(jiān)控【技術(shù)領(lǐng)域】。本發(fā)明的一種基于幀定位技術(shù)的流媒體播放方法,通過將編碼器將原始編碼視頻數(shù)據(jù)流和原始編碼音頻數(shù)據(jù)流進(jìn)行自定義格式封裝后,加入時(shí)間標(biāo)簽的原始碼流不會(huì)對(duì)解碼器解碼形成影響,同時(shí)根據(jù)人體主觀感受(視聽心理學(xué))在音頻連續(xù)的條件下,盡量兼顧視頻畫面的連貫性,使用者能流暢地瀏覽歷史存儲(chǔ)的流媒體信息。本發(fā)明的該幀定位技術(shù)采用異步解碼,解碼先于播放,并且,可僅通過查表快速獲取用于播放的解碼幀數(shù)據(jù),定位播放速度遠(yuǎn)高于通常的播放器;本發(fā)明的自定義原始編碼幀可實(shí)現(xiàn)音視頻數(shù)據(jù)獨(dú)立存儲(chǔ)、交叉存儲(chǔ)等各種方案,適應(yīng)性較強(qiáng)。
【專利說明】一種基于幀定位技術(shù)的流媒體播放方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及視頻監(jiān)控【技術(shù)領(lǐng)域】,具體涉及一種基于幀定位技術(shù)的流媒體播放方法。
【背景技術(shù)】
[0002]在視頻監(jiān)控領(lǐng)域存在海量的數(shù)據(jù)存儲(chǔ),瀏覽歷史音視頻錄像信息,除對(duì)存儲(chǔ)介質(zhì)上已壓縮編碼的流媒體數(shù)據(jù)進(jìn)行快速檢索和視頻回放等功能以外,還需要兼顧安全性、兼容性、容錯(cuò)性方面的考慮,所以一些場(chǎng)合下,需要把現(xiàn)場(chǎng)錄制的音視頻數(shù)據(jù)存儲(chǔ)在自定義存儲(chǔ)格式的磁盤介質(zhì)中,這對(duì)于按特定格式存儲(chǔ)的媒體數(shù)據(jù)的展示的性能提出了新的要求,如按時(shí)間點(diǎn)快速定位、快進(jìn)快退、步進(jìn)等功能。出于安全考慮的流媒體數(shù)據(jù)格式并不能直接被通用播放軟件識(shí)別,通常各廠商需要自行設(shè)計(jì)針對(duì)此類存儲(chǔ)格式的多媒體播放軟件。
[0003]要解決特定存儲(chǔ)格式的流媒體大數(shù)據(jù)的高效流暢展示問題,一種解決方案是在原始碼中加入時(shí)間標(biāo)簽,并對(duì)實(shí)時(shí)解碼后的數(shù)據(jù)幀按時(shí)間點(diǎn)及幀號(hào)建立索引并進(jìn)行高效緩存,這樣既可以實(shí)現(xiàn)多媒體播放系統(tǒng)按幀號(hào)或按時(shí)間偏移快速定位播放位置,又能實(shí)現(xiàn)對(duì)音視頻信息進(jìn)行同步播放。
【發(fā)明內(nèi)容】
[0004]解決上述技術(shù)問題,本發(fā)明提供了一種通過在音視頻原始碼流加入時(shí)間標(biāo)簽的特殊技術(shù),并兼容通用編碼格式,播放系統(tǒng)對(duì)實(shí)時(shí)解碼后的音視幀按音頻時(shí)間同步,以實(shí)現(xiàn)流媒體信息按幀號(hào)或按時(shí)間高效定位和流暢播放的目的。
[0005]為了達(dá)到上述目的,本發(fā)明所采用的技術(shù)方案是,一種基于幀定位技術(shù)的流媒體播放方法,包括以下步驟:
步驟1:編碼器將原始編碼視頻數(shù)據(jù)流和原始編碼音頻數(shù)據(jù)流進(jìn)行自定義格式封裝后,分別生成自定義視頻數(shù)據(jù)幀和自定義音頻數(shù)據(jù)幀,并將該自定義視頻數(shù)據(jù)幀和自定義音頻數(shù)據(jù)幀存入磁盤介質(zhì);
將原始編碼視頻數(shù)據(jù)流進(jìn)行自定義格式封裝后形成自定義視頻數(shù)據(jù)幀,具體包括以下步驟:將原始編碼視頻數(shù)據(jù)流采用H.264編碼后得到H.264視頻幀,在H.264視頻幀之前增加13個(gè)字節(jié)的幀頭,生成自定義視頻數(shù)據(jù)幀,所述自定義視頻數(shù)據(jù)幀的幀頭前五個(gè)字節(jié)分別為:0x00 0x00 0x00 0x01 0x00,所述自定義視頻數(shù)據(jù)幀的幀頭的第六字節(jié)到第十三字節(jié)則是用于存放八字節(jié)時(shí)間戳,所述八字節(jié)時(shí)間戳采用小端方式(little-endian)排序,即低字節(jié)地址在前,高字節(jié)地址在后;所述八字節(jié)時(shí)間戳精確到毫秒,使用NTP (NetworkTime Protocol,參考RFC958)時(shí)間,盡管到2036年NTP循環(huán)回零,但是控制器使用的是本地時(shí)間,只要操作的數(shù)據(jù)流時(shí)間間隔在68年之內(nèi),就不用考慮NTP循環(huán)回零問題,因?yàn)椋瑢?duì)于單個(gè)原始編碼流文件,在實(shí)際工程環(huán)境中不存在連續(xù)錄制34年(68年的一半)的情況,所以已能滿足幾乎所有的工程場(chǎng)合;即便在2036年時(shí)間戳值回零,也可以通過前后時(shí)間戳差值絕對(duì)值超過34年來(lái)判斷時(shí)間戳已回零了并做出相應(yīng)處理:設(shè)起始時(shí)間戳tl (單位:毫秒),結(jié)束時(shí)間戳t2(單位:毫秒),正整數(shù)的時(shí)間差值A(chǔ)t (單位:毫秒),68年對(duì)于毫秒值T (單位:毫秒);
【權(quán)利要求】
1.一種基于幀定位技術(shù)的流媒體播放方法,其特征在于:包括以下步驟: 步驟1:編碼器將原始編碼視頻數(shù)據(jù)流和原始編碼音頻數(shù)據(jù)流進(jìn)行自定義格式封裝后,分別生成自定義視頻數(shù)據(jù)幀和自定義音頻數(shù)據(jù)幀,并將該自定義視頻數(shù)據(jù)幀和自定義音頻數(shù)據(jù)幀存入磁盤介質(zhì); 步驟2:讀入器從磁盤介質(zhì)讀取所述自定義視頻數(shù)據(jù)幀和自定義音頻數(shù)據(jù)幀; 步驟3:判斷讀入器緩存一定數(shù)據(jù)量是否就緒,若是則執(zhí)行步驟3,否則返回執(zhí)行步驟I ; 步驟4:解碼器從讀入器輸出端獲取到自定義視頻數(shù)據(jù)幀和自定義音頻數(shù)據(jù)幀,解碼器將所述自定義音頻數(shù)據(jù)幀去除幀頭或幀尾得到音頻數(shù)據(jù)幀,再將音頻數(shù)據(jù)幀進(jìn)行音頻解碼,得到音頻解碼數(shù)據(jù)幀,同時(shí)解碼器從自定義音頻數(shù)據(jù)幀的幀尾獲取時(shí)間戳、音頻解碼數(shù)據(jù)幀的幀長(zhǎng)、音頻解碼數(shù)據(jù)幀幀號(hào)等信息;解碼器將所述自定義視頻數(shù)據(jù)幀去除幀頭,再將視頻幀進(jìn)行視頻解碼,得到視頻解碼數(shù)據(jù)幀,同時(shí)解碼器從自定義視頻數(shù)據(jù)幀的幀尾獲取時(shí)間戳、視頻解碼數(shù)據(jù)幀的幀長(zhǎng),視頻解碼數(shù)據(jù)幀的視頻分辨率等信息; 步驟5:解碼器將音頻解碼數(shù)據(jù)幀和視頻解碼數(shù)據(jù)幀的幀號(hào)、以及音頻解碼數(shù)據(jù)幀發(fā)送給緩存器,同時(shí),解碼器將音頻解碼數(shù)據(jù)幀和視頻解碼數(shù)據(jù)幀的幀號(hào)、時(shí)間戳、音頻解碼數(shù)據(jù)幀的幀長(zhǎng)、視頻分辨率發(fā)送給控制器;通過實(shí)時(shí)采集幀號(hào)和時(shí)間戳,控制器可以維護(hù)音頻解碼數(shù)據(jù)幀和視頻解碼數(shù)據(jù)幀的兩張“幀號(hào)-時(shí)間戳”表,“幀號(hào)-時(shí)間戳”表包括兩個(gè)字段,幀號(hào)和時(shí)間戳;視頻解碼數(shù)據(jù)幀每間隔10幀把幀號(hào)及時(shí)間戳取出來(lái)組成一條記錄寫入表格,音頻解碼數(shù)據(jù)幀每隔2幀把幀號(hào)及時(shí)間戳取出來(lái)組成一條記錄寫入表格; 步驟6:緩存器根據(jù)音頻解碼數(shù)據(jù)幀號(hào)依序分別將音頻解碼數(shù)據(jù)幀緩存進(jìn)緩存器中,同時(shí),緩存器根據(jù)視頻解碼數(shù)據(jù)幀的幀號(hào)`依序分別將視頻解碼數(shù)據(jù)幀緩存進(jìn)緩存器中,控制器根據(jù)“幀號(hào)-時(shí)間戳”表的映射關(guān)系,更新播放最后一幀的時(shí)間,該控制器還將音頻解碼數(shù)據(jù)幀和視頻解碼數(shù)據(jù)幀的最后緩存(寫入)的幀號(hào)發(fā)送給播放器; 步驟7:控制器更新播放開始時(shí)間TO ; 步驟8:播放器根據(jù)音頻解碼數(shù)據(jù)幀的幀號(hào)及時(shí)從緩存器獲取音頻解碼數(shù)據(jù)幀,并播放音頻解碼數(shù)據(jù)幀,同時(shí),播放器根據(jù)視頻解碼數(shù)據(jù)幀的幀號(hào)及時(shí)從緩存器獲取視頻解碼數(shù)據(jù)幀,并播放視頻解碼數(shù)據(jù)幀; 步驟9:控制器每間隔Λ T秒采用視頻同步音頻方法進(jìn)行音視頻同步,所述Λ T秒為15-30 秒(s); 步驟10:控制器判斷是否收到用戶輸入的時(shí)間點(diǎn);若是,則返回執(zhí)行步驟7,否則執(zhí)行步驟11 ; 步驟11:判斷用戶請(qǐng)求是否結(jié)束,或判斷該緩存器是否返回最后一幀數(shù)據(jù),若是則播放結(jié)束,否則返回步驟8。
2.根據(jù)權(quán)利要求1所述的一種基于幀定位技術(shù)的流媒體播放方法,其特征在于:所述步驟I中,自定義視頻數(shù)據(jù)幀定義為:將原始編碼視頻數(shù)據(jù)流增加13個(gè)字節(jié),幀頭增加5個(gè)字節(jié)和一個(gè)8字節(jié)時(shí)間戳,分別為:0x00 0x00 0x00 0x01 0x00,自定義音頻數(shù)據(jù)幀定義為:將原始音頻數(shù)據(jù)幀增加四字節(jié)的幀頭和八個(gè)字節(jié)幀尾,四字節(jié)幀頭為:0χ00、0χ01、0x3c和0x00,八字節(jié)幀尾為八字節(jié)時(shí)間戳。
3.根據(jù)權(quán)利要求1所述的一種基于幀定位技術(shù)的流媒體播放方法,其特征在于:所述步驟6具體為:緩存器把解碼后輸出的音頻解碼數(shù)據(jù)幀和視頻解碼數(shù)據(jù)幀,獨(dú)立存儲(chǔ)在連續(xù)的地址空間,由于解碼后的音頻解碼數(shù)據(jù)幀和視頻解碼數(shù)據(jù)幀均為等長(zhǎng),其中,第一幀的幀號(hào)為1,幀號(hào)從I開始加一遞增編號(hào),依序計(jì)算得到每幀在地址空間內(nèi)的偏移量:幀偏移=音(視)頻解碼數(shù)據(jù)幀幀長(zhǎng)X幀號(hào)。
4.根據(jù)權(quán)利要求1所述的一種基于幀定位技術(shù)的流媒體播放方法,其特征在于:所述步驟7具體為:控制器將解碼器輸出的第一幀音頻解碼數(shù)據(jù)幀作為起始時(shí)間,將最近一次輸出的音頻幀作為結(jié)束時(shí)間,取本地系統(tǒng)時(shí)間作為絕對(duì)時(shí)間,按每秒特定幀數(shù),將當(dāng)前音頻和視頻解碼數(shù)據(jù)幀的幀號(hào)發(fā)送至播放器;播放器根據(jù)幀號(hào)從緩存器快速獲取播放幀數(shù)據(jù)并及時(shí)播放音視頻。
5.根據(jù)權(quán)利要求1所述的一種基于幀定位技術(shù)的流媒體播放方法,其特征在于:所述步驟9具體為:播放器從起始時(shí)間開始連續(xù)播放音視頻,控制器定時(shí)檢查當(dāng)前音頻播放從開始時(shí)間到目前的偏移值,所述偏移值為當(dāng)前幀的時(shí)間戳與開始時(shí)間的差值,將該音頻時(shí)間值作為同步時(shí)間值。
6.根據(jù)權(quán)利要求1所述的一種基于幀定位技術(shù)的流媒體播放方法,其特征在于:所述步驟10具體為:用戶輸入時(shí)間點(diǎn)進(jìn)行 定位請(qǐng)求,控制器計(jì)算得到從起始時(shí)間到輸入時(shí)間點(diǎn)的偏移時(shí)間值,獲取播放音視頻幀的幀號(hào),然后按步驟7到步驟9進(jìn)行。
【文檔編號(hào)】H04N21/4405GK103780977SQ201410066287
【公開日】2014年5月7日 申請(qǐng)日期:2014年2月26日 優(yōu)先權(quán)日:2014年2月26日
【發(fā)明者】張麒, 時(shí)宜, 涂巖愷, 韋昌榮 申請(qǐng)人:廈門雅迅網(wǎng)絡(luò)股份有限公司