QtGStreamer在来自摄影机的流媒体上未产生预期输出
我正在尝试使用QtGStreamer来流式传输摄影机帧,并将其渲染到QML窗口。我有一个简单的Gstreamer管道,当我使用QtGStreamer在来自摄影机的流媒体上未产生预期输出,gstreamer,qtgstreamer,Gstreamer,Qtgstreamer,我正在尝试使用QtGStreamer来流式传输摄影机帧,并将其渲染到QML窗口。我有一个简单的Gstreamer管道,当我使用gst-launch-1.0 gst-launch-1.0 autovideosrc ! videoscale ! video/x-raw, width=480,height=270 ! xvimagesink -e 现在,我创建一个对应的QtGStreamer管道,如下所示: void Streamer::startStreaming() { if (!m_s
gst-launch-1.0
gst-launch-1.0 autovideosrc ! videoscale ! video/x-raw, width=480,height=270 ! xvimagesink -e
现在,我创建一个对应的QtGStreamer管道,如下所示:
void Streamer::startStreaming()
{
if (!m_streaming_pipeline) {
m_streaming_pipeline = QGst::Pipeline::create();
if (m_streaming_pipeline) {
QGst::ElementPtr source = QGst::ElementFactory::make("autovideosrc");
QGst::ElementPtr scale = QGst::ElementFactory::make("videoscale");
scale->setProperty("caps", QGst::Caps::fromString("video/x-raw, width=480,height=270"));
if (m_videoSink) {
m_videoSink->setProperty("sync", false);
m_streaming_pipeline->add(source, scale, m_videoSink);
source->link(scale);
scale->link(m_videoSink);
QGst::BusPtr bus = m_streaming_pipeline->bus();
bus->addSignalWatch();
QGlib::connect(bus, "message", this, &Recorder::onBusMessage);
m_streaming_pipeline->setState(QGst::StatePlaying);
qDebug() << "Done";
}
}
}
}
我注意到的另一件事是,帧确实被渲染,这几乎是颜色方案被翻转。因此,这条线路上的某些东西似乎也在翻转颜色通道
编辑
我发现我需要添加一个capsfilter来获得正确的格式。因此,添加如下内容:
QGst::ElementPtr capsfilter = QGst::ElementFactory::make("capsfilter", "capsfilter");
capsfilter->setProperty("caps", QGst::Caps::fromString("video/x-raw, width=1920, height=1080, format=RGB, framerate=30/1"));
然后通过
m_streaming_pipeline->add(source, capsfilter, scale, m_videoSink);
随后,它解决了这个问题
尽管现在我的问题是gstreamer如何在我的原始管道中选择有效的格式?尝试
videoconvert
。它通常用于两条管道之间的自动封盖设置。太棒了!谢谢你的提示@VELCANTRY视频转换
。它通常用于两条管道之间的自动封盖设置。太棒了!谢谢你的提示@维尔坎
m_streaming_pipeline->add(source, capsfilter, scale, m_videoSink);