我们这个项目是这样的 。http发一个长连接,服务器接到命令后不断向浏览器端推送图片数据流,然后再用ajax不断替换图片以达到像视频一样播放的效果(不想用ActiveX控件)。服务器端向浏览器端发送的数据是用C做的。现在我纠结的是我怎么获取这些数据流,并把这些数据流生成一个图片文件!!用抓包工具抓到是数据流大概如下:
HTTP Code: 200 ok 
Content-Type: multipart/x-mixed-replace; boundary=1329898486 
--1329898486 
Content-Type: image/jpeg 
Content-Length: 12233
……
……

解决方案 »

  1.   

    xmlhttprequest对象有的redyState有一个状态是3,表明已经开始接收数据了,只要是http一直keep-alive的,就会不断的接收数据,可以获取responseText来查看数据,以前我用这方式加载过base64编码的图片,效率还是可以的。
      

  2.   

    responseText显示的是打印在HTML页面上的数据,可是我接收的二进制数据流并没有打印到页面上。就和我用xmlHttp.getAllResponseHeaders()获得HTTP的头部信息一样也没打印在页面上,可是用getAllResponseHeaders只能得到头部信息,怎么样得到其他的完整信息呢?
      

  3.   

    你可以看看HTTP协议,分析boundary,找到后面的1329898486 位置 获得数据,
      

  4.   

    不知道你们具体的需求是什么样的,为什么要来回返回图片,是为了生成动态图表
    还是其他的,如果是那样的话,这个设计就太蠢了。就算是你必须要返回图片这个设计也依然很蠢。长连接都用上了,居然返回这么复杂
    一个报文,多个图片的数据被压缩在一个请求中返回了,需要前端自己分析二进制代码
    然后截取出一张张的图片。先不说JS对二进制操作是是否擅长,就是能操作,浏览器
    能承受这样的计算量吗?快点的浏览器还好说,IE6呢?就算这些也解决了客户端怎么
    根据这些二进制显示出图片来,现代浏览器支持html5好说一点,把这些数据转化为
    base64编码以data协议显示出来,IE6 IE7这些不支持Data协议的浏览器呢?如果必须要实现,感觉有两个路子可以走:
    1. 使用Flash处理这些数据。Flash处理图像而二进制的能力要比JS方便很多,效率也更高2. 改成下服务器返回的数据让长连接返回这样的数据结构
       
       <script>
       try{
            if(parent.showPic){
                parent.showPic('image/jpeg', '<图片Base64编码>');
            }
       }catch(e){}
       </script>
       每推送一张图片输出一个这样的数据结构。这样最少能省去JS解析
       图片的操作。
      

  5.   


    我们要的是实时显示摄像机监控到的东西,但是客户要求不用控件显示视频所以才想那样做的,图片一帧一帧的切换。 你刚才说的用Base64编码显示图片感觉挺不错!! 可是我如何获取那些图片的Base64编码呢?求教了,谢谢!!
      

  6.   

    responseText得到那些内容了吗?你就找boundary=后面的内容。然后到后面的内容里面找到分隔符
    后面的 1329898486 --1329898486 下面应该都是图像的信息了。如Content-Type,文件名等
      

  7.   

    参见
    http://leonardleonard.iteye.com/blog/276169
      

  8.   


    responseText得不到内容,因为返回来的信息没有打印到网页页面上去。就是因为responseText得不到内容所以我才想问问看出了这个还有别的方式可以获取得到内容。
      

  9.   

    问一下楼主最后是怎么解决这个问题的,我现在也有这个问题,想要实现web视频监控,可不可以教我一下或发个邮件到我邮箱,不胜感激[email protected]