gstreamer gst_element_seek在mpeg2ts上非常慢

时间:2022-09-08 19:56:59

Here is what I have come up with so far for seeking while playing:

下面是我到目前为止在游戏中寻找的东西:

case GDK_Up:
{

    gint64 pos_ns, dur_ns, seek_ns;
    GstFormat format;

    format = GST_FORMAT_TIME;

    gst_element_query_duration(pipeline,&format,&dur_ns);
    gst_element_query_position(pipeline,&format,&pos_ns);
    g_print ("Time: %" GST_TIME_FORMAT " / %" GST_TIME_FORMAT "\n", GST_TIME_ARGS (pos_ns), GST_TIME_ARGS (dur_ns));

    seek_ns = pos_ns + 60*GST_SECOND;

    if (!gst_element_seek (pipeline, 1.0, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT,
             GST_SEEK_TYPE_SET, seek_ns,
             GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE)) 
    {

        g_print ("Seek failed!\n");

    }


}

break;

Here is my pipeline:

这是我的管道:

pipeline = gst_parse_launch("filesrc location=filename.mpg ! decodebin name=decoder decoder. ! queue ! audioconvert ! alsasink decoder. ! deinterlace ! ffmpegcolorspace ! glimagesink",&error);

The first seek will take about 3 seconds to perform, by the 5th or 6th seek it is taking 15 to 20 seconds to start playing from the new position. I know I must be doing something wrong, but I can't figure out from the documentation what that is.

第一次寻找需要3秒来完成,第5或第6次寻找需要15到20秒才能从新的位置开始。我知道我一定做错了什么,但我无法从文档中找出那是什么。

Is it the way I have constructed the pipeline? I realize that I have taken some shortcuts here.

是我建造管道的方式吗?我意识到我在这里走了一些捷径。

Is it the type of media file? (mpeg2ts) Is it the length of the media file? (4 hours)

是媒体文件的类型吗?是媒体文件的长度吗?(4小时)

The documentation says:

文档表示:

The application issues a seek on the pipeline and the new media is immediatly played after the seek calls returns.

应用程序在管道上发出一个查找,在查找调用返回后立即播放新媒体。

So what is taking so long for the seek call to return?

那么,为什么要花这么长时间才让“寻找”电话回来呢?

Any help would be greatly appreciated.

如有任何帮助,我们将不胜感激。

Update:

更新:

Here is the debug log from a debug level of 2:

下面是调试级别为2的调试日志:

(fullscreen02:4554): GLib-GObject-WARNING **: g_object_set_property: property `device-name' of object class `GstAlsaSink' is not writable
0:00:01.137170699  4554       0x9d9500 WARN             mpegtsdemux gstmpegtsdemux.c:754:gst_mpegts_demux_fill_stream: AC3 stream type found but no corresponding descriptor to differentiate between AC3 and EAC3. Assuming plain AC3.
0:00:01.179042694  4554       0x9d9500 WARN             mpegtsdemux gstmpegtsdemux.c:754:gst_mpegts_demux_fill_stream: AC3 stream type found but no corresponding descriptor to differentiate between AC3 and EAC3. Assuming plain AC3.
0:00:01.188213891  4554 0x7ff9d8023c40 WARN             mpegtsdemux gstmpegtsdemux.c:2865:gst_mpegts_demux_src_pad_query:<mpegtsdemux0> unsupported query format or no bitrate yet to approximate duration from bytes
0:00:01.188464979  4554 0x7ff9d80270e0 WARN             mpegtsdemux gstmpegtsdemux.c:2865:gst_mpegts_demux_src_pad_query:<mpegtsdemux0> unsupported query format or no bitrate yet to approximate duration from bytes
No accelerated IMDCT transform found
0:00:01.211118745  4554 0x7ff9d8023c40 WARN                    alsa gstalsa.c:124:gst_alsa_detect_formats:<alsasink0> skipping non-int format
No accelerated IMDCT transform found
0:00:01.237512648  4554 0x7ff9d8023c40 WARN            audioconvert gstaudioconvert.c:832:gst_audio_convert_fixate_channels:<audioconvert0> downstream caps contain no channel layout
0:00:01.239176189  4554       0x9dabd0 WARN            audioconvert gstaudioconvert.c:832:gst_audio_convert_fixate_channels:<audioconvert0> downstream caps contain no channel layout
0:00:01.273765960  4554 0x7ff9d8023c40 WARN            audioconvert gstaudioconvert.c:832:gst_audio_convert_fixate_channels:<audioconvert0> downstream caps contain no channel layout
Got prepare-xwindow-id msg
0:00:01.326878070  4554       0x6068b0 WARN                 default xoverlay.c:354:gst_x_overlay_set_xwindow_id:<glimagesink0> Using deprecated gst_x_overlay_set_xwindow_id()
0:00:01.326931302  4554       0x6068b0 WARN                 default xoverlay.c:390:gst_x_overlay_set_window_handle:<glimagesink0> Calling deprecated set_xwindow_id() method
0:00:01.337897164  4554 0x7ff9cc002cd0 WARN                     bin gstbin.c:2380:gst_bin_do_latency_func:<pipeline0> did not really configure latency of 0:00:00.000000000
0:00:02.042181425  4554 0x7ff9d8023c40 WARN             mpegtsdemux gstmpegtsdemux.c:2865:gst_mpegts_demux_src_pad_query:<mpegtsdemux0> unsupported query format or no bitrate yet to approximate duration from bytes
0:00:03.016673305  4554 0x7ff9d8023c40 WARN             mpegtsdemux gstmpegtsdemux.c:2865:gst_mpegts_demux_src_pad_query:<mpegtsdemux0> unsupported query format or no bitrate yet to approximate duration from bytes
0:00:04.489319920  4554 0x7ff9d8023c40 WARN             mpegtsdemux gstmpegtsdemux.c:2865:gst_mpegts_demux_src_pad_query:<mpegtsdemux0> unsupported query format or no bitrate yet to approximate duration from bytes
0:00:05.961069736  4554 0x7ff9d8023c40 WARN             mpegtsdemux gstmpegtsdemux.c:2865:gst_mpegts_demux_src_pad_query:<mpegtsdemux0> unsupported query format or no bitrate yet to approximate duration from bytes
Counter: 0:00:05.930250000 / 3:37:14.178723991  (this is when a 60 sec seek forward was initiated)
0:00:07.300999850  4554 0x7ff9d8023c40 WARN             mpegtsdemux gstmpegtsdemux.c:2865:gst_mpegts_demux_src_pad_query:<mpegtsdemux0> unsupported query format or no bitrate yet to approximate duration from bytes
0:00:07.317269896  4554 0x7ff9cc005cd0 WARN                     bin gstbin.c:2380:gst_bin_do_latency_func:<pipeline0> did not really configure latency of 0:00:00.000000000
0:00:07.641986233  4554       0x9d9500 WARN               decodebin gstdecodebin.c:1485:queue_filled_cb:<decoder> Queue is bigger than 20Mbytes, something else is going wrong
0:00:11.059481122  4554 0x7ff9d8023c40 WARN             mpegtsdemux gstmpegtsdemux.c:2865:gst_mpegts_demux_src_pad_query:<mpegtsdemux0> unsupported query format or no bitrate yet to approximate duration from bytes
0:00:11.474393831  4554       0x9d9500 WARN               decodebin gstdecodebin.c:1485:queue_filled_cb:<decoder> Queue is bigger than 20Mbytes, something else is going wrong
previous line repeated 55 times
0:00:12.532097973  4554 0x7ff9d8023c40 WARN             mpegtsdemux gstmpegtsdemux.c:2865:gst_mpegts_demux_src_pad_query:<mpegtsdemux0> unsupported query format or no bitrate yet to approximate duration from bytes
0:00:12.538414925  4554       0x9d9500 WARN               decodebin gstdecodebin.c:1485:queue_filled_cb:<decoder> Queue is bigger than 20Mbytes, something else is going wrong
previous line repeated 26 times
Counter: 0:02:05.745916667 / 3:37:14.178723991 (this is when a 60 sec seek forward was initiated)
0:00:13.113363951  4554 0x7ff9cc002c80 WARN                     bin gstbin.c:2380:gst_bin_do_latency_func:<pipeline0> did not really configure latency of 0:00:00.000000000
0:00:13.116343604  4554 0x7ff9d8023c40 WARN             mpegtsdemux gstmpegtsdemux.c:2865:gst_mpegts_demux_src_pad_query:<mpegtsdemux0> unsupported query format or no bitrate yet to approximate duration from bytes
0:00:13.472504323  4554       0x9d9500 WARN               decodebin gstdecodebin.c:1485:queue_filled_cb:<decoder> Queue is bigger than 20Mbytes, something else is going wrong
previous line repeated 9 times
0:00:25.545042104  4554 0x7ff9d8023c40 WARN             mpegtsdemux gstmpegtsdemux.c:2865:gst_mpegts_demux_src_pad_query:<mpegtsdemux0> unsupported query format or no bitrate yet to approximate duration from bytes
0:00:25.580215323  4554       0x9d9500 WARN               decodebin gstdecodebin.c:1485:queue_filled_cb:<decoder> Queue is bigger than 20Mbytes, something else is going wrong
previous line repeated 43 times 

I am currently in the process of looking up some of these warnings.

我目前正在查找其中的一些警告。

1 个解决方案

#1


1  

Your pipeline looks okay. There have been lots of optimizations on mpegts elements. How up to date is your gstreamer installation. If your installation is up to date, you could run a profiler such as oprofile to see if there are hotspots. You can also check the gstreamer debug log to see if there are any complains regarding the file.

你的管道看起来好。对mpegts元素进行了大量优化。最新的是gstreamer安装。如果您的安装是最新的,您可以运行profile这样的分析器来查看是否存在热点。您还可以检查gstreamer调试日志,看看是否有关于该文件的任何抱怨。

#1


1  

Your pipeline looks okay. There have been lots of optimizations on mpegts elements. How up to date is your gstreamer installation. If your installation is up to date, you could run a profiler such as oprofile to see if there are hotspots. You can also check the gstreamer debug log to see if there are any complains regarding the file.

你的管道看起来好。对mpegts元素进行了大量优化。最新的是gstreamer安装。如果您的安装是最新的,您可以运行profile这样的分析器来查看是否存在热点。您还可以检查gstreamer调试日志,看看是否有关于该文件的任何抱怨。