1)演示程序\Mfc分類Demo中有04.遠(yuǎn)程抓圖19.槍球聯(lián)動(dòng)等功能說(shuō)明
專業(yè)成都網(wǎng)站建設(shè)公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來(lái)客戶和效益!創(chuàng)新互聯(lián)公司為您提供成都網(wǎng)站建設(shè),五站合一網(wǎng)站設(shè)計(jì)制作,服務(wù)好的網(wǎng)站設(shè)計(jì)公司,網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)負(fù)責(zé)任的成都網(wǎng)站制作公司!
關(guān)于視音頻的數(shù)據(jù)格式有兩種
// 編碼格式, 包括音頻和視頻
struct AV_CFG_EncodeFormat
{
?AV_int32???nStructSize;
?AV_BOOL????bAudioEnable;?????// 音頻使能
?AV_int32???nAudioBitRate;?????// 音頻比特率
?CFG_AUDIO_FORMAT?emAudioCompression;????// 音頻壓縮模式
?AV_int32???nAudioDepth;?????// 音頻采樣深度
?AV_int32???nAudioFrequency;????// 音頻采樣頻率
?AV_int32???nAudioMode;??????// 音頻編碼模式
?AV_int32???nAudioPack;??????// 音頻打包模式, 0-DHAV, 1-PS
?AV_BOOL????bVideoEnable;?????// 視頻使能
?AV_int32???nVideoBitRate;?????// 視頻比特率
?CFG_BITRATE_CONTROL?emVideoBitRateControl;???// 碼流控制模式
?CFG_VIDEO_COMPRESSION emVideoCompression;???// 視頻壓縮模式
?AV_int32???nVideoFPS;??????// 視頻幀率
?AV_int32???nVideoGOP;??????// 視頻I幀間隔
?AV_int32???nVideoWidth;?????// 視頻寬度
?AV_int32???nVideoHeight;?????// 視頻高度
?CFG_IMAGE_QUALITY?emVideoQuality;?????// 視頻圖像質(zhì)量
?AV_int32???nVideoPack;??????// 視頻打包模式, 0-DHAV, 1-PS?
};
嘗試使用如下代碼設(shè)置視音頻數(shù)據(jù)的格式為PS,而不是大華的私有流協(xié)議,暫時(shí)無(wú)效
?NET_ENCODE_VIDEO_PACK_INFO struEnCodeInfo = { 0 };
?struEnCodeInfo.dwSize = sizeof(struEnCodeInfo);
//指定主碼流
?struEnCodeInfo.emFormatType = EM_FORMAT_MAIN_NORMAL;
//先查看當(dāng)前的視頻流格式
?bool bRet = CLIENT_GetConfig(id, NET_EM_CFG_ENCODE_VIDEO_PACK, 1, (void*)&struEnCodeInfo, sizeof(struEnCodeInfo));
?DWORD err = 0;
?if (!bRet)
?{
??err = CLIENT_GetLastError()&(0x7fffffff);
?}
//設(shè)置PS流格式
?struEnCodeInfo.emPackType = EM_PACK_PS;
?bRet = CLIENT_SetConfig(id, NET_EM_CFG_ENCODE_VIDEO_PACK, 1, (void*)&struEnCodeInfo, sizeof(struEnCodeInfo));
?bRet = CLIENT_GetConfig(id, NET_EM_CFG_ENCODE_VIDEO_PACK, 1, (void*)&struEnCodeInfo, sizeof(struEnCodeInfo));
注意:06.編碼配置例子中對(duì)視音頻的編碼可以設(shè)置,目前通過(guò)OnVideoDlgToStu設(shè)置PS,抓包沒有找到對(duì)應(yīng)的PS頭字段,需要保存文件分析
2)工程編譯問(wèn)題
問(wèn)題1)
1>BSWndContainer.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _xMonitorFromWindow@8,該符號(hào)在函數(shù) "int __cdecl GetCurrentScreenMonitorRect(struct HWND__ *,struct tagRECT &)" (?GetCurrentScreenMonitorRect@@YAHPAUHWND__@@AAUtagRECT@@@Z) 中被引用
1>BSWndContainer.obj : error LNK2019: 無(wú)法解析的外部符號(hào) _xGetMonitorInfo@8,該符號(hào)在函數(shù) "int __cdecl GetCurrentScreenMonitorRect(struct HWND__ *,struct tagRECT &)" (?GetCurrentScreenMonitorRect@@YAHPAUHWND__@@AAUtagRECT@@@Z) 中被引用
源代碼
#include "BSWndContainer.h"
#pragma?? warning(disable:4706)??
//#define?? COMPILE_MULTIMON_STUBS??
#include??
#pragma?? warning(default:4706)?
修改后
#include "BSWndContainer.h"
#pragma?? warning(disable:4706)??
#define?? COMPILE_MULTIMON_STUBS ? //取消注釋
#include??
#pragma?? warning(default:4706) ?
問(wèn)題2)
error C3861: “_Min”: 找不到標(biāo)識(shí)符
源代碼:
int nMinChannel = _Min(m_ChannelNum, _Min(nNum, MAX_RECORD_CHANNEL));
修改后:
int nMinChannel = min(m_ChannelNum, min(nNum, MAX_RECORD_CHANNEL));
大華私有流對(duì)接優(yōu)勢(shì)
1)大華設(shè)備進(jìn)行rtsp交互耗時(shí)1500毫秒
2)SDK私有協(xié)議對(duì)接耗時(shí)600毫秒
3)如下是大華私有視頻流的說(shuō)明
1.2 DHFS視頻監(jiān)控幀格式解析
幀是視頻監(jiān)控?cái)?shù)據(jù)組成的基本單位,視頻監(jiān)控?cái)?shù)據(jù)是由許多幀按照一定的順序組合而成,幀存在多種類型,而且?guī)拇笮〔还潭?,每個(gè)幀的起始位置不一定只出現(xiàn)在扇區(qū)或塊的起始地址,它可以出現(xiàn)在任何合理的物理地址范圍內(nèi)。大華視頻監(jiān)控文件中視頻幀是由其自定義的網(wǎng)絡(luò)通訊協(xié)議封裝RTP載荷的H.264碼流組成,大華視頻幀與一般的H.264編碼的視頻幀是不同的,它對(duì)原始H.264視頻數(shù)據(jù)進(jìn)行了多次封裝。
由于大華視頻每幀中都含有特定的網(wǎng)絡(luò)通訊協(xié)議頭部信息和尾部信息,通過(guò)分析幀中網(wǎng)絡(luò)通訊協(xié)議頭或尾部的數(shù)據(jù)特點(diǎn)可以實(shí)現(xiàn)對(duì)視頻幀進(jìn)行搜索和定位,經(jīng)過(guò)大量實(shí)驗(yàn)發(fā)現(xiàn)其幀起始特定標(biāo)志為大寫字母DHAV,十六進(jìn)制表示為0x44484156,幀結(jié)束標(biāo)志為小寫字母dhav,十六進(jìn)制表示為0x64686176(見圖1)。大華幀頭部結(jié)構(gòu)中記錄了基本的視頻屬性信息,例如幀的編號(hào)、幀所屬通道號(hào)、幀長(zhǎng)度以及幀的創(chuàng)建時(shí)間等等。這些屬性是視頻監(jiān)控?cái)?shù)據(jù)進(jìn)行通道分離與重組的關(guān)鍵信息,其中與視頻監(jiān)控恢復(fù)相關(guān)的屬性信息,如表1所示,頭部結(jié)構(gòu)中相對(duì)DHAV標(biāo)識(shí)偏移量為0x04描述的是幀類型;如圖1中偏移0x06位置描述通道號(hào),此幀的通道號(hào)是0x0005,具體含義表示為6通道,因?yàn)橥ǖ捞?hào)是0作為基數(shù)表示1通道;0x08描述的是此幀編號(hào),考慮到大小端表達(dá)形式,十六進(jìn)制表示為0x47D0;相對(duì)DHFS偏移0x0C是此幀的長(zhǎng)度,此幀長(zhǎng)度是0x00000F80,十進(jìn)制表示為3698字節(jié);相對(duì)DHAV偏移0x10是描述此幀的創(chuàng)建時(shí)間信息,十六進(jìn)制表示為0x39308EBB。如圖1中dhav后四個(gè)字節(jié)為幀長(zhǎng)度,十六進(jìn)制表達(dá)式為0x20F8,轉(zhuǎn)換成十進(jìn)制為8840字節(jié),用于校驗(yàn)。尾部結(jié)束標(biāo)志為小寫字母dhav,具體幀尾部結(jié)構(gòu)見表2。
圖1 DHFS文件系統(tǒng)的幀頭與幀尾
Fig.1 Frame head and tail in DHFS
2 DHFS視頻監(jiān)控存儲(chǔ)方式研究
2.1 DHFS視頻文件存儲(chǔ)方式分析
視頻監(jiān)控采用實(shí)時(shí)文件順序存儲(chǔ)方式,整體的基本布局結(jié)構(gòu)如圖2上所示,從文件系統(tǒng)數(shù)據(jù)區(qū)可以分析出大華視頻監(jiān)控文件系統(tǒng)的標(biāo)識(shí),視頻監(jiān)控存儲(chǔ)塊大小等信息,這些參數(shù)對(duì)于大華視頻監(jiān)控?cái)?shù)據(jù)的恢復(fù)有十分重要的作用,例如DHFS會(huì)實(shí)時(shí)分配給各個(gè)視頻通道2 MB存儲(chǔ)空間,該值由啟動(dòng)扇區(qū)中相應(yīng)參數(shù)定義,各通道的視頻片段以2 MB為分割,在磁盤中順序交替存儲(chǔ),但是有些情況下也存在連續(xù)存放單一通道2 MB視頻片段的情況,假設(shè)CHn表示所屬通道的2 MB視頻片段,在只有3個(gè)通道的視頻監(jiān)控系統(tǒng)中,DHFS文件系統(tǒng)中各通道視頻片段存儲(chǔ)排列情況如圖2下所示,視頻片段代表視頻存儲(chǔ)過(guò)程中一個(gè)2 MB的視頻數(shù)據(jù)塊,其中編號(hào)為1~6的視頻片段為正常錄制視頻監(jiān)控的情況,各個(gè)通道視頻片段交替存儲(chǔ)。編號(hào)6~10屬于連續(xù)錄制同一通道監(jiān)控視頻的情況。如果DHFS文件系統(tǒng)誤格式化或部分視頻覆蓋的情況下,視頻監(jiān)控系統(tǒng)的文件系統(tǒng)遭到破壞,視頻監(jiān)控的恢復(fù)需要通過(guò)通道分離與重組進(jìn)行還原,即分離出1、4、8編號(hào)的視頻片段,重組成通道一的視頻監(jiān)控文件,分離出2、5、9、10編號(hào)的視頻片段,重組成通道二的視頻監(jiān)控文件,分離出3、6、7編號(hào)的視頻片段,重組成通道三的視頻監(jiān)控文件。因此對(duì)于DHFS文件系統(tǒng)數(shù)據(jù)取證問(wèn)題,將轉(zhuǎn)化成如何確
表1 DHFS幀頭部結(jié)構(gòu)
Table 1 Frame head structure of DHFS
┌───────┬───────┬─────────────────────┐
│偏移量 │占用字節(jié) │含義 │
├───────┼───────┼─────────────────────┤
│0x00 │4 │幀起始標(biāo)識(shí)0x44484156 │
├───────┼───────┼─────────────────────┤
│0x04 │2 │幀類型 │
├───────┼───────┼─────────────────────┤
│0x06 │2 │幀通道 │
├───────┼───────┼─────────────────────┤
│0x08 │4 │幀編號(hào) │
├───────┼───────┼─────────────────────┤
│0x0C │4 │幀長(zhǎng)度 │
├───────┼───────┼─────────────────────┤
│0x10 │4 │幀創(chuàng)建時(shí)間 │
└───────┴───────┴─────────────────────┘
表2 DHFS幀尾部結(jié)構(gòu)
Table 2 Frame tail structure of DHFS
┌────────┬────────┬───────────────────┐
│偏移量 │占用字節(jié) │含義 │
├────────┼────────┼───────────────────┤
│0x00 │4 │幀結(jié)束標(biāo)識(shí)0x64686176 │
├────────┼────────┼───────────────────┤
│0x04 │4 │幀長(zhǎng)度 │
└────────┴────────┴───────────────────┘