How to play internet radio URL with query?

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

How to play internet radio URL with query?

diracsbracket
Hi,
I am trying to make Clementine play an internet radio that has a playlist
URL that includes a long secret query string:

http://some.radio.com/1fm/_definst_/1fm.stream/playlist.m3u8?_lsu_sa_=3935363f5cd
... e734b0ae2ddd2

I tried this in VLC (which does not use GStreamer of course), and it works.
However, I would like to make it work on Clementine. On Clementine fora, it
is suggested that the problem lies with GStreamer.

For example, I tried using on Debian 9.5 (raplaced part of the string by ...
for the sake of brevity here):

```
gst-launch-1.0 -v playbin
uri=http://some.radio.com/1fm/_definst_/1fm.stream/playlist.m3u8?_lsu_sa_=3935363f5cd23e03e1...efc6c3e734b0ae2ddd2
```

This results in the following output:

```
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0: ring-buffer-max-size
= 0
/GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0: buffer-size = -1
/GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0: buffer-duration = -1
/GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0: use-buffering = false
/GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0: download = false
/GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0: uri =
http://kong.kbskme.gscdn.com/1fm/_definst_/1fm.stream/playlist.m3u8?_lsu_sa_=3935363f5cd23e03e180773f3d01da3a63bf60922489c40a6814cf3be0043f69a8d23e0a3a13b5617cdd33b5c1bdd3a27a2bf587ac7386a4a2dd64b5f0fd89ccf55f2133a4013efc6c3e734b0ae2ddd2
/GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0: connection-speed = 0
/GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0: source =
"\(GstSoupHTTPSrc\)\ source"
/GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0/GstTypeFindElement:typefindelement0.GstPad:src:
caps = application/x-hls
/GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0/GstHLSDemux:hlsdemux0.GstPad:sink:
caps = application/x-hls
/GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0/GstHLSDemux:hlsdemux0.GstPad:src_0:
caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
/GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0/GstQueue2:queue2-1.GstPad:sink:
caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
/GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0/GstQueue2:queue2-1.GstPad:src:
caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
/GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0.GstGhostPad:src_0:
caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
/GstPlayBin3:playbin3-0/GstDecodebin3:decodebin3-0.GstGhostPad:sink.GstProxyPad:proxypad0:
caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
/GstPlayBin3:playbin3-0/GstDecodebin3:decodebin3-0/GstParseBin:parsebin0.GstGhostPad:sink.GstProxyPad:proxypad3:
caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
/GstPlayBin3:playbin3-0/GstDecodebin3:decodebin3-0/GstParseBin:parsebin0/GstTypeFindElement:typefind.GstPad:src:
caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
/GstPlayBin3:playbin3-0/GstDecodebin3:decodebin3-0/GstParseBin:parsebin0/GstTSDemux:tsdemux0.GstPad:sink:
caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
/GstPlayBin3:playbin3-0/GstDecodebin3:decodebin3-0/GstParseBin:parsebin0/GstTypeFindElement:typefind.GstPad:sink:
caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
/GstPlayBin3:playbin3-0/GstDecodebin3:decodebin3-0/GstParseBin:parsebin0.GstGhostPad:sink:
caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
/GstPlayBin3:playbin3-0/GstDecodebin3:decodebin3-0.GstGhostPad:sink: caps =
video/mpegts, systemstream=(boolean)true, packetsize=(int)188
/GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0.GstGhostPad:src_0.GstProxyPad:proxypad2:
caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
/GstPlayBin3:playbin3-0/GstDecodebin3:decodebin3-0/GstParseBin:parsebin0/GstAacParse:aacparse0.GstPad:sink:
caps = audio/mpeg, mpegversion=(int)2, stream-format=(string)adts
```

But it stops after that.  If I use playbin3, I get a single additiona line

```
buffering...0%
```

Anyone has an idea what is going on or what the required modifications might
be to make Clementine work with this kind of URL ?

Thanks!!!
```



--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: How to play internet radio URL with query?

Philippe Normand
On Thu, 2019-01-17 at 23:47 -0600, diracsbracket wrote:

> Hi,
> I am trying to make Clementine play an internet radio that has a
> playlist
> URL that includes a long secret query string:
>
> http://some.radio.com/1fm/_definst_/1fm.stream/playlist.m3u8?_lsu_sa_=3935363f5cd
> ... e734b0ae2ddd2
>
> I tried this in VLC (which does not use GStreamer of course), and it
> works.
> However, I would like to make it work on Clementine. On Clementine
> fora, it
> is suggested that the problem lies with GStreamer.
>
> For example, I tried using on Debian 9.5 (raplaced part of the string
> by ...
> for the sake of brevity here):
>
> ```
> gst-launch-1.0 -v playbin
> uri=
> http://some.radio.com/1fm/_definst_/1fm.stream/playlist.m3u8?_lsu_sa_=3935363f5cd23e03e1...efc6c3e734b0ae2ddd2
> ```
>
> This results in the following output:
>
> ```
> Setting pipeline to PAUSED ...
> Pipeline is PREROLLING ...
> /GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0: ring-buffer-
> max-size
> = 0
> /GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0: buffer-size =
> -1
> /GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0: buffer-
> duration = -1
> /GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0: use-buffering
> = false
> /GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0: download =
> false
> /GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0: uri =
> http://kong.kbskme.gscdn.com/1fm/_definst_/1fm.stream/playlist.m3u8?_lsu_sa_=3935363f5cd23e03e180773f3d01da3a63bf60922489c40a6814cf3be0043f69a8d23e0a3a13b5617cdd33b5c1bdd3a27a2bf587ac7386a4a2dd64b5f0fd89ccf55f2133a4013efc6c3e734b0ae2ddd2
> /GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0: connection-
> speed = 0
> /GstPlayBin3:playbin3-0/GstURISourceBin:urisourcebin0: source =
> "\(GstSoupHTTPSrc\)\ source"
> /GstPlayBin3:playbin3-
> 0/GstURISourceBin:urisourcebin0/GstTypeFindElement:typefindelement0.G
> stPad:src:
> caps = application/x-hls
> /GstPlayBin3:playbin3-
> 0/GstURISourceBin:urisourcebin0/GstHLSDemux:hlsdemux0.GstPad:sink:
> caps = application/x-hls
> /GstPlayBin3:playbin3-
> 0/GstURISourceBin:urisourcebin0/GstHLSDemux:hlsdemux0.GstPad:src_0:
> caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
> /GstPlayBin3:playbin3-
> 0/GstURISourceBin:urisourcebin0/GstQueue2:queue2-1.GstPad:sink:
> caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
> /GstPlayBin3:playbin3-
> 0/GstURISourceBin:urisourcebin0/GstQueue2:queue2-1.GstPad:src:
> caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
> /GstPlayBin3:playbin3-
> 0/GstURISourceBin:urisourcebin0.GstGhostPad:src_0:
> caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
> /GstPlayBin3:playbin3-0/GstDecodebin3:decodebin3-
> 0.GstGhostPad:sink.GstProxyPad:proxypad0:
> caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
> /GstPlayBin3:playbin3-0/GstDecodebin3:decodebin3-
> 0/GstParseBin:parsebin0.GstGhostPad:sink.GstProxyPad:proxypad3:
> caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
> /GstPlayBin3:playbin3-0/GstDecodebin3:decodebin3-
> 0/GstParseBin:parsebin0/GstTypeFindElement:typefind.GstPad:src:
> caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
> /GstPlayBin3:playbin3-0/GstDecodebin3:decodebin3-
> 0/GstParseBin:parsebin0/GstTSDemux:tsdemux0.GstPad:sink:
> caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
> /GstPlayBin3:playbin3-0/GstDecodebin3:decodebin3-
> 0/GstParseBin:parsebin0/GstTypeFindElement:typefind.GstPad:sink:
> caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
> /GstPlayBin3:playbin3-0/GstDecodebin3:decodebin3-
> 0/GstParseBin:parsebin0.GstGhostPad:sink:
> caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
> /GstPlayBin3:playbin3-0/GstDecodebin3:decodebin3-0.GstGhostPad:sink:
> caps =
> video/mpegts, systemstream=(boolean)true, packetsize=(int)188
> /GstPlayBin3:playbin3-
> 0/GstURISourceBin:urisourcebin0.GstGhostPad:src_0.GstProxyPad:proxypa
> d2:
> caps = video/mpegts, systemstream=(boolean)true, packetsize=(int)188
> /GstPlayBin3:playbin3-0/GstDecodebin3:decodebin3-
> 0/GstParseBin:parsebin0/GstAacParse:aacparse0.GstPad:sink:
> caps = audio/mpeg, mpegversion=(int)2, stream-format=(string)adts
> ```
>
> But it stops after that.  If I use playbin3, I get a single additiona
> line
>
> ```
> buffering...0%
> ```
>
> Anyone has an idea what is going on or what the required
> modifications might
> be to make Clementine work with this kind of URL ?
>

The streaming server might perform checks on the client (user-agent,
referer or cookies). Can you set GST_DEBUG like this?

GST_DEBUG_FILE=gst.log GST_DEBUG="3,soup*:6" gst-launch-1.0 ...

And send the compressed gst.log file please.

Philippe

> Thanks!!!
> ```
>
>
>
> --
> Sent from: http://gstreamer-devel.966125.n4.nabble.com/
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: How to play internet radio URL with query?

diracsbracket
Hi Philippe,
Many thanks for taking the time to look into this.

I attached the gst.log file as you requested.

Merci!

gst.log <http://gstreamer-devel.966125.n4.nabble.com/file/t378649/gst.log>  



--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: How to play internet radio URL with query?

Philippe Normand
In reply to this post by Philippe Normand
Hi,

So it's not a server-side issue it seems, HLS fragments are correctly
downloaded but then the mpegts packetizer is unable to compute the PTS
values to stream time.

Philippe

On Sat, 2019-01-19 at 03:57 -0600, diracsbracket wrote:

> Hi Philippe,
> Many thanks for taking the time to look into this.
>
> I attached the gst.log file as you requested.
>
> Merci!
>
> gst.log <
> http://gstreamer-devel.966125.n4.nabble.com/file/t378649/gst.log>  
>
>
>
> --
> Sent from: http://gstreamer-devel.966125.n4.nabble.com/
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: How to play internet radio URL with query?

diracsbracket
Hi Philippe,
Thanks for showing how to get log files. The problem is clear from there,
and it seems I should be looking
in mpegtspacketizer.c or so.

Since that one seems to be part of the gst-plugins-bad set, I suppose there
is no point in submitting a bug report?



--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: How to play internet radio URL with query?

Philippe Normand
On Mon, 2019-01-21 at 07:09 -0600, diracsbracket wrote:

> Hi Philippe,
> Thanks for showing how to get log files. The problem is clear from
> there,
> and it seems I should be looking
> in mpegtspacketizer.c or so.
>
> Since that one seems to be part of the gst-plugins-bad set, I suppose
> there
> is no point in submitting a bug report?
>

Of course there is. gst-plugins-bad is not bad!
Please file a bug report. If you can also, please attach a short sample
which you could get with something like

gst-launch-1.0 <uri> ! hlsdemux ! filesink location=stream.ts

Philippe

>
>
> --
> Sent from: http://gstreamer-devel.966125.n4.nabble.com/
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: How to play internet radio URL with query?

diracsbracket