Darwin Streaming Server

  • Darwin Server

Darwin server is a streaming server package which sends streaming data to QuickTime clients across the Internet using the industry standard RTP and RTSP protocols.

Darwin server binaries and source code are available at

http://developer.apple.com/darwin/projects/streaming

Precompiled binaries are available for the following operating systems:

* Mac OS X, v10.1.3 and later (server and proxy)
* Red Hat Linux 7.1 (server and proxy)
* Solaris 8 (server and proxy)
* Windows NT Server/Windows 2000 Server (server)

  • Installation
After downloading the binary packages or successful compilation of source, one starts the install script (./Install on Linux, or install.bat on Win32 machines). The server also installs PERL script for remote administration through a Web interface (port 1220). More information on administration of Darwin servers is available on

http://www.apple.com/quicktime/products/qtss/useradmin.html

  • Live Streaming: Basic structure, SDP files
Now, we are going to present the Open Source solution for live streaming through Darwin server focusing on i86 architecture, under Windows or Linux operating systems and Macintosh with OS X.

The solution we are going to describe is based on Multicast technology, derived as a audio/video conferencing tool over multicast servers. Unlike any other encoding technique, Multicast Tools offer unparalleled level of control, allowing audio and video streams to be encoded independently, according to quality needs and capacity of the server. The following graph describes the basic structure of creating and delivering streaming content through a Darwin server:

* Encoding Unit receives audio and video signals and decodes and sends to the destination address. The destination address consists of a combination IP number / UDP port. There are two different scenarios here:

- multicast broadcast

If the encoding unit and the Darwin server are on the same multicast channel, the encoder could send audio and video to any available multicast IP address (type 224.x.x.x) and any available UDP port. Multicast socket is then binded to the encoder itself, available for server to pull it into the broadcast.

- unicast broadcast

When encoder and the server are not on the same multicast channel, the encoder machine can send encoded content to the server through normal UDP traffic, pointing to the IP number and any available UDP port at the server.

(Note. In either case, multicast or unicast streams take 2 UDP ports per stream: 2 for audio and 2 for video!)

* SDP (Session Description Protocol File) is created in order to describe the location and the basic attributes of the stream (IP address, ports, codecs) and located in the home directory of the QuickTime server (/usr/local/movies on Linux for example).

Structure and syntax for SDP files is described in a RFC file at

http://www.ietf.org/rfc/rfc2327.txt

The bare bone structure of and SDP file could look like:

v=0
o=- 3162904348 3162905614 IN IP4 <IP_name_of_Darwin_server>
s=a
c=IN IP4 <IP_name_of_Darwin_server>
a=tool:sdr v2.4a6s2
a=type:broadcast
m=audio <audio_UDP_port> RTP/AVP 5
c=IN IP4 <IP_address for audio>
m=video <video_UDP_port> RTP/AVP 31
c=IN IP4 <IP_address for video>

* Internet users connect to the server and retrieve the SDR file, that describes connection parameters needed for the QuickTime player

* QuickTime server multiplies the connection from the encoding unit, and delivers one stream to each Internet user, not multiplying connection towards the encoder.

  • Relaying mechanism

Darwin streaming server is capable of relaying an incoming stream and resending to the other server or another port on the same server. A relay listens to an incoming broadcast (either unicast or multicast ), and forwards, or relays, that broadcast to one or more destination addresses. The destination addresses may be unicast or multicast.

Basic structure and syntax of relaying is explained at

http://www.publicsource.apple.com/projects/streaming/StreamingServerHelp/pgs/ss08a.html

An example of a relay as described in /etc/streamingrelay.conf might look like:

relay_source "in_addr=204.181.65.11 in_ports=5656 ttl=127"
relay_destination "dest_addr=204.181.65.11 dest_ports=25656 ttl=127"
relay_destination "dest_addr=226.91.45.88 out_addr=204.181.65.11 dest_ports=6956 ttl=15"

relaying stream from IP address 204.181.65.11 and port 5656 to the same IP and port 25656 and multicast address 226.91.45.88 and port 6956.

Relaying mechanism is a very convenient tool for building a tree-like structure of relays and broadcast over a network of servers, enabling local delivery and sharing bandwidth.

Unfortunately Darwin servers do not allow dynamic adding and removing of relays without the need to restart the server itself. That could present a problem in a situation of many concurrent streams, because on restart all users are disconnected and broadcast has to start again.

In order to establish dynamic relaying of streams among Darwin servers on has to use RTPTOOLS, package developed by Computer Science Department at Columbia University.

Open_Source_Streaming_Platform

Server_Side
_Darwin_Streaming_Server
_Icecast_Streaming_Server
_RTPTOOLS

Content_Production_Side
_Mbone_-_OpenMash_Tools
_Autostart_Script_VIC
_Live_Encoding_-_Mbone_Tools
_MPEG_4_IP
_MP3_Live_Streaming
_SMIL

Dynamic_Relaying_of_RTSP_Servers
_Dynamic_Relay_-_Flow
_Dynamic_Relay_-_Code
_Dynamic_Relay_&_MP3_alias

OSSA_Streaming_Protocol
_SDP_Exchange_&_Public_Keys
_Stream_Scanner

Logfile_Analyzer