?? readme.txt
字號:
視頻采集 孔康 terrist007@163.com
前一段時間寫的“實時語音通信”,朋友們給了我很大鼓勵,甚感欣慰!但是就那個程序,現(xiàn)在讓我困苦不堪。在這里懇請高手幫助解決這些問題:
1 回放問題,仍然沒有實現(xiàn)的雙緩沖播放。播放兩個聲音塊的效果就像火車經(jīng)過兩節(jié)鐵軌的接點,不連續(xù),有雜音。這簡直讓人無法忍受!為了弱化這個問題,不得不增大INP_BUFFER_SIZE值,以減少“接點”個數(shù)。于是第二個問題就來了。
2 延時問題,那個程序的延時達到秒級,當時考慮了網(wǎng)絡壅塞以及節(jié)省內(nèi)存的情況多次使用了內(nèi)存申請、釋放、內(nèi)存拷貝函數(shù)再加那個巨大的緩沖區(qū),難怪有這么大的延時。在網(wǎng)絡品質(zhì)很好的局域網(wǎng)里,這更讓人不可接受!
許多朋友希望我能介紹一下視頻的編程,時下視頻聊天幾乎成了網(wǎng)吧老板們制勝的法寶,自己的軟件嵌入視頻通信方式又顯得那么酷,而一個攝像頭只需要百來塊錢。本軟件功能上可以實現(xiàn)視頻采集、預覽,選擇壓縮器(視頻文件可是大得驚人!)進行壓縮、解壓,回放。抓取單幀圖片保存等。
簡單介紹一下程序吧,在OnInitDialog()里面:
InitCaptureFormat()初始化BITMAP m_InInfo,設置視頻采集數(shù)據(jù)的格式。
接著,觸發(fā)OnDisplay().裝載動態(tài)鏈接庫VideoDll.dll,如果成功則初始化COMPVARS m_CV這個變量,設置壓縮器,可以手動設置也可以調(diào)用系統(tǒng)對話框。
在VideoDll.dll中根據(jù)壓縮器初始化解壓器COMPVARS m_2CV,InitVideoCard()調(diào)用了系列cap...()函數(shù),詳情請參考MSDN或與我聯(lián)系(terrist007@163.com或candy0624@163.com)索取更進一步代碼。
void CVideoPlayBackDlg::InitVideoCard()
{
if(!capDriverConnect(m_hWndCapture,0))//連接設備驅(qū)動程序
AfxMessageBox("Driver Connect Failure");
//set the video format
if(!capSetVideoFormat(m_hWndCapture,&m_InInfo,sizeof(BITMAPINFO)))
AfxMessageBox("Fail to set the video format");//如果驅(qū)動不支持此格式將返回0
capPreviewRate(m_hWndCapture,24);//預覽楨速
capPreview(this->m_hWndCapture,TRUE);//可以預覽
if(!capSetCallbackOnFrame(this->m_hWndCapture,FrameCallBack))//設置單楨的回調(diào)函數(shù)
AfxMessageBox("fail to setCallbackOnFrame function");
}
值得一提的是那個回調(diào)函數(shù)FrameCallBack(),它對采集到的數(shù)據(jù)(單幅圖片)進行處理。為了方便理解,我把壓縮ICSeqCompressFrame()、解壓ICDecompress()、窗口刷新InvalidateRect()三個函數(shù)全寫在這里而省略了網(wǎng)絡發(fā)送部分,實際運用當中通過Socket把Buf里面的數(shù)據(jù)發(fā)送出去即可,讀者可以輕松完成,您當然也可以參考我在“實時語音通信”中介紹的網(wǎng)絡傳送機制。當然如果您很厲害,還可以運用各種算法對數(shù)據(jù)進行運算,實現(xiàn)一些號稱“智能”的效果。運行結(jié)束后別忘了釋放資源,就OK了
結(jié)束語:如果想實現(xiàn)實時的語音、視頻通信,而且語音視頻要同步;如果想保存成avi動畫,還得啃那些cap打頭的函數(shù)們。
Copyright(C) 2004 Kongkang All Rights Reserved.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -