我在c ++ 11中使用mdpeg流代码并使用std :: thread。设计得很好,我们很满意。我们尝试将这些代码放在QtCreator中,它编译并没有按预期运行。我们无法在浏览器中看到该流。这里基本代码:
在c ++ 11 main.cpp中:
int main()
{
VideoServer video;
thread video_thread([&video]() {
video.run();
});
thread capture_thread([&video]() {
VideoCapture cap;
cap.open(0 + cv::CAP_ANY);
if (!cap.isOpened()) {
cerr << "Error";
return -1;
}
Mat frame;
for (;;) {
cap.read(frame);
video.set_image(frame);
// this_thread::sleep_for(chrono::milliseconds((int)(1000 / 20)));
}
});
video_thread.join();
capture_thread.join();
}
videoserver.hpp
class VideoServer {
private:
SimpleWeb::Server<SimpleWeb::HTTP> server;
std::mutex image_lock;
std::condition_variable image_notify;
std::vector<uchar> image;
unsigned int active = 0;
public:
void run();
void set_image(cv::Mat& frame);
};
我们尝试使用:robotvision 集成QtCreator的源代码。
QtCreator中的: main.cpp中
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
DigitalClock clock;
JVideoServer jvideo;
// thread video_thread([&jvideo]() {
// jvideo.run();
// cout << "videoThread started" << endl;
// });
w.show();
// video_thread.detach();
return a.exec();
}
我在Qt中的show_frame函数:
jvideo.set_image(image);
将图像传递给Videostreamer线程。
所有内容都是在没有警告和软件工作的情况下编译的。
但这个帖子很慢(2-3次),VideoStreamer没有流,我们无法在浏览器中看到流媒体视频。
有什么想法吗?我们应该把这个std :: thread放在QtCreator中(我们熟悉了吗?)
由于