【发布时间】:2013-12-29 00:30:45
【问题描述】:
我对从 C++ 服务器向 Java 客户端发送视频流感兴趣。 C++ 服务器是用 boost/asio 编写的。
我正在考虑使用 opencv 来轻松连接到计算机的 USB 摄像头。但是,我在通过套接字发送 Mat 对象时遇到了麻烦。
我遇到的唯一方法是这样:
Mat frame;
...
int imgSize = frame.total()*frame.elemSize();
bytes = send(clientSock, frame.data, imgSize, 0))
但我不能以这种方式使用 boost 发送它,因为它必须采用以下形式之一: http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/reference/basic_raw_socket/send_to.html
所以我想到了将 frame.data ,imgSize 转换为字符串,并发送这两个缓冲区的容器,但我认为这不是正确的方法。即使是,我如何在 Java 客户端中“重建”图像?
任何想法将不胜感激!
【问题讨论】:
-
我觉得你必须转换它并不奇怪。我用插座甚至无线电发射器做了类似的事情,并且总是必须将所有内容转换为字符串。从来没有用
OpenCV做过这个,但也许你可以把Mat保存到一个图像文件4。但您可能需要自己编写。 -
frame.data 类型是“uchar*”,所以我不确定将其转换为字符串是否“安全”。
-
嗯,只有一种方法可以找到 :) google 的第一页上有很多转化,例如:stackoverflow.com/questions/17746688/…
标签: java c++ opencv boost-asio