AminetAminet
Search:
84479 packages online
About
Recent
Browse
Search
Upload
Setup
Services

comm/tcp/stream125.lha

Mirror:Random
Showing:m68k-amigaosppc-amigaosppc-morphosi386-arosi386-amithlonppc-warpupppc-powerupgeneric
No screenshot available
Short:stream,record and/or play Shoutcast radio
Author:megacz at usa.com
Uploader:megacz usa com
Type:comm/tcp
Version:1.25
Requires:see notes
Architecture:generic
Date:2008-02-26
Download:http://aminet.net/comm/tcp/stream125.lha - View contents
Readme:http://aminet.net/comm/tcp/stream125.readme
Downloads:1072

stream(mpeg audio) v1.25 by megacz(megacz at usa.com), Wednesday 20-Jan-2007
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  =====================


         __                                    ___  ___   ______
   _____/ /_________  ____ _____ ___     _   _<  / |__ \ / ____/
  / ___/ __/ ___/ _ \/ __ `/ __ `__ \   | | / / /  __/ //___ \  
 (__  ) /_/ /  /  __/ /_/ / / / / / /   | |/ / /_ / __/____/ /  
/____/\__/_/   \___/\__,_/_/ /_/ /_/    |___/_/(_)____/_____/   
                                                                


 ]i[   intro
===== =======

'stream' is a very powerful ARexx script that makes possible to STREAM,
RECORD and/or PLAY Shoutcast(MPEG-1,2,2.5/I,II,III) radio.

The main feature is unlimited number of streamers running at the same time,
so basically u r able to record as many Shoutcasts as ur machine resources
r adequate to launch new process, not worying too much about the CPU time
(coz of resetable process priorities that could be below 0 when recording).


Other features in brief:

  - fully CLI driven ( i see now faces of those who dont like the CONSOLE:,
    hehheh)

  - streamers following-tracing ( up to 10 streamers could be traced)

  - very informational progress indicator for each streamer:

                           [...](194/14/3153820/7300/0/0/4/5/0/0)[...]
      1. time elapsed------------/^^ /^ /^^^^^^ /^^^ / / / / / /
      2. network speed (Kb/s)-------/  /       /    / / / / / /
      3. tot. number of bytes received/       /    / / / / / /
      4. network buffer fill level(bytes)----/    / / / / / /
      5. disk buffer fill level(bytes)-----------/ / / / / /
      6. if player not running network !delay-----/ / / / /
      7. number of loops to pass until !delay------/ / / /
      8. refresh rate of ind. in VERBOSE/S----------/ / /      
      9. is recording paused(0=no/1=yes)?------------/ /
     10. number of reconnects-------------------------/

  - custom, reusable ports ( useful with web browsers for instance)

  - streamers switching ( the ability to drop the audio at one streamer and
    link it again to the other without terminating the previous one)

  - auto sense of the buffering ( when audio decoder is linked and then
    dropped streamer will behave like it would be still online, in the
    other words there will be no full-speed effect after audio dropping)

  - possibility to PAUSE and/or RESUME any recording streamer at any time

  - AHI support ( now also from command line)

  - popular pls://,m3u:// playlists support as well as list:// books
    ( to create fresh books use 'tools/screparse')

  - synchronous disk buffer ( no more filesystem performance loss when
    recording)

  - silent reconnection on Shoutcast drops ( streamer will try to reconnect
    unlimited number of times, but if there will be critial/init error it will
    give up - critical/init means usually timeout at some operation, like
    dns querying failure or connection timeout at startup)

  - eventized streamer priorities ( when player linked and when player
    dropped priorities)   

  - http proxy support ( just in case)

  - ... and many other minor ones u will discover by using frequently =D



 ]r[   requirements 
===== ==============

Any Amiga with 68020+/os2.04+/512+Kb and TCP/IP stack will handle streaming
very good, but for listening its recommended at least 68030+. 'stream' likes
every TCP/IP stack with 'bsdsocket.library' API.
 

Dependencies:

  - system/RexxMast (system)
    +libs/rexxsupport.library
    +libs/rexxsyslib.library
    +c/rx

  - c/status        (system)

  - c/break         (system)

  - FIFO:           (http://aminet.net/dev/gg/fifolib-bin.lha)
    +libs/fifo.library
    +l/fifo-handler

  - c/mpega         (http://aminet.net/mus/play/MPEGA35.lha)
                    (http://aminet.net/util/libs/mpega_library.lha)
                    (http://aminet.net/util/libs/mpega-WarpUP.lha)
                    (http://aminet.net/util/libs/mpega_libmad.lha)
    +libs/mpega.library

  - TCP/IP[AmiTCP]  (http://ftp.back2roots.org/geekgadgets/amiga/m68k/alpha/amitcp/AmiTCP-bin-30b2.lha)

  - RxSocket        (http://aminet.net/comm/tcp/rxsocket.lha)
    +libs/rxsocket.library
    +libs/rxlibnet.library



 ]c[   config/installation
===== =====================

Now, start ur favourite text editor and check out the variables, there
r things u want to customize, all the variables have comments so no fear.
However, there r vars. that have very little explanation so i will extend
comments of these vars. here:


'stream_text_buffer' - with this var. u adjust how much to read in one go
                       for text showing and 'stream_pipe_dchsfx' & 
                       'stream_pipe_qchsfx' channels, recommended range
                       is 4096-65535, usually u dont want to change this.

'stream_reqf_limit'  - this one determines how much to load from the start
                       of the x-fer, this avoids situations where connection
                       has been established with not a shoutcast/http server.
                       dont set below 2048!

'stream_mask_trace'  - this will put 'mask' before each refresh of the trace/
                       verbose status, "0:" no, "1:" yes
                       masks r simply previous entries with almost all chars
                       translated to spaces, except "0a" = LF's.
                       its a good idea to turn this on!

'stream_pipe_retry'  - this var. will set all the information resolvers into
                       retry mode if they will receive malformed data, FIFO:
                       is not perfect when in 'async' mode and this will fix
                       malformed data by resolving them again if they r
                       incomplete or unreadable. this applies to the info
                       channels('stream_pipe_dchsfx' & 'stream_pipe_qchsfx')
                       only. turn this on!!!
                       template: 'sw:tries:looprate(ticks)'
                       ex.: "1:10:3"
                       - turned on:10 times and fail:resolve every 3 ticks

'stream_tick_idle'   - this is the one that sets params for player simulation,
                       template: 'sw:min(ticks):max(ticks):minl:maxl'
                       -on/off:minimum delay:maximum delay:min.loops:max.loops
                       ex.1: "1:50:150:3:11"
                       - turned on:1 sec.:3 sec.:3 loops:11 loops,
                         it will pass 3-11 loops and wait 1-3 seconds
                       ex.2: "0:25:0:1:0"
                       - this will not try to measure the real treshold and
                         will use static of 0.5 sec. every 1 loop
                       ex.3" "0:0:0:0"
                       - streamer will start downloading at full speed
                         as soon as the player will drop
                       NOTE: simulation is only active when there is no
                             player linked otherwise everything depends
                             on the bitrate and the internal params of
                             the player.
                       generally u want to use this.


Installation is simple, just copy it somewhere - SYS:C/ seemd to be
the best place for often use.



 ]u[   usage
===== =======

Help below can be seen by typing "stream" with no args in CLI.

"
stream(mpeg audio) v1.24 by megacz(megacz at usa.com)

template: stream <URL/K|COMMAND/K> [RECORD/S] [AS=/K] [VOL=/N] [PORT=/K[,1]]
                 [AHI=/K] [PROXY=/K] [APPEND/S] [OVERWRITE/S] [DETACH/S]
                 [NOAUDIO/S] [VERBOSE/S]

commands:
         SHOW                        - show all active streamer(s)
      SERVERS                        - show streamer(s) request feedback(s)
         DROP                        - drop the audio only
         STOP<,portsuffix>[,1]       - stop streamer(s), #?=all
         LINK[,portsuffix][,1]       - link decoder to the streamer
        PAUSE<,portsuffix><,#>       - pause rec. in req. streamer, #=(0/1)
        TRACE[,ps,ps,..,.][,%]       - t. str., max of 10 [,ps] or [,%] - dyn.

URL:
         file://<file>               - play mpeg file locally
         http://<site>[:port][/path] - stream data from remote host
          pls://<file>[,word|#|$|?]  - parse .pls
          m3u://<file>[,word|#|$|?]  - parse .m3u
         list://<file>[,word|#|$|?]  - parse list/book
                     +[,word]        - search for a #?word#? beside/in the url
                          +[,#]      - pick number of the entry to stream
                            +[,$]    - shuffle the playlist($=0)
                              +[,?]  - show file content
                                       (if nothing specified the very first
                                        entry will be choosed and streamed.)

"                        

additional explanation:

 
         [PORT=/K[,1]]               - allows to specify static port suffix (not
                                       nescesarily a number), it could be almost
                                       anything but not the "%" char -see TRACE.
                                       [,1] after that suffix will result in
                                       reuse that port if it is occupied, also
                                       the audio will be dropped!
                                       IMPORTANT: "=" is a part of the option,
                                       sorry for that, its a must coz it gives
                                       the parser extact location of the args.

         [VERBOSE/S]                 - with this specified u will see how the
                                       streamer(which is usually started
                                       in the background) works.

         DROP                        - it will cause player = 'mpega' to terminate,
                                       but this will not bring the streamer down
                                       as long as it records, only streamers that
                                       do not record will terminate too.


         STOP<,portsuffix>[,1]       - will stop streamer with a given <,portsuffix>
                                       plus additionally can drop the audio by 
                                       specyfying [,1] after the <,portsuffix>.
                                       if u want to stop all the streamers just
                                       type '#?' as a <,portsuffix> and the audio
                                       will drop too.


         LINK[,portsuffix][,1]       - will link the player to the requested streamer,
                                       [,portsuffix] can be ommited so it will link
                                       to the very first on the port list.
                                       [,1] after [,portsuffix] will drop the audio 
                                       if it is up otherwise if audio is up it will
                                       print server information and will report that
                                       the player is already running.


        TRACE[,ps,ps,..,.][,%]       - allows to fetch and present up to 10 streamers
                                       progress indicators every user defined amount
                                       of seconds. trace can work in 3 modes:
                                       
                                        1. "TRACE" with no args will grab 10 very first
                                           running streamers and will be checking them
                                           every some amount of seconds, if some of them
                                           will drop it will mark them as dead.

                                        2. "TRACE,%" will be completly dynamic, there
                                           will be checks for new streamers every 10
                                           already presented, thus if some streamer
                                           will drop trace will wipe it out from the
                                           list.

                                        3. "TRACE<,ps,...>" will pick up to 10 port
                                           suffixes and will be checking them like in
                                           mode 1.
                        
                                        ur console should be able to display at least 80x25
                                        so the output will be looking good all the time. 
                    

example output of trace:

"
STREAM. at : querying running streamers...
STREAM. at : tracing(refresh every ~10 seconds)...
---
[+]. STREAM.1 - 21:03:13/29-11-06/(2/0/19243/7168/12075/50/3/5/0/0)
     >(stream.591096.mp3) : file init ok! next info = status.
[+]. STREAM.2 - 21:04:17/29-11-06/(23/130/149803/6144/18432/50/3/5/0/0)
     >(hd1:pcu_liveshow.mp3) : 2 audio packet(s) written.
[+]. STREAM.3 - 21:06:21/29-11-06/(45/0/287531/7168/38912/50/3/5/0/0) 
     >(hd2:testing.mp3) : oops! disk full?!! 2 packet(s) lost! 
[+]. STREAM.4 - 21:08:23/29-11-06/(1/0/10027/7168/0/50/3/5/0/0)
     >(NIL:) : http://69.42.69.99:8000
[-]. STREAM.5 - 21:09:17/29-11-06/(1/0/11592/1024/0/50/3/5/0/0) 
     >(NIL:) : http://213.251.163.207:8242
[-]. STREAM.6 - 21:08:59/29-11-06/(33/0/634880/5880/0/50/3/5/0/0) 
     >(NIL:) : http://localhost/hdx/pub/jerkyboys_song.mp3
---
STREAM. at : trace is in (auto/static) mode. press CTRL+C to stop.
STREAM. at : interrupted!
"

As u can see TRACE is a fantastic thing =D it will be telling u if
everything is fine or not... plus u can enable logfile for the 
streamers to collect even more informations.


example usage(my favourite):

"
38.[local]RamDisk:> stream list://comedy,?
stream(mpeg audio) v1.24 by megacz(megacz at usa.com)

STREAM. at : showing contents of 'sys:shoutlists/comedy'...
---
> http://209.190.20.82:8004    |  THE DEFCON COMEDY NETWORK - 300+ Hours of th
> http://64.62.194.5:11216     |  Khaha.com ((STEREO)): -- The Original **Unce
> http://64.236.34.97:80/strea |  KPIG - Live Free-Range DJs 24/7 - Freedom, C
> http://66.254.105.246:8000   |  Random Loveline                             
> http://205.188.215.232:8022  |  KPIG AACp 24k                               
> http://70.87.59.154:8000     |  No Holds Barred Radio Network, #1 for Live o
> http://213.189.22.206:8016   |  Humorzender                                 
> http://213.251.163.207:8242  |  RadioPrank.Com - We play phone pranks all th
> http://69.42.69.99:8000      |  (PCU) Prank Call Underground Radio (PCU)    
> http://207.200.96.229:8024   |  KPIG AACp 64k                               
> http://213.189.2.194:8930    |  Patrick Kicken's Pret Zender!   check www.pa
> http://204.11.33.120:8000    |  George Carlin Radio                         
> http://213.251.169.28:8010   |  80s Box & Today's http://boxradio.co.uk aac+
> http://62.75.144.187:8110    |  Deutsche Satire Deutsche Comedy             
> http://69.5.81.71:7170       |  Cringe Humor Radio - Comedy That Questions Y
> http://207.210.74.187:8000   |  GoonShowRadio                               
> http://68.12.220.148:8000    |  Phil Hendrie - 24 Hours a day               
> http://146.82.140.43:8000    |  SuperTraks - THE GREATEST MUSIC EVER RECORDE
> http://69.60.124.148:8000    |  -=RantRadio Talk=- Speak Your Mind          
> http://67.19.78.90:8010      |  No Holds Barred Radio Network, #1 for Live o

---
STREAM. at : The file is 21 line(s) and 1580 bytes(s) long.
38.[local]RamDisk:> stream list://comedy,RadioPrank.Com
stream(mpeg audio) v1.24 by megacz(megacz at usa.com)

STREAM. at : connecting to 'http://213.251.163.207:8242'...
STREAM. at : streamer 'STREAM.1' has been started in the background.
STREAM. at : linking to the streamer(STREAM.1)...
STREAM. at : fetching request feedback...
---
ICY 200 OK
icy-notice2:SHOUTcast Distributed Network Audio Server/Linux v1.9.5
icy-name:RadioPrank.Com - We Play Phone Pranks All The Time....
icy-genre:Comedy Alternative Talk
icy-url:http://www.radioprank.com
content-type:audio/mpeg
icy-pub:1
icy-br:56
---
STREAM. at : 'mpega' args. '-m -u -D -r -T -N -w -b0 -q0 -f1 -t2000 -F11050 -v20 -p0'

MPEGA 3.5 (21.12.98) [Generic] (C)1995-1998 Stephane TAVENARD
Email: Stephane.Tavenard at wanadoo.fr
Giftware MPEG Audio decoder for Layers I,II and III

File playing: FIFO:STREAM.1/rt
      Output: no file, low quality, mono 11025Hz
   File Type: MPEG1-III mono 56kbps 44100Hz
 File length: 10226:06
Elapsed time: 00:02
"

using 'stream' together with web browser:


 ! AWeb
--------

Click RMB and go to 'Settings>Browser Settings...' after the prefs window
popup click the last tab '5 Viewers' and add new MIME type entry like this:


      Type: audio / x-scpls
Extensions: pls
    Action: Extl. program (E)
      Name: rx
 Arguments: c:stream pls//%f port=www,1


Press Return key now and click on Save.

Additionally go to 'Settings>Program Settings...' and after the window popup
click on the last tab '4 Programs' u will find there 'Console' and the string
gadget, now enter this in there:


   Console: CON:0/5000/422/216/%t/AUTO/CLOSE/INACTIVE/SCREEN%n


this will cause 'stream' to be opened in a window allowing u to stop it
any time by pressing CTRL+C, but if u dont want any windows type at the
end of the 'Arguments' '>NIL:'.


 ! IBrowse
-----------

Click RMB and go to 'Preferences>Settings...', double click 'General' and pick
'MIME Types', press 'Add' and enter things below in the appropriate  str. gadgets:


    MIME Type: audio / x-scpls
    Extension: pls
       Action: External viewer
       Viewer: rx
    Arguments: c:stream pls://%f port=www,1


Additionally pick 'General' and in the 'Output window:' string gadget type this:


Output window: CON:0/5000/422/216/IBrowse Output/AUTO/CLOSE/INACTIVE/SCREEN%p


this will cause 'stream' to be opened in a window allowing u to stop it
any time by pressing CTRL+C, but if u dont want any windows type at the
end of the 'Arguments' '>NIL:'.


 ! Other
---------

If ur temporary storage 'T:' is assigned to a device which volume name
or some directories in the path have white spaces in their names may need to
enclose '%f' with '"' like:


    Arguments: c:stream pls://"%f" port=www,1


but i have seen that AWeb performs this already even if there is no spaces
in the path, so if something doest work try both methods.

Note that requesting new '.pls' from the server will stop the streamer
'STREAM.WWW' if it is running as well as 'mpega' causing also the
window to close.

U can of course use some other more advanced console handler like KingCON
and configure it to iconify/menufy instead of popping up the window, this might
be very comfy. The line for this would be:


Ex. console: KCON:0/5000/422/216/Example/CLOSE/INACTIVE/MENUFY/NOICON/KEEPCLOSED/AUTOICONIFY


Just remove '/MENUFY/NOICON' if u want icon on ur Workbench. 
This solution however has one jerky limitation which is 'mpega' doesnt react
to CTRL+C and i have no idea why is that... but external signalling works ok.



 ]t[   technical
===== ===========

 spaces    -  u r allowed to use spaces at the command line in the paths and 
              filenames, if u want to do so just enclose such a string with '"' like:
           
              'stream pls://"ram disk:my list has so many spaces in the name.pls",?'
           
              however if u got some url that contain spaces u r not allowed to
              enter them like in the example above, use '%20' instead, like:
           
              'stream http://server.domain.x/~spaces%20r%20so%20unsexy/stream%20bla'


 network
 buffer    -  in case of network buffer i recommend 7168 as a resonable value beetwen
              low bitrate and high bitrate mpegs, u may of coz want ot set it higher
              if u got ultra fast internet connection, but generally filling too large
              buffers may cause pauses in playing - this also depends on the settings
              u have specified in the 'mpega', one of the very important is '-t' it 
              decides how much to prebuffer in miliseconds for audio reply.
              if u got very slow connection to the net or using modem try lower values
              like 512-2048 so the process will be downloading data more often.


 priority  -  priorities r not very critical here if u got fast CPU, but if u got
              68020/68030 u may want to set 'stream_pri__idle' to a minus value, this
              will be especially helpful when u decide to launch 5+ recording streamers,
              but be aware of listening to some shoutcast when 'stream_pri__mpega'
              is higher than 'stream_pri__idle' coz ur recording streamers will not
              get any cpu time at that time, thus they might timeout!

 
 fifo      -  FIFO: device doesnt require any mountlist! just run it from CLI,
              i mention about this here coz some of u may not had read fifo doc...
              just add such a line to the 'startup-sequence' for permanent use:
              'RUN >NIL: l:fifo-handler'


 passwords -  i have also added a way of connecting to password protected servers
              but i dont know if this work for all the servers out there, template for
              such a resource would look like this:

              'stream http://server.domain.x/~johnnybravo/file.mp3\\user\\password'

              it works well with 'REALM' protection, plus note that the library
              'rxlibnet.library' is not being loaded at startup, but only when ur
              request contain '\\user\\password'.
              The method of encoding 'user' and 'password' fields is base64 in so
              called 'Basic Authorisation' mode.

 
 numeric
 values    -  another thing r the numeric values, note that there is no checks
              wether the value assigned to the variable is a numeric or not, so
              for correct operation do not specify any letters in place of
              digits and everything will be okay.              



 ]h[   history             
===== =========


older versions
--------------

 1.0 , ??-???-2004    - initial version
 1.1 , 26-Jun-2005    - first improved version
 1.21, 28-Jan-2006    - rewritten with new features
 1.22, 14-May-2006    - fixed problems with KingCON,
                        fixed problem where .mp3's could not be played
 1.23, 14-Jun-2006    - updated 'tools/'
 1.24, 24-Nov-2006    - rewritten from scratch with new features
                        and new methods of controlling pipe dev.


current version
---------------

 1.25, 20-Jan-2007    - fixed problems with KingCON where;
                        CTRL+C keypress in detached mode caused
                        streamers and player to stop...
       31-Jan-2007    - added socket timeouts, so that 'stream' will not
                        block anymore for unlimited amount of time, but
                        will fail after user defined interval and optionally
                        try to reconnect(its related to unexpected connection
                        drops when reading)
                        


 ]E[   ENDIF
===== =======

good luck!



Contents of comm/tcp/stream125.lha
 PERMSSN    UID  GID    PACKED    SIZE  RATIO METHOD CRC     STAMP          NAME
---------- ----------- ------- ------- ------ ---------- ------------ -------------
[generic]                 2296    6083  37.7% -lh5- 1058 Dec  5  2006 stream125/books/comedy
[generic]                  267     474  56.3% -lh5- 9fad Dec  5  2006 stream125/books/pranks
[generic]                 3022    7900  38.3% -lh5- b136 Dec  5  2006 stream125/books/punk
[generic]                  263     553  47.6% -lh5- 6ea3 Dec  5  2006 stream125/books/stoner
[generic]                11753   45550  25.8% -lh5- 60be Jan 31  2007 stream125/stream
[generic]                 8922   23263  38.4% -lh5- 4448 Jan 31  2007 stream125/stream.readme
[generic]                 2264    6018  37.6% -lh5- 6f38 Jan 27  2007 stream125/tools/screparse
[generic]                 2204    5236  42.1% -lh5- d025 May 14  2006 stream125/tools/_1.12!screparse
[generic]                 1085    2048  53.0% -lh5- 8ae0 May 14  2006 stream125/tools/_1.12!screparse.readme
---------- ----------- ------- ------- ------ ---------- ------------ -------------
 Total         9 files   32076   97125  33.0%            Feb 26 05:37

Aminet © 1992-2024 Urban Müller and the Aminet team. Aminet contact address: <aminetaminet net>