監(jiān)控視頻無(wú)需轉(zhuǎn)碼直接播放的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于監(jiān)控視頻領(lǐng)域,具體涉及一種監(jiān)控視頻無(wú)需轉(zhuǎn)碼直接播放的方法。
【背景技術(shù)】
[0002]目前市面上存在多種視頻播放器軟件,但并不能支持所有監(jiān)控廠家的視頻格式,并且即使部分支持,也需要將原視頻先轉(zhuǎn)碼成標(biāo)準(zhǔn)的視頻格式,才能進(jìn)行正常的視頻播放,具體情況如下:
[0003]1.監(jiān)控視頻廠家很多,每個(gè)廠家定義的視頻文件格式不同;
[0004]2.對(duì)視頻進(jìn)行轉(zhuǎn)碼會(huì)花費(fèi)很多時(shí)間;
[0005]3.轉(zhuǎn)碼后的視頻文件大小與原文件大小可能差異很大,一般會(huì)比原文件大很多;
[0006]4.即使部分不轉(zhuǎn)碼的情況支持播放,但也會(huì)因視頻文件格式的差異,導(dǎo)致播放體驗(yàn)不好,比如不能逐幀播放、不能很好的支持定位播放等。
【發(fā)明內(nèi)容】
[0007]本發(fā)明針對(duì)現(xiàn)有技術(shù)的不足,提供了一種監(jiān)控視頻無(wú)需轉(zhuǎn)碼直接播放的方法,能夠有效解決現(xiàn)有技術(shù)需要轉(zhuǎn)碼才能支持多種視頻格式播放的問(wèn)題。
[0008]為解決以上問(wèn)題,本發(fā)明采用的技術(shù)方案如下:一種監(jiān)控視頻無(wú)需轉(zhuǎn)碼直接播放的方法,包括如下步驟:
[0009]S1-加載監(jiān)控視頻廠家提供的二次開(kāi)發(fā)庫(kù)文件SDK,并導(dǎo)出SDK中與控制播放狀態(tài)相關(guān)的接口;
[0010]S2-解碼庫(kù)接收SDK接口返回的每一幀視頻數(shù)據(jù),并將接收到的視頻數(shù)據(jù)轉(zhuǎn)換成RGB格式,再將轉(zhuǎn)換后的數(shù)據(jù)輸出給播放模塊;
[0011]S3-應(yīng)用層接收并顯示解碼后的每一幀視頻數(shù)據(jù),并控制視頻的播放狀態(tài);
[0012]S4-若還有未被轉(zhuǎn)換后顯示的視頻數(shù)據(jù),則重復(fù)S2,否則直接結(jié)束。
[0013]作為優(yōu)選,SI包括如下方法:
[0014]Sll-使用windows提供的編程接口 LoadLibary加載SDK,并導(dǎo)出SDK中與控制播放狀態(tài)相關(guān)的接口;
[0015]S12-調(diào)用SDK的接口注冊(cè)解碼回調(diào)函數(shù),將視頻解碼庫(kù)的函數(shù)注冊(cè)為解碼回調(diào)函數(shù)。
[0016]作為優(yōu)選,S2包括如下方法:
[0017]S21-調(diào)用S12中所述的解碼回調(diào)函數(shù),傳回當(dāng)前幀的視頻數(shù)據(jù),由解碼庫(kù)接收每一幀視頻數(shù)據(jù),視頻數(shù)據(jù)的結(jié)構(gòu)為YUV ;
[0018]S22-調(diào)用SDK接口獲取當(dāng)前幀的信息:幀率、時(shí)間、圖像高度和寬度;
[0019]S23-將S21所述的YUV分離成Y、U、V三個(gè)獨(dú)立分量并按照編號(hào)順序從小到大依次排列;
[0020]S24-將視頻數(shù)據(jù)從YUV顏色系轉(zhuǎn)換為RGB顏色系,并輸出給播放模塊。
[0021]作為優(yōu)選,S3包括如下方法:
[0022]S31-應(yīng)用層接收解碼庫(kù)輸出的視頻數(shù)據(jù)RGB后,將此圖像數(shù)據(jù)顯示到指定的面板;
[0023]S32-應(yīng)用層通過(guò)調(diào)用解碼庫(kù)中與控制播放狀態(tài)相關(guān)的接口來(lái)控制視頻的播放狀
??τ O
[0024]作為優(yōu)選,SI所述的與控制播放狀態(tài)相關(guān)的接口有播放接口、停止接口、定位接口、前一幀接口和后一幀接口。
[0025]本發(fā)明的有益效果如下:
[0026]1.不論視頻是什么廠家、什么格式都不進(jìn)行轉(zhuǎn)碼操作;
[0027]2.定義統(tǒng)一的視頻播放接口,將所有不同格式的視頻用統(tǒng)一接口輸出;
[0028]3.針對(duì)每一個(gè)格式開(kāi)發(fā)一個(gè)底層解碼模塊,此解碼模塊只實(shí)現(xiàn)基本的視頻解碼功能,從而實(shí)現(xiàn)應(yīng)用層對(duì)不同格式的兼容;
[0029]4.使用統(tǒng)一的播放流程控制模塊,實(shí)現(xiàn)對(duì)所有格式的控制,而不用每一個(gè)具體的格式去單獨(dú)的實(shí)現(xiàn)一套流程控制;
[0030]通過(guò)使用本方法可以快速的播放視頻,而且可以兼容眾多的監(jiān)控視頻文件,使得視頻播放功能更完善更穩(wěn)定。
【附圖說(shuō)明】
[0031]圖1為監(jiān)控視頻無(wú)需轉(zhuǎn)碼直接播放的主流程圖;
[0032]圖2為監(jiān)控視頻無(wú)需轉(zhuǎn)碼直接播放詳細(xì)流程圖。
【具體實(shí)施方式】
[0033]為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對(duì)本發(fā)明做進(jìn)一步詳細(xì)說(shuō)明。
[0034]實(shí)施例:
[0035]針對(duì)上述提出的問(wèn)題,本發(fā)明提出了一種監(jiān)控視頻無(wú)需轉(zhuǎn)碼直接播放的方法,如圖1所示,包括以下步驟:
[0036]S1-加載監(jiān)控視頻廠家提供的二次開(kāi)發(fā)庫(kù)文件SDK,并導(dǎo)出SDK中與控制播放狀態(tài)相關(guān)的接口;
[0037]如大華監(jiān)控視頻的SDK的播放接口:PLAY_Play ;停止接口:PLAY_Stop ;定位接口PLAY_seek,還包括前一幀、后一幀等接口。
[0038]S2-解碼庫(kù)接收SDK接口返回的每一幀視頻數(shù)據(jù),并將接收到的視頻數(shù)據(jù)轉(zhuǎn)換成RGB格式,再將轉(zhuǎn)換后的數(shù)據(jù)輸出給播放模塊;
[0039]如大華監(jiān)控視頻的SDK 的接口:PLAY_SetDecodeCalIBack ;
[0040]S3-應(yīng)用層接收并顯示解碼后的每一幀視頻數(shù)據(jù),并控制視頻的播放狀態(tài);
[0041]S4-若還有未被轉(zhuǎn)換后顯示的視頻數(shù)據(jù),則重復(fù)S2,否則直接結(jié)束。
[0042]SI包括如下方法:
[0043]Sll-使用windows提供的編程接口 LoadLibary加載SDK,并導(dǎo)出SDK中與控制播放狀態(tài)相關(guān)的接口 ;因絕大多數(shù)的SDK都是以DLL的形式提供,所以需要使用windows提供的編程接口 LoadLibary加載SDK ;
[0044]S12-調(diào)用SDK的接口“注冊(cè)解碼回調(diào)函數(shù)”,將視頻解碼庫(kù)的函數(shù)注冊(cè)為解碼回調(diào)函數(shù);由于與控制播放狀態(tài)的相關(guān)接口有多個(gè),因此需要解碼回調(diào)功能,通過(guò)將視頻解碼庫(kù)的函數(shù)注冊(cè)為解碼回調(diào)函數(shù)即可實(shí)現(xiàn)此功能。
[0045]S2包括如下方法:
[0046]S21-調(diào)用S12中所述的解碼回調(diào)函數(shù),傳回當(dāng)前幀的視頻數(shù)據(jù),由解碼庫(kù)接收每一幀視頻數(shù)據(jù),視頻數(shù)據(jù)的結(jié)構(gòu)為YUV ;
[0047]YUV:主要用于優(yōu)化彩色視頻信號(hào)的傳輸,使其兼容老式黑白電視,與RGB視頻信號(hào)傳輸相比,它最大的優(yōu)點(diǎn)在于只需占用極少的頻寬,而RGB要求三個(gè)獨(dú)立的視頻信號(hào)同時(shí)傳輸;
[0048]YUV的三個(gè)分量一般為交叉無(wú)序排列,比如(Y0、U0、Y1、V0)、(Y2、U1、Y3、V1)、(Y4、U2、Y5、V2);
[0049]S22-調(diào)用SDK接口獲取當(dāng)前幀的信息:幀率PLAY_GetCurrentFrameRate、時(shí)間PLAY_GetPlayedTime、圖像高度和寬度 PLAY_GetPictureSize ;
[0050]S23-將S21所述的YUV分離成Y、U、V三個(gè)獨(dú)立分量并按照編號(hào)順序從小到大依次排列;
[0051]將所有的Y數(shù)據(jù)(Y0、Yl、Y2)、U數(shù)據(jù)(U0、Ul、U2)、V數(shù)據(jù)(V0, V1、V2)分別抽取出來(lái)后按照編號(hào)順序從小到大依次排列;
[0052]S24-將視頻數(shù)據(jù)從YUV顏色系轉(zhuǎn)換為RGB顏色系,并輸出給播放模塊。
[0053]因Windows開(kāi)發(fā)環(huán)境下使用的圖像是以RGB色為基準(zhǔn),所以需要將視頻幀數(shù)據(jù)從YUV顏色系轉(zhuǎn)換為RGB顏色系,以支持在windows開(kāi)發(fā)環(huán)境下進(jìn)行顯示。兩個(gè)顏色系的轉(zhuǎn)換是使用現(xiàn)有技術(shù)完成,即將YUV分量分別乘不同的系數(shù)值,從而得到RGB各自的顏色值,如下所示:
[0054]RGB rgb = new RGB O ;
[0055]rgb.r = (int) ((Y&Oxff) +1.4075* ((V&Oxff)-128));
[0056]rgb.g = (int) ((Y&Oxff) -0.3455* ((U&Oxff)-128)-
[0057]0.7169* ((V&Oxff)-128));
[0058]rgb.b = (int) ((Y&Oxff) +1.779* ((U&Oxff)-128));
[0059]rgb.r = (rgb.r<0 ? 0:rgb.r>255 ? 255: rgb.r);
[0060]rgb.g = (rgb.g〈0 ? 0:rgb.g>255 ? 255: rgb.g);
[0061]rgb.b = (rgb.b<0 ? 0:rgb.b>255 ? 255: rgb.b);
[0062]return rgb ;
[0063]S3包括如下方法:
[0064]S31-應(yīng)用層接收解碼庫(kù)輸出的視頻數(shù)據(jù)RGB后,將此圖像數(shù)據(jù)顯示到指定的面板;
[0065]S32-應(yīng)用層通過(guò)調(diào)用解碼庫(kù)中與控制播放狀態(tài)相關(guān)的接口(播放、定位、停止等)來(lái)控制視頻的播放狀態(tài)。
[0066]本領(lǐng)域的普通技術(shù)人員將會(huì)意識(shí)到,這里所述的實(shí)施例是為了幫助讀者理解本發(fā)明的實(shí)施方法,應(yīng)被理解為本發(fā)明的保護(hù)范圍并不局限于這樣的特別陳述和實(shí)施例。本領(lǐng)域的普通技術(shù)人員可以根據(jù)本發(fā)明公開(kāi)的這些技術(shù)啟示做出各種不脫離本發(fā)明實(shí)質(zhì)的其它各種具體變形和組合,這些變形和組合仍然在本發(fā)明的保護(hù)范圍內(nèi)。
【主權(quán)項(xiàng)】
1.一種監(jiān)控視頻無(wú)需轉(zhuǎn)碼直接播放的方法,其特征在于,包括如下步驟: 51-加載監(jiān)控視頻廠家提供的二次開(kāi)發(fā)庫(kù)文件SDK,并導(dǎo)出SDK中與控制播放狀態(tài)相關(guān)的接口 ; 52-解碼庫(kù)接收SDK接口返回的每一幀視頻數(shù)據(jù),并將接收到的視頻數(shù)據(jù)轉(zhuǎn)換成RGB格式,再將轉(zhuǎn)換后的數(shù)據(jù)輸出給播放模塊; 53-應(yīng)用層接收并顯示解碼后的每一幀視頻數(shù)據(jù),并控制視頻的播放狀態(tài); 54-若還有未被轉(zhuǎn)換后顯示的視頻數(shù)據(jù),則重復(fù)S2,否則直接結(jié)束。2.根據(jù)權(quán)利要求1所述的監(jiān)控視頻無(wú)需轉(zhuǎn)碼直接播放的方法,其特征在于,SI包括如下方法: 511-使用windows提供的編程接口LoadLibary加載SDK,并導(dǎo)出SDK中與控制播放狀態(tài)相關(guān)的接口; 512-調(diào)用SDK的接口注冊(cè)解碼回調(diào)函數(shù),將視頻解碼庫(kù)的函數(shù)注冊(cè)為解碼回調(diào)函數(shù)。3.根據(jù)權(quán)利要求2所述的監(jiān)控視頻無(wú)需轉(zhuǎn)碼直接播放的方法,其特征在于,S2包括如下方法: 521-調(diào)用S12中所述的解碼回調(diào)函數(shù),傳回當(dāng)前幀的視頻數(shù)據(jù),由解碼庫(kù)接收每一幀視頻數(shù)據(jù),視頻數(shù)據(jù)的結(jié)構(gòu)為YUV ; 522-調(diào)用SDK接口獲取當(dāng)前幀的信息:幀率、時(shí)間、圖像高度和寬度; 523-將S21所述的YUV分離成Y、U、V三個(gè)獨(dú)立分量并按照編號(hào)順序從小到大依次排列; 524-將視頻數(shù)據(jù)從YUV顏色系轉(zhuǎn)換為RGB顏色系,并輸出給播放模塊。4.根據(jù)權(quán)利要求2或3所述的監(jiān)控視頻無(wú)需轉(zhuǎn)碼直接播放的方法,其特征在于,S3包括如下方法: 531-應(yīng)用層接收解碼庫(kù)輸出的視頻數(shù)據(jù)RGB后,將此圖像數(shù)據(jù)顯示到指定的面板; 532-應(yīng)用層通過(guò)調(diào)用解碼庫(kù)中與控制播放狀態(tài)相關(guān)的接口來(lái)控制視頻的播放狀態(tài)。5.根據(jù)權(quán)利要求1所述的監(jiān)控視頻無(wú)需轉(zhuǎn)碼直接播放的方法,其特征在于,SI所述的與控制播放狀態(tài)相關(guān)的接口有播放接口、停止接口、定位接口、前一幀接口和后一幀接口。
【專利摘要】本發(fā)明公開(kāi)了一種監(jiān)控視頻無(wú)需轉(zhuǎn)碼直接播放的方法,屬于監(jiān)控視頻領(lǐng)域,包括以下步驟:S1-加載監(jiān)控視頻廠家提供的二次開(kāi)發(fā)庫(kù)文件SDK,并導(dǎo)出SDK中與控制播放狀態(tài)相關(guān)的接口;S2-解碼庫(kù)接收SDK接口返回的每一幀視頻數(shù)據(jù),并將接收到的視頻數(shù)據(jù)轉(zhuǎn)換成RGB格式,再將轉(zhuǎn)換后的數(shù)據(jù)輸出給播放模塊;S3-應(yīng)用層接收并顯示解碼后的每一幀視頻數(shù)據(jù),并控制視頻的播放狀態(tài);S4-若還有未被轉(zhuǎn)換后顯示的視頻數(shù)據(jù),則重復(fù)S2,否則直接結(jié)束。本發(fā)明的有益效果如下:通過(guò)使用本方法可以快速的播放視頻,而且可以兼容眾多的監(jiān)控視頻文件,使得視頻播放功能更完善更穩(wěn)定。
【IPC分類】H04N7/18, H04N21/472
【公開(kāi)號(hào)】CN104967912
【申請(qǐng)?zhí)枴緾N201510379645
【發(fā)明人】梁效寧, 蒲軍, 李波剛
【申請(qǐng)人】四川效率源信息安全技術(shù)有限責(zé)任公司
【公開(kāi)日】2015年10月7日
【申請(qǐng)日】2015年7月1日