我想通过gstreamer抓取视频帧并在我的应用程序上显示(使用Qt),但我遇到了一些问题:
当我尝试使用GstAppSink (gst_app_sink_pull_sample)时,它总是返回NULL,我不明白这一点。我可以使用终端(gst-launch-1.0)完美地流式传输视频。
下面是我的代码:
void gstreamer::openStream()
{
pipeline = gst_parse_launch ("rtspsrc location=rtsp://192.168.10.123 ! rtph264depay ! h264parse ! queue ! avdec_h264 ! xvimagesink sync=false async=false appsink name=mysink", NULL);
GstElement* sink = gst_bin_get_by_name(GST_BIN(pipeline), "mysink");
GstAppSink* appsink = GST_APP_SINK(sink);
if(!appsink)
{
qDebug() << "get app sink failed";
}
else
{
qDebug() << "app sink pass";
mAppSink = appsink;
openSample();
}
}
void gstreamer::openSample()
{
if(!mAppSink)
{
qDebug() << "appsink failed";
}
GstSample* gstSample = gst_app_sink_pull_sample(mAppSink);
if(gstSample == NULL)
{
qDebug() << "sample failed ";
}
else{
qDebug() << "sample pass";
}
GstBuffer* buffer = gst_sample_get_buffer(gstSample);
if(!buffer)
{
qDebug() << "buffer fail";
}
GstMapInfo map;
gst_buffer_map(buffer, &map, GST_MAP_READ);
QImage image = QImage((map.data), 320, 240, QImage::Format_RGB888);
emit sendFrame(image);
}我试着在网上寻找,但几乎没有任何关于这个问题的链接。
发布于 2020-10-31 04:03:32
尝试将管道更改为"rtspsrc location=rtsp://192.168.10.123!rtph264depay!h264parse!tee name=my_tee!queue!avdec_h264!xvimagesink sync=false my_tee.!queue!appsink async=false name=mysink“
https://stackoverflow.com/questions/55454086
复制相似问题