[Icecast] Orphan threads with Cellphone (Blackberry) player
Raymond Lutz
raylutz at cognisys.com
Tue Jul 19 17:49:37 UTC 2011
Friends:
The icecast server is very robust, but has some goofiness with regard to
use with cell-phone players. Has anyone else encountered these issues?
When I use a Blackberry to access the icecast stream, I get orphan and
duplicate client threads.
Background:
> testing with Blackberry Curve 9330
> Access icecast stream by clicking on the link on the website:
http://www.airprogressive.org:8000/stream.m3u
> Stream consists of mp3 at 32kbps / 22050 Hz.
> Stock media player launches, stops at "Do you want to open or save
the item."
> No threads started yet (viewing "List Clients" page of icecast admin
interface).
> Click "open", stream begins playing.
> Two threads are started instead of just one, always offset by 2 seconds.
-- but sometimes only one thread starts.
> FYI, Icecast config: <client-timeout>30</client-timeout>
Here is the output from the "List Clients" page of Icecast2 Admin
*IP*
*Seconds Connected*
*User Agent*
*Action*
68.7.238.55 406 WinampMPEG/5.62, Ultravox/2.1 Kick
<http://www.airprogressive.org:8000/admin/killclient.xsl?mount=/stream&id=2690>
74.82.68.16 6 Mozilla/4.8 [en] (Windows NT 5.0; U) Kick
<http://www.airprogressive.org:8000/admin/killclient.xsl?mount=/stream&id=2704>
74.82.68.16 4 Mozilla/4.8 [en] (Windows NT 5.0; U) Kick
<http://www.airprogressive.org:8000/admin/killclient.xsl?mount=/stream&id=2709>
Note the last two entries with the same IP address. This is the
Blackberry. Top entry is winamp player on PC for reference. Don't know
why two listener threads are generated.
> Stream is "Stopped" (i.e. click stop)
> Stream is restarted (i.e. click Play)
> A new thread is started, this time with a new +1 IP address.
*IP*
*Seconds Connected*
*User Agent*
*Action*
68.7.238.55 687 WinampMPEG/5.62, Ultravox/2.1 Kick
<http://www.airprogressive.org:8000/admin/killclient.xsl?mount=/stream&id=2690>
74.82.68.16 287 Mozilla/4.8 [en] (Windows NT 5.0; U) Kick
<http://www.airprogressive.org:8000/admin/killclient.xsl?mount=/stream&id=2704>
74.82.68.16 285 Mozilla/4.8 [en] (Windows NT 5.0; U) Kick
<http://www.airprogressive.org:8000/admin/killclient.xsl?mount=/stream&id=2709>
74.82.68.17 8 Mozilla/4.8 [en] (Windows NT 5.0; U) Kick
<http://www.airprogressive.org:8000/admin/killclient.xsl?mount=/stream&id=2718>
I can understand that the player may continue to communicate when
"stopped" to fill the lookahead buffer, but when it is restarted, it
should use the same connection and not start a new one.
> Click Stop.
> Click Play.
*IP*
*Seconds Connected*
*User Agent*
*Action*
68.7.238.55 803 WinampMPEG/5.62, Ultravox/2.1 Kick
<http://www.airprogressive.org:8000/admin/killclient.xsl?mount=/stream&id=2690>
74.82.68.16 403 Mozilla/4.8 [en] (Windows NT 5.0; U) Kick
<http://www.airprogressive.org:8000/admin/killclient.xsl?mount=/stream&id=2704>
74.82.68.16 401 Mozilla/4.8 [en] (Windows NT 5.0; U) Kick
<http://www.airprogressive.org:8000/admin/killclient.xsl?mount=/stream&id=2709>
74.82.68.17 124 Mozilla/4.8 [en] (Windows NT 5.0; U) Kick
<http://www.airprogressive.org:8000/admin/killclient.xsl?mount=/stream&id=2718>
74.82.68.18 24 Mozilla/4.8 [en] (Windows NT 5.0; U) Kick
<http://www.airprogressive.org:8000/admin/killclient.xsl?mount=/stream&id=2735>
> Yet another thread is started with a new "listener".
> Click "back" to exit from browser in Blackberry.
> All threads continue.
--> I have tested this many times and the threads continue without
being cleaned up indefinitely, even though the player is stopped and the
stream is not "playing" on the handset.
> Turn off mobile network. Handset not communicating.
> Threads continue
> Handheld turned off.
*IP*
*Seconds Connected*
*User Agent*
*Action*
68.7.238.55 995 WinampMPEG/5.62, Ultravox/2.1 Kick
<http://www.airprogressive.org:8000/admin/killclient.xsl?mount=/stream&id=2690>
74.82.68.16 595 Mozilla/4.8 [en] (Windows NT 5.0; U) Kick
<http://www.airprogressive.org:8000/admin/killclient.xsl?mount=/stream&id=2704>
74.82.68.16 593 Mozilla/4.8 [en] (Windows NT 5.0; U) Kick
<http://www.airprogressive.org:8000/admin/killclient.xsl?mount=/stream&id=2709>
74.82.68.17 316 Mozilla/4.8 [en] (Windows NT 5.0; U) Kick
<http://www.airprogressive.org:8000/admin/killclient.xsl?mount=/stream&id=2718>
74.82.68.18 216 Mozilla/4.8 [en] (Windows NT 5.0; U) Kick
<http://www.airprogressive.org:8000/admin/killclient.xsl?mount=/stream&id=2735>
Finally, after over 300 seconds, the threads are finally cleaned up.
*IP*
*Seconds Connected*
*User Agent*
*Action*
68.7.238.55 1139 WinampMPEG/5.62, Ultravox/2.1 Kick
<http://www.airprogressive.org:8000/admin/killclient.xsl?mount=/stream&id=2690>
So, to stop icecast server from communicating with the Blackberry
handset, you must either turn it off or disable mobile network for at
least 5 minutes.
It appears that the handset continues to transfer data (and therefore
incur charges, if the user does not have an unlimited data plan) if the
handset is not turned off or mobile network disabled for at least five
minutes. It also runs down the battery much faster because the radio
transmitter is actively being used, even if the user is not listening to
the stream.
The Blackberry network has intervening servers that continue to receive
data from the icecast server even if the handset is off. This behavior
likely has utility to deal with the realities of the cellphone network,
to allow the stream to be transferred from one cell to another, and deal
with the possibility that the handset may be out of range for up to 5
minutes without "interruption." However, it is hard to turn off the stream.
I looked at the icecast sourcecode and there is no use of cookies or any
identifier (that I could see) when managing the listener threads.
QUESTIONS:
1. I am curious why two listener entries are created for each Blackberry
listener. Ideas?
2. I don't have any theory as to why new threads are started even though
the old threads persist. (they continue redundantly until the handset is
turned off for at least 5 minutes, which appears only to bog down the
icecast server with unnecessary listener threads). Ideas?
3. Is there any good way to deal with this? I was thinking the following
might be possible:
a. maintain a cookie on the user device (Blackberry Browser)
related to each thread that is started.
b. If the user attempts to start more than one thread, kill any old
threads, update the cookie.
c. Provide a way to kill the thread from the browser interface,
such as sending a message to the server when the user exits the web
page, utilizing cookie information.
comments??
THANKS!
--Ray Lutz
--
---------------------------------------
Raymond Lutz
Cognisys, Inc.
1010 Old Chase Ave., Bldg B
El Cajon (San Diego Cty), CA 92020 USA
Voice 619-447-3246
http//www.cognisys.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.xiph.org/pipermail/icecast/attachments/20110719/5a49e263/attachment.htm>
More information about the Icecast
mailing list