UE4接收MJPG格式视频流

1.缘起:帮助Simon大佬解决UE4接收MJPG格式视频流的问题
2.解决过程:去github下载了FFMPEGMedia和VlcMedia插件,经过编译后能够正常使用
3.效果:选择编码器
在这里插入图片描述
3.链接:
VlcMedia 4.27链接:https://pan.baidu.com/s/1pt-5Enn7npKtayavL27aEw?pwd=lpoq
提取码:lpoq

VlcMedia 4.26链接:https://pan.baidu.com/s/1RVD1PXH7XWaqiFbtjK7M6A?pwd=3o28
提取码:3o28

FFMPEGMedia 4.27链接:https://pan.baidu.com/s/1LvmDgODHgc1k6O3l5Dl6Jg?pwd=knfw
提取码:knfw

FFMPEGMedia 4.26链接:https://pan.baidu.com/s/1BugbUtWg_V8dvTyecrQtGA?pwd=hyax
提取码:hyax

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
接收mjpg streamer视频流,可以使用Qt的网络模块和多媒体模块。 在Qt中,可以通过QNetworkAccessManager类来进行网络请求,并使用QBuffer类来缓存网络数据。接收到数据后,可以使用QMovie类来解码mjpg数据流,然后将解码后的帧显示在Qt的界面上。 具体的实现步骤如下: 1. 创建一个Qt网络请求对象QNetworkRequest,并设置请求的URL; 2. 使用QNetworkAccessManager发送网络请求,并在回调函数中接收网络数据; 3. 将接收到的数据缓存到QBuffer对象中; 4. 使用QMovie对象解码mjpg数据流,并将解码后的帧显示在Qt界面上; 5. 循环执行步骤2-4,直到停止接收数据流。 注意事项: 1. 在接收数据流的过程中,需要处理数据流的边界,即分隔符; 2. 需要注意解码mjpg数据流的性能,避免卡顿; 3. 需要注意内存泄漏,及时释放资源。 参考代码如下: ```cpp #include <QtWidgets> #include <QtNetwork> #include <opencv2/opencv.hpp> class MJPGViewer : public QWidget { Q_OBJECT public: explicit MJPGViewer(QWidget *parent = nullptr) : QWidget(parent) { setWindowTitle("MJPGViewer"); label = new QLabel(this); label->setAlignment(Qt::AlignCenter); QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(label); QNetworkRequest request(QUrl("http://localhost:8080")); manager = new QNetworkAccessManager(this); reply = manager->get(request); connect(reply, &QNetworkReply::readyRead, this, &MJPGViewer::onReadyRead); } private: QLabel *label; QNetworkAccessManager *manager; QNetworkReply *reply; QBuffer buffer; QMovie movie; void onReadyRead() { QByteArray data = reply->readAll(); buffer.write(data); int pos = 0; while ((pos = buffer.indexOf("--frame", pos)) != -1) { int start = pos + 8; int end = buffer.indexOf("\r\n\r\n", start); if (end == -1) { break; } QByteArray header = buffer.mid(start, end - start); int contentStart = end + 4; int contentEnd = buffer.indexOf("--frame", contentStart); if (contentEnd == -1) { contentEnd = buffer.size(); } QByteArray content = buffer.mid(contentStart, contentEnd - contentStart); pos = contentEnd; if (header.startsWith("Content-Type: image/jpeg")) { cv::Mat frame = cv::imdecode(cv::Mat(content.toStdString()), cv::IMREAD_COLOR); if (!frame.empty()) { QImage image(frame.data, frame.cols, frame.rows, QImage::Format_RGB888); movie.setScaledSize(label->size()); movie.setCacheMode(QMovie::CacheAll); movie.setSpeed(100); movie.setFileName(""); movie.setPaused(true); movie.setFormat("mjpg"); movie.setDevicePixelRatio(devicePixelRatio()); movie.setQuality(100); movie.setScaledSize(label->size()); movie.setPixmap(QPixmap::fromImage(image)); movie.start(); } } } buffer.buffer().remove(0, buffer.pos()); } }; int main(int argc, char *argv[]) { QApplication a(argc, argv); MJPGViewer viewer; viewer.show(); return a.exec(); } #include "main.moc" ``` 上面的代码使用了Qt的网络模块和多媒体模块,实现了一个简单的mjpg streamer视频流接收器。运行程序后,可以在Qt界面中查看摄像头的实时画面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值