Once an for all, does GStreamer support .pls playlists?

Nicolas Dufresne nicolas at ndufresne.ca
Tue Apr 20 17:32:51 UTC 2021


Le mardi 20 avril 2021 à 07:45 -0500, diracsbracket via gstreamer-devel a
écrit :
> Hi.
> Having troubles with playing a particular radio stream in Clementine, and
> getting the reply for one of the maintainers there that "It's working for me
> with gstreamer 1.18.2" whereas I have "1.14.4-1", I built from source the
> latest version, GStreamer 1.19.0 and tried the following:

GStreamer does not natively handle PLS. Though applications like Totem (Gnome
Video), do have various playlist parsers and can use GStreamer to play the
content.

> 
> ```
> [gst-master] buster at debian:~/gst-build/build$ gst-launch-1.0 --version
> gst-launch-1.0 version 1.19.0
> GStreamer 1.19.0 (GIT)
> Unknown package origin
> [gst-master] buster at debian:~/gst-build/build$ 
> 
> ```
> 
> ```
> [gst-master] buster at debian:~/gst-build/build$ GST_DEBUG=*:3 gst-launch-1.0
> -v playbin uri= http://serpent0.duckdns.org:8088/kbsfm.pls

Just tried this one in Totem, and it fails with "open: File name too long". From
what I understood it is using GVFS to access the files over HTTP, and this seems
like a limitation of it. Would have been nicer to use souphttpsrc for that, but
this is application design choice.

The playlist is the following:

[playlist]
File1=https://1fm.gscdn.kbs.co.kr/1fm_192_1.m3u8?Expires=1619111851&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8xZm0uZ3NjZG4ua2JzLmNvLmtyLzFmbV8xOTJfMS5tM3U4IiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjE5MTExODUxfX19XX0_&Signature=mnNon5XupF~K1FJ2mdzn-k~ffjgnM4zlTxLI19pfnGuHbfBtjjw2ojGZdn862qkHfAFhnM85hqAM6CryIsi2HC8nrduJrlaCJHC0TGwcv2N9kQaHRdYfJCw12O0r9ChkE48ldqgxkg7cYqPfIdvlAbxoAv1yL-ogVER6o4OdGtbBS5LCiaLZ0b6svpA6FbtKuLHhCAJnupkNyrf97cbgHMnwXTNVeKs5u3uiSvNMAW3LLgKVfuOIzbwvJxKkNlKbXg05YKkRaSJgHzCPk9ucM1Ka6XSOpPmxkqcHKCV~mWJC199qKzcAivbNKqUlXfBCzQYIaNfwTLoHtGT7KoBqUg__&Key-Pair-Id=APKAICDSGT3Y7IXGJ3TA
Title1=KBS Classic FM
Length1=-1

So it points to an .m3u8 playlist, this one is special playlist, it's an
adaptive HLS stream, which GStreamer handles natively. You can test with:

gst-play-1.0
"https://1fm.gscdn.kbs.co.kr/1fm_192_1.m3u8?Expires=1619111851&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8xZm0uZ3NjZG4ua2JzLmNvLmtyLzFmbV8xOTJfMS5tM3U4IiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjE5MTExODUxfX19XX0_&Signature=mnNon5XupF~K1FJ2mdzn-k~ffjgnM4zlTxLI19pfnGuHbfBtjjw2ojGZdn862qkHfAFhnM85hqAM6CryIsi2HC8nrduJrlaCJHC0TGwcv2N9kQaHRdYfJCw12O0r9ChkE48ldqgxkg7cYqPfIdvlAbxoAv1yL-ogVER6o4OdGtbBS5LCiaLZ0b6svpA6FbtKuLHhCAJnupkNyrf97cbgHMnwXTNVeKs5u3uiSvNMAW3LLgKVfuOIzbwvJxKkNlKbXg05YKkRaSJgHzCPk9ucM1Ka6XSOpPmxkqcHKCV~mWJC199qKzcAivbNKqUlXfBCzQYIaNfwTLoHtGT7KoBqUg__&Key-Pair-Id=APKAICDSGT3Y7IXGJ3TA"

> Setting pipeline to PAUSED ...
> Pipeline is PREROLLING ...
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: ring-buffer-max-size = 0
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: buffer-size = -1
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: buffer-duration = -1
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: force-sw-decoders =
> false
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: use-buffering = false
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: download = false
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: uri =
> http://serpent0.duckdns.org:8088/kbsfm.pls
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: connection-speed = 0
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: source =
> "\(GstSoupHTTPSrc\)\ source"
> 0:00:00.038604197 25480 0x55922d154070 WARN               structure
> gststructure.c:2093:priv_gst_structure_append_to_gstring: No value transform
> to serialize field 'session' of type 'SoupSession'
> Got context from element 'source': gst.soup.session=context,
> session=(SoupSession)NULL, force=(boolean)false;
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstTypeFindElement:typefindelement0.GstPad:src:
> caps = text/plain
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstTypeFindElement:typefind:
> force-caps = text/plain
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0:
> sink-caps = text/plain
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstQueue2:queue2-0:
> bitrate = 0
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstQueue2:queue2-0:
> bitrate = 0
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstQueue2:queue2-0.GstPad:sink:
> caps = text/plain
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstQueue2:queue2-0:
> bitrate = 0
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstQueue2:queue2-0:
> bitrate = 0
> Setting pipeline to PLAYING ...
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstQueue2:queue2-0.GstPad:src:
> caps = text/plain
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstQueue2:queue2-0:
> bitrate = 0
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0.GstGhostPad:sink.GstProxyPad:proxypad0:
> caps = text/plain
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstTypeFindElement:typefind.GstPad:src:
> caps = text/plain
> 0:00:00.230288908 25480 0x7f610c413770 WARN               decodebin
> gstdecodebin2.c:2890:type_found:<decodebin0> error: This appears to be a
> text file
> 0:00:00.230350827 25480 0x7f610c413770 WARN               decodebin
> gstdecodebin2.c:2890:type_found:<decodebin0> error: decodebin cannot decode
> plain text files
> ERROR: from element
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0:
> This appears to be a text file
> Additional debug info:
> ../subprojects/gst-plugins-base/gst/playback/gstdecodebin2.c(2890):
> type_found ():
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0:
> decodebin cannot decode plain text files
> 0:00:00.230483403 25480 0x7f610c413770 WARN                  queue2
> gstqueue2.c:3242:gst_queue2_loop:<queue2-0> error: Internal data stream
> error.
> 0:00:00.230531074 25480 0x7f610c413770 WARN                  queue2
> gstqueue2.c:3242:gst_queue2_loop:<queue2-0> error: streaming stopped, reason
> not-linked (-1)
> Execution ended after 0:00:00.000350034
> Setting pipeline to NULL ...
> ERROR: from element
> /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstQueue2:queue2-0:
> Internal data stream error.
> Additional debug info:
> ../subprojects/gstreamer/plugins/elements/gstqueue2.c(3242): gst_queue2_loop
> (): /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstQueue2:queue2-0:
> streaming stopped, reason not-linked (-1)
> Freeing pipeline ...
> [gst-master] buster at debian:~/gst-build/build$ 
> 
> ```
> 
> 
> 
> 
> --
> Sent from: http://gstreamer-devel.966125.n4.nabble.com/
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel




More information about the gstreamer-devel mailing list