| 1 | * Introduction |
| 2 | |
| 3 | This file describes DisOrder's relationship to several different things that |
| 4 | get called 'streams'. |
| 5 | |
| 6 | * RTP Streaming |
| 7 | |
| 8 | DisOrder is capable of transmitting RTP streams over a suitable network. |
| 9 | |
| 10 | ** Server Setup |
| 11 | |
| 12 | To enable this make sure that all players use the speaker process, i.e. execraw |
| 13 | rather than exec (or it won't work properly) and configure the network speaker |
| 14 | backend: |
| 15 | |
| 16 | api network |
| 17 | broadcast 172.17.207.255 9003 |
| 18 | broadcast_from 172.17.207.2 9002 |
| 19 | |
| 20 | The destination address (broadcast) can be: |
| 21 | - a broadcast address for a local network |
| 22 | - a multicast address |
| 23 | |
| 24 | The source address (broadcast_from) is optional but may be convenient in some |
| 25 | cases. |
| 26 | |
| 27 | If the destination is a multicast address then you should set the TTL, for |
| 28 | instance: |
| 29 | |
| 30 | multicast_ttl 10 |
| 31 | |
| 32 | (The destination can also be a unicast address but that's not a tested |
| 33 | configuration.) |
| 34 | |
| 35 | scripts/setup now knows how to do basic setup for network play. |
| 36 | |
| 37 | ** Playing The Stream |
| 38 | |
| 39 | To play, use the disorder-playrtp client. If the destination address was a |
| 40 | unicast or broadcast address then: |
| 41 | |
| 42 | disorder-playrtp 9003 |
| 43 | |
| 44 | If the destination address was a multicast address then you must specify that, |
| 45 | for instance: |
| 46 | |
| 47 | disorder-playrtp 224.2.3.4 9003 |
| 48 | |
| 49 | If the client machine has a DisOrder configuration file allowing disorder(1) to |
| 50 | connect to the server then the parameters are unnecessary: disorder-playrtp |
| 51 | will figure out the details automatically. |
| 52 | |
| 53 | ** Disobedience |
| 54 | |
| 55 | Disobedience is capable of running disorder-playrtp in the background (provided |
| 56 | it is installed); look for the speaker icon. If it detects that the server is |
| 57 | using network play then its volume control will apply to the local volume, not |
| 58 | the server's volume. |
| 59 | |
| 60 | If you run into trouble look for *.log files in the ~/.disorder directory. |
| 61 | |
| 62 | ** Limitations |
| 63 | |
| 64 | Currently only 16-bit 44100Hz stereo is supported, which requires about |
| 65 | 1.4Mbit/s. At the time of writing I've found this to work fine on 100Mbit/s |
| 66 | ethernet and had reports of success with 10Mbit/s ethernet, but have not had |
| 67 | any success with wireless. |
| 68 | |
| 69 | Possibly other lower-quality but lower-bandwidth encodings will be supported in |
| 70 | future. |
| 71 | |
| 72 | If you have a very recent version of sox you may need to set the sox_generation |
| 73 | option. See disorder_config(5). |
| 74 | |
| 75 | |
| 76 | * Icecast Streaming |
| 77 | |
| 78 | This can be achieved using the speaker_command option and Icecast (see |
| 79 | http://www.icecast.org/). It will only work if you use the speaker process, |
| 80 | i.e. execraw for everything. |
| 81 | |
| 82 | I used: |
| 83 | |
| 84 | speaker_command "ices2 /etc/disorder/ices.xml" |
| 85 | |
| 86 | where ices.xml is: |
| 87 | |
| 88 | <?xml version="1.0"?> |
| 89 | <ices> |
| 90 | <background>0</background> |
| 91 | <logpath>/var/log/ices</logpath> |
| 92 | <logfile>disorder.log</logfile> |
| 93 | <loglevel>4</loglevel> |
| 94 | <consolelog>0</consolelog> |
| 95 | <stream> |
| 96 | <metadata> |
| 97 | <name>lyonesse</name> |
| 98 | <genre>Various</genre> |
| 99 | <description>lyonesse disorder output</description> |
| 100 | </metadata> |
| 101 | <input> |
| 102 | <module>stdinpcm</module> |
| 103 | <param name="rate">44100</param> |
| 104 | <param name="channels">2</param> |
| 105 | <param name="metadata">1</param> |
| 106 | <param name="metadatafilename">/var/disorder/icedata</param> |
| 107 | </input> |
| 108 | <instance> |
| 109 | <hostname>lyonesse.anjou.terraraq.org.uk</hostname> |
| 110 | <port>8000</port> |
| 111 | <password>SOURCE PASSWORD HERE</password> |
| 112 | <mount>/disorder.ogg</mount> |
| 113 | <reconnectdelay>2</reconnectdelay> |
| 114 | <reconnectattempts>5</reconnectattempts> |
| 115 | <maxqueuelength>80</maxqueuelength> |
| 116 | <encode> |
| 117 | <nominal-bitrate>64000</nominal-bitrate> |
| 118 | <samplerate>44100</samplerate> |
| 119 | <channels>2</channels> |
| 120 | <flush-samples>8820</flush-samples> |
| 121 | </encode> |
| 122 | </instance> |
| 123 | </stream> |
| 124 | </ices> |
| 125 | |
| 126 | This doesn't seem to get on very well with pausing but you're unlikely to want |
| 127 | to pause a stream in any case. I used IceCast 2.3.1 and Ices 2.0.1. You can |
| 128 | play the stream with XMMS or whatever. The total setup seems to play rather |
| 129 | behind the 'current' time, watch this space for a fix (or contribute one!) |
| 130 | |
| 131 | If you have a too-recent version of sox you may need to set the sox_generation |
| 132 | option. |
| 133 | |
| 134 | Mark Wooding contributed the original support for this but it's been modified |
| 135 | enough that he probably shouldn't be blamed for any bugs in the current code. |
| 136 | |
| 137 | |
| 138 | * DisOrder and Republishing Internet Streams |
| 139 | |
| 140 | DisOrder doesn't have any built-in support for playing streams but you can make |
| 141 | it do so. I use the following in my configuration file: |
| 142 | |
| 143 | player /export/radio/*.oggradio shell 'xargs ogg123 -q < "$TRACK"' |
| 144 | collection fs iso-8859-1 /export/radio |
| 145 | |
| 146 | After setting this up you'll need to re-read the config file and provoke a |
| 147 | rescan: |
| 148 | |
| 149 | disorder reconfigure rescan /export/radio |
| 150 | |
| 151 | /export/radio contains a file for each stream, containing the URL to use: |
| 152 | |
| 153 | lyonesse$ cat /export/radio/CUR1350.oggradio |
| 154 | http://cur.chu.cam.ac.uk:8000/cur.ogg |
| 155 | |
| 156 | You'll probably want to prevent random play of streams: |
| 157 | |
| 158 | disorder set /export/radio/CUR1350.oggradio pick_at_random 0 |
| 159 | |
| 160 | You can then queue a stream like any other track. It won't automatically |
| 161 | interrupt the playing track, you have to scratch it manually. Go back to |
| 162 | normal play by scratching the stream. |
| 163 | |
| 164 | |
| 165 | Local Variables: |
| 166 | mode:outline |
| 167 | fill-column:79 |
| 168 | End: |