作者jerohands (这就是人生啊)
看板Programming
标题Re: [请益] 快速更新图片(影像监控)
时间Thu Apr 3 19:34:06 2008
※ 引述《archon (三脚猫的把戏)》之铭言:
: 呼~~~ 感谢板友们热心的帮忙跟指导,这支程式总算搞定了!
: 用的方法如下...
: 1. Server 端写一支应用程式X,
: 用 OpenCV 函式 cvSaveImage() 不断将 webcam 的画面存成图档,
你的目的是要将 IplImage 结构中的影像资料压缩传送到远端电脑,
这个作法我曾经也想过,但硬碟的 I/O 绝对会拖垮整个效能,
因为我个人要应用的平台,是以 DirectX 为基底,
因此作法上,我采用转换记忆体储存的方式,
将从WebCAM撷取的 IplImage 转换成 D3D9 的 LPDIRECT3DTEXTURE9
( code 我列於下)
http://rafb.net/p/piEhZY49.html
接着呼叫 D3DXSaveTextureToFileInMemory() (详细请查 DXSDK)
取得影像的"记忆体区块",
再来透过网路传送出去。
接收端收到再还原(D3DXCreateTextureFromFileInMemoryEx())
就可以显示画面了。
: 同时,也开一个 port 处理 client 的 http request
: 2. client 端用 javascript 死命的发 request (30 ms reload 一次)
: 图片的路径指向到应用程式X开的 port
: 3. X收到 request 後,就把图档加上 http header 回传
: 效果还挺不错的,在区域网路里有 30fps 以上,
: 不会出现 [x],也不会因为 reload 的关系造成画面读取不完全而闪烁。
: 乍看之下,跟 stream 应该是没什麽差别~~~
: 应该还可以再修改一下,现在是用 cvSaveImage() 先存成 jpg,
: 之後读档,再加上 http header 後通通写进一块记忆体里,再 send() 出去;
: 先存档後读档这个动作似乎是多余的,
: 待我把 OpenCV 函式里的资料型态弄清楚一点後,
: 应该会直接用记忆体资料搬运,对系统负担比较小...
: 另外,目前只能服务 single client,
: 在 server 端需要改写一下才能有 multi-client 的功能...
: ... 这都是後话了 :p
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 134.208.3.133
1F:→ jerohands:网路部份我是使用 JRTPLIB 这个C函式库 134.208.3.133 04/03 19:38
2F:推 archon:拜收... 我研究一下 <(_ _)> 140.112.42.81 04/03 20:06