HOWTO:实现从http读取并显示图像?

听海拉拉 2010-08-26 11:57:44
HOWTO:实现从http读取并显示图像?
Hi ALL,
比如有一个web site http://127.0.0.1:8080/?action=stream&ignored.mjpg。要从上面读取jpeg的图像,并显示出来。
而且不断的读取,成视频流。
用c++怎么实现呢?或者MFC也行。
谢谢
...全文
391 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
东岸西乡 2012-08-15
  • 打赏
  • 举报
回复
lz,不知道你解决这个问题没有?我也是在研究这个,想跟你探讨一下
听海拉拉 2010-09-28
  • 打赏
  • 举报
回复
怎么帮我结贴了,我还没有给分呢
听海拉拉 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 liyan 的回复:]

帮不上你太多,过三十之后,都不太深入看代码了。
不过,有相关的东西,我一定会发给你的,我有几个在上海的朋友,也在搞这个,不过这几年联系的不太多了不知道进展如何了。
多联系!
[/Quote]
我现在在用omap3530开发板来做一个类似IP camera的东东。比较茫然。底层到应用,都一起做,累累
听海拉拉 2010-09-07
  • 打赏
  • 举报
回复
好的,谢谢
liyan 2010-09-05
  • 打赏
  • 举报
回复
帮不上你太多,过三十之后,都不太深入看代码了。
不过,有相关的东西,我一定会发给你的,我有几个在上海的朋友,也在搞这个,不过这几年联系的不太多了不知道进展如何了。
多联系!
liyan 2010-09-04
  • 打赏
  • 举报
回复
对了,你可以玩一下,PP还是什么来着的服务端插件类库,开放的,UNIX下应该可以编译通过的。
这样,你再编写一个客户端,不是比这么玩有意思么,反正都是玩。
至于单帧显示这个路子,还不如你搞一个流媒体服务器。
比如,你可以看一下helix这样,客户端,你用IE,不用编客户端程序了,客用机用IE访问
哈哈。你可以编几个漂亮的INTNAT程序。
也是不错的玩法。
强烈建议!
反正以前我玩过,不过是在WIN环境下!
而且很快出手,因为没有太多时间。
现在有时间,倒没心思写东西了。
还是那句话,强烈建议用UNIX+HELIX很容易上手的,有网页编程基础的,不考虑安全问题一天出东西!
liyan 2010-09-04
  • 打赏
  • 举报
回复
嗯!!
这个么,感觉!
作实验可以,应用还有有距离!
很好玩,思路不实用,但很简朴!
或者用,真正专搞媒体编程的,没这么玩的。
还有,你没压缩!
JPG或是MJPG真的太大了,那个汗啊!
不过,局域局资源没问题,客户机资源没问题,那就整吧!
内存分配,别考虑了,这种编法,就是不在乎资源!
服务器,已经是UNIX了那没办法,实际,w2003+采集卡+直播系统才是王道!
这种东西很多,不过还是赞一下楼主的精神,DIY精神!
听海拉拉 2010-09-04
  • 打赏
  • 举报
回复
已经是jpeg的格式了,只是视频流处理,不知道怎么把内存非配好。jpeg流的单帧是否有明晰的数据结构呢
听海拉拉 2010-09-04
  • 打赏
  • 举报
回复
用在嵌入式开发板上
听海拉拉 2010-09-04
  • 打赏
  • 举报
回复
web端和客户端都要做。只是现在暂时拿mjpg streamer来研究一下。上面的代码就是客户端的一部分。很简单,就是连接视频服务器地址,之后读取图象
那个开源的mjpg streamer 的readme如下:
"MJPG-streamer", is a command line application that copied JPG-frame from a single input plugin to multiple output plugins. It can be used to stream JPEG files over an IP-based network from the webcam to a viewer like Firefox, Cambozola, Videolanclient or even to a Windows Mobile device running the TCPMP-Player.

It was written for embedded devices with very limited ressources in terms of RAM and CPU. Its origin, the "uvc_streamer" was written, because Linux-UVC compatible cameras directly produce JPEG-data, allowing fast and perfomant M-JPEG streams even from an embedded device running OpenWRT. The input module "input_uvc.so" captures such JPG frames from a connected webcam.

This tool can be modified and distributed according to the terms of the GPL v2.

Currently no issues are known, but since this software is quite young and not used widely it may cause problems. You must really know what you are doing, if you use this software. If you want to use the software you are obliged to check if the sourcecode does what you expect it to do and take the risk yourself to use it.

To view the stream use VLC or Firefox and open the URL:
http://127.0.0.1:8080/?action=stream

To view a single JPEG just call:
http://127.0.0.1:8080/?action=snapshot

To compile and start the tool:
# tar xzvf mjpg-streamer.tgz
# cd mjpg-streamer
# make clean all
# export LD_LIBRARY_PATH=.
# ./mjpg_streamer -o "output_http.so -w ./www"

More examples can be found in the start.sh bash script.

In case of error:
* the input plugin "input_uvc.so" depends on libjpeg, make sure it is installed.

Dependencies for the input plugin "input_uvc.so":
* libjpeg
* recent Linux-UVC driver (newer then revision #170)

Dependencies for the output plugin "output_autofocus.so":
* libmath


To play the HTTP M-JPEG stream with mplayer:
# mplayer -fps 30 -demuxer lavf "http://127.0.0.1:8080/?action=stream&ignored.mjpg"

It might be necessary to configure mplayer to prefer IPv4 instead of IPv6
# vi ~./mplayer/config
add or change the option: prefer-ipv4=yes
liyan 2010-09-03
  • 打赏
  • 举报
回复
楼上的好懒啊!
这里就有现成的源码。
http://abc19902009.download.csdn.net/这不是广告噢,csdn下载
至于楼主的,我建议参考一下这个吧!
即使要单帧,抓,也应该压缩后再传!
不然真的没什么意义了!
lijianli9 2010-09-02
  • 打赏
  • 举报
回复
期待现成的方案,
听海拉拉 2010-09-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liyan 的回复:]
这个太累了吧!
没有压缩,你确定,你一秒钟能下载二十五个图片,并显示出来?
我知道你大概要做个视频会议什么的。但思路欠考虑!

还是建议你用现成的方案。
对了,你是要解决同步采集,同步播放的问题吧!是不是啊!
有方案的!不用直接传单帧的,资源开销太大了!
[/Quote]
现成的方案是什么,能不能提示一下
听海拉拉 2010-09-02
  • 打赏
  • 举报
回复
美妙30帧,可以的,流量大概是1M到2M这样子,在局域网足够了
听海拉拉 2010-09-02
  • 打赏
  • 举报
回复
其实已经解码了,服务器端是linux的,我了个客户端,在MFC下的,但是不是会有异常,估计是内存的问题
是内存还是什么问题,能显示图像,但有一异常,请帮忙修改。
char url[1000] = "http://192.168.131.129:8080/?action=snapshot";


//cout<<"目标地址 URL:"<<url<<endl;

/*
unsigned char *buffer;
void *pImageMemory;
*/
buffer=new BYTE[100000];


HINTERNET internet= InternetOpen("HTTP Downloader",INTERNET_OPEN_TYPE_PRECONFIG,
NULL,NULL, NULL);

if( !internet )
return ;

HINTERNET file_handle = InternetOpenUrl(internet, url, NULL, 0, INTERNET_FLAG_RELOAD, 0);
if( !file_handle)
return ;

pImageMemory=GlobalLock(buffer);
BOOL b = InternetReadFile(file_handle,pImageMemory,100000,&bytes_read);
GlobalUnlock(pImageMemory); //解锁内存

if(!b)
return;

CDC* pDC = GetDlgItem(IDC_ShowImg) ->GetDC();
HDC hDC = pDC ->GetSafeHdc();
CRect rect;
GetDlgItem(IDC_ShowImg) ->GetClientRect( &rect );



IStream *pIStream;//创建一个IStream接口指针,用来保存图片流
IPicture *pIPicture;//创建一个IPicture接口指针,表示图片对象
CreateStreamOnHGlobal(pImageMemory, false, &pIStream); //用全局内存初使化IStream接口指针
OleLoadPicture(pIStream, 0, false, IID_IPicture, (LPVOID*)&(pIPicture));//用OleLoadPicture获得IPicture接

long hmWidth;
long hmHeight;

pIPicture->get_Width(&hmWidth); //用接口方法获得图片的宽和高
pIPicture->get_Height(&hmHeight);
pIPicture->Render(hDC,0,0,600,400,0,hmHeight,hmWidth,-hmHeight,NULL);



GlobalFree(pImageMemory); //释放全局内存
pIStream->Release(); //释放pIStream
pIPicture->Release(); //释放pIPicture

::DeleteDC(hDC);
pDC->DeleteDC();

InternetCloseHandle(internet);

CDialog::OnPaint();
liyan 2010-09-02
  • 打赏
  • 举报
回复
这个太累了吧!
没有压缩,你确定,你一秒钟能下载二十五个图片,并显示出来?
我知道你大概要做个视频会议什么的。但思路欠考虑!

还是建议你用现成的方案。
对了,你是要解决同步采集,同步播放的问题吧!是不是啊!
有方案的!不用直接传单帧的,资源开销太大了!
晓灬佩恩 2010-08-26
  • 打赏
  • 举报
回复
跟从本地读取差不多。边下载边播放。在接收端定义个缓冲区缓冲数据
fengrx 2010-08-26
  • 打赏
  • 举报
回复
拆分开:
1.下载。
2.显示。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧