why findtype cannot find the AAC stream in tesdemux?

^_^Sisyphus^_^ freesisyphuswang at gmail.com
Thu Sep 10 17:22:13 UTC 2020


The tsdemux has very complicated pad name `audio_%01x_%05x`
so it is not easy to use the normal audio_%u to select stream, I have
to use findtype. Hardcoded pad name works:
```
GST_DEBUG=4 gst-launch-1.0 filesrc location=test-with-audio.m3u8 !
hlsdemux ! tsdemux name=ts ts.audio_0_0101 ! aacparse ! queue !
decodebin ! audioconvert ! autoaudiosink
```
capfilter with audio/mpeg works:
```
GST_DEBUG=capsfilter:5 gst-launch-1.0 filesrc
location=test-with-audio.m3u8 ! hlsdemux ! tsdemux ! capsfilter
caps=audio/mpeg ! aacparse ! queue ! decodebin ! audioconvert !
autoaudiosink
```

However the typefind seems cannot find the pad:
```
$ GST_DEBUG=typefind:5 gst-launch-1.0 filesrc
location=test-with-audio.m3u8 ! hlsdemux ! tsdemux name=ts ts. !
typefind ! aacparse ! queue ! decodebin ! audioconvert ! autoaudiosink
0:00:00.011926970 117154 0x5590ef899640 DEBUG               typefind
gsttypefindelement.c:406:gst_type_find_handle_src_query:<typefindelement0>
Handling src query caps
0:00:00.011944555 117154 0x5590ef899640 DEBUG               typefind
gsttypefindelement.c:416:gst_type_find_handle_src_query:<typefindelement0>
Got caps query, our caps are (NULL)
0:00:00.011978300 117154 0x5590ef899640 DEBUG               typefind
gsttypefindelement.c:406:gst_type_find_handle_src_query:<typefindelement0>
Handling src query caps
0:00:00.011984027 117154 0x5590ef899640 DEBUG               typefind
gsttypefindelement.c:416:gst_type_find_handle_src_query:<typefindelement0>
Got caps query, our caps are (NULL)
Setting pipeline to PAUSED ...
0:00:00.015959689 117154 0x5590ef899640 DEBUG               typefind
gsttypefindelement.c:575:start_typefinding:<typefind> starting
typefinding
0:00:00.016044575 117154 0x5590ef899640 DEBUG               typefind
gsttypefindelement.c:406:gst_type_find_handle_src_query:<typefindelement0>
Handling src query scheduling
0:00:00.016061855 117154 0x5590ef899640 DEBUG               typefind
gsttypefindelement.c:575:start_typefinding:<typefindelement0> starting
typefinding
Pipeline is PREROLLING ...
0:00:00.018665561 117154 0x7f155800f120 DEBUG               typefind
gsttypefindelement.c:662:gst_type_find_element_sink_event:<typefindelement0>
got stream-start event in mode 1
0:00:00.018685080 117154 0x7f155800f120 DEBUG               typefind
gsttypefindelement.c:662:gst_type_find_element_sink_event:<typefindelement0>
got caps event in mode 1
0:00:00.018692980 117154 0x5590ef85db00 DEBUG               typefind
gsttypefindelement.c:662:gst_type_find_element_sink_event:<typefind>
got stream-start event in mode 1
0:00:00.018698314 117154 0x7f155800f120 INFO                typefind
gsttypefindelement.c:180:gst_type_find_element_have_type:<typefindelement0>
found caps video/x-h264, stream-format=(string)byte-stream,
alignment=(string)nal, probability=100
0:00:00.018717598 117154 0x7f155800f120 DEBUG               typefind
gsttypefindelement.c:787:gst_type_find_element_setcaps:<typefindelement0>
Skipping typefinding, using caps from upstream: video/x-h264,
stream-format=(string)byte-stream, alignment=(string)nal
0:00:00.018723544 117154 0x7f155800f120 DEBUG               typefind
gsttypefindelement.c:599:stop_typefinding:<typefindelement0> stopping
typefinding and pushing cached events and buffers
0:00:00.018727675 117154 0x7f155800f120 DEBUG               typefind
gsttypefindelement.c:649:stop_typefinding:<typefindelement0> we have
no data to typefind
0:00:00.018733422 117154 0x7f155800f120 DEBUG               typefind
gsttypefindelement.c:662:gst_type_find_element_sink_event:<typefindelement0>
got segment event in mode 0
0:00:00.018740740 117154 0x7f155800f120 DEBUG               typefind
gsttypefindelement.c:662:gst_type_find_element_sink_event:<typefindelement0>
got tag event in mode 0
0:00:00.018772464 117154 0x7f155800f120 DEBUG               typefind
gsttypefindelement.c:662:gst_type_find_element_sink_event:<typefindelement0>
got eos event in mode 0
ERROR: from element /GstPipeline:pipeline0/GstHLSDemux:hlsdemux0:
Internal data stream error.
0:00:00.018787308 117154 0x5590ef85db00 DEBUG               typefind
gsttypefindelement.c:662:gst_type_find_element_sink_event:<typefind>
got eos event in mode 1
Additional debug info:
gstadaptivedemux.c(2663): _src_chain ():
/GstPipeline:pipeline0/GstHLSDemux:hlsdemux0:
streaming stopped, reason not-negotiated (-4)
0:00:00.018799836 117154 0x5590ef85db00 INFO                typefind
gsttypefindelement.c:695:gst_type_find_element_sink_event:<typefind>
Got EOS and no type found yet
ERROR: pipeline doesn't want to preroll.
0:00:00.018831788 117154 0x5590ef85db00 WARN                typefind
gsttypefindelement.c:986:gst_type_find_element_chain_do_typefinding:<typefind>
error: Stream doesn't contain enough data.
0:00:00.018852073 117154 0x5590ef85db00 WARN                typefind
gsttypefindelement.c:986:gst_type_find_element_chain_do_typefinding:<typefind>
error: Can't typefind stream
Setting pipeline to NULL ...
0:00:00.019196880 117154 0x5590ef899640 DEBUG               typefind
gsttypefindelement.c:599:stop_typefinding:<typefind> stopping
typefinding
0:00:00.019204971 117154 0x5590ef899640 DEBUG               typefind
gsttypefindelement.c:649:stop_typefinding:<typefind> we have no data
to typefind
0:00:00.019280203 117154 0x5590ef899640 DEBUG               typefind
gsttypefindelement.c:599:stop_typefinding:<typefindelement0> stopping
typefinding and pushing cached events and buffers
0:00:00.019300014 117154 0x5590ef899640 DEBUG               typefind
gsttypefindelement.c:649:stop_typefinding:<typefindelement0> we have
no data to typefind
Freeing pipeline ...
```
How can I solve this problem?


More information about the gstreamer-devel mailing list