C /QT 5 Gstreamer继续循环
C++/Qt 5 GStreamer continues loop
我目前正在尝试尝试播放视频循环的Gsteamer。我目前已经实现了它:
void VPlayer::playFile(QString video_filename, bool loop)
{
m_isLooping = loop;
QString cmdstr = "gst-launch-1.0 -v filesrc location=" + video_filename + " ! qtdemux ! queue max-size-buffers=0 max-size-time=0 ! vpudec frame-drop=0 ! queue ! imxv4l2sink device=/dev/video16";
GError **l_error = NULL;;
m_gst_pipeline = gst_parse_launch (cmdstr.toUtf8().data(), l_error);
m_gst_bus = gst_pipeline_get_bus (GST_PIPELINE(m_gst_pipeline));
gst_bus_set_sync_handler (m_gst_bus, GStreamerBusCallback, this, nullptr);
gst_object_ref (m_gst_bus);
gst_object_ref(m_gst_pipeline);
gst_element_set_state (m_gst_pipeline, GST_STATE_NULL);
gst_element_seek_simple (m_gst_pipeline, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, 0);
gst_element_set_state (m_gst_pipeline, GST_STATE_PLAYING);
}
GstBusSyncReply VPlayer::GStreamerBusCallback(GstBus *bus, GstMessage *msg, gpointer data)
{
VPlayer* player = (VPlayer*) data;
GstElement *pipeline = player->getPipeline();
switch (GST_MESSAGE_TYPE(msg))
{
case GST_MESSAGE_EOS:
/* restart playback if at end */
qDebug() << "PLAYBACK FINISHED";
if(player->isLooping())
{
qDebug() << "LOOPING";
gst_element_seek_simple (pipeline, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, 0);
gst_element_set_state (pipeline, GST_STATE_PLAYING);
}
break;
default:
break;
}
return GST_BUS_PASS;
}
当我运行此示例时,我会按预期获得EOS,并且调试输出还可以,但不是寻求图像冻结,也没有发生任何事情。
也没有继续。我在这里想念什么?
至少需要修复这一点:
GError *l_error = NULL;
m_gst_pipeline = gst_parse_launch (cmdstr.toUtf8().data(), &l_error);
我假设您在某处致电gst_init(...);
。
相关文章:
- 循环后如何继续阅读
- 循环不继续无法弄清楚为什么
- 如何创建一个 while 循环,继续循环,直到在C++中输入'using streams'键?
- while 循环 C++ 结束,但不继续到其余语句
- While循环在fork和execvp调用后没有继续
- C++,程序输出无效输入,但继续通过循环
- 程序终止,而不是继续整数输入验证循环
- C /QT 5 Gstreamer继续循环
- 我如何摆脱循环并继续循环
- 在 fork() 之后,如何在 for() 循环中继续运行 execve()
- 如何在嵌套的 for 循环中使用“继续一段时间”循环
- C++ for 循环继续循环,即使它不应该循环
- 如何在无效的数据类型输入后继续循环
- 使用ifstreamwhile循环,如何显示输入错误并在下一行继续
- 在基于范围的 for 循环中继续不会重新触发断点?
- C++:如何决定继续循环
- 程序工作,但当输入无效时,它会继续循环 c++
- 程序不继续循环
- 为什么我的同时循环不会继续循环?
- 当cin不是int类型时,c++程序继续循环