gpt4 book ai didi

gstreamer 没有刷新到文件接收器

转载 作者:行者123 更新时间:2023-12-04 09:07:59 24 4
gpt4 key购买 nike

我有这个 gstreamer 管道,它从 coomand 线工作:

gst-launch-1.0 autovideosrc ! tee name = t ! queue ! omxh264enc ! 
'video/x-h264, stream-format=(string)byte-stream' ! h264parse ! qtmux
! filesink name=fileSink location=test.mp4 t. ! queue ! videoscale !
video/x-raw, width=480,height=270 ! xvimagesink name=displaySink -e

现在,我在 C++ 端复制这个,如下所示:
GstElement * pipeline = gst_parse_launch("autovideosrc ! tee name = t ! "
"queue ! omxh264enc ! video/x-h264, "
"stream-format=(string)byte-stream ! h264parse ! "
"qtmux ! filesink name=fileSink location=test.mp4 t. "
"! queue ! videoscale ! video/x-raw, width=480,height=270 ! "
"xvimagesink name=displaySink", &error);</raw>

我将其连接到 QT 窗口并按如下方式播放:
GstElement * displaySink = gst_bin_get_by_name (GST_BIN (pipeline), "displaySink");
qDebug() << displaySink;
// prepare the ui
QWidget window;
window.resize(480, 270);
window.show();

WId xwinid = window.winId();
gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY(displaySink), xwinid);

// run the pipeline
qDebug() << "Calling run...";

GstStateChangeReturn sret = gst_element_set_state (pipeline,
GST_STATE_PLAYING);
if (sret == GST_STATE_CHANGE_FAILURE) {
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (pipeline);
// Exit application
QTimer::singleShot(0, QApplication::activeWindow(), SLOT(quit()));
}

int ret = app.exec();

window.hide();
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (pipeline);

这开始在我的 Qt 窗口和文件 test.mp4 上显示视频流被创建并开始变大。但是,当我退出应用程序时,该文件无法播放。我有一种感觉,这是因为我调用了最后一位或一些标题信息没有写入:
gst_element_set_state (pipeline, GST_STATE_NULL);

我推测这可能会关闭管道,而不会确保正确创建和完成文件。有没有办法确保在关闭之前在管道上调用EOF或EOS并确保正确写入文件?这也是我目前的猜测,但其他可能是错误的......

最佳答案

是的,发送 EOS 是必要的..

所以在管道的 NULLing 之前做:

gst_element_send_event(pipeline, gst_event_new_eos());

关于gstreamer 没有刷新到文件接收器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38170733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com