forked from ceronman/pixtream
-
Notifications
You must be signed in to change notification settings - Fork 0
lzpfmh/pixtream
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
PIXTREAM P2P Streaming System. Introduction ============================================================================== Pixtream is a P2P program similar to Bittorrent designed to be used with live streaming content. Pixtream takes a live stream from a source and splits it into several chunks that are then sent to different peers in the network. A peer can download and upload chunks from several other peers, the program takes the chunks and reconstruct them into a stream. The goal of Pixtream is to distribute the upload bandwidth usage among all the peers in the network. Avoiding the bandwidth bottleneck commonly found in client-server streaming systems. Currently, Pixtream is in an early stage of development. Pixtream can create a very simple P2P network and transmit a stream over it, but a lot of features are missing right now. Pixtream is a work in progress. How it works ============================================================================== A Pixtream system has various separated components: - Streaming source - Tracker - Source peer - Regular peer The streaming source can be any streaming server or multimedia file. Currently PIXTREAM only supports HTTP streams, TCP streams and file sources. In the future more stream soucers will be supported. The Tracker is very similar to a Bittorrent tracker. It's used to bootstrap the P2P network. Peers connect to the tracker to get information about the stream distributed and a list of other peers to exchange information with. The Pixtream tracker is based on the HTTP protocol and uses JSON as its information exchange format. The source peer is a special type of peer that receives a media stream directly from the streaming source. The source peer takes that stream and splits it into chunks to be distributed among the p2p network. A regular peer creates connections with other peers and requests chunks of data from them. The chunks can be requested to the source peer or any other peer. A peer takes the chunks and organize them to reconstruct the original stream as received by the source peer. The original reconstructed stream is streamed again by the peer so that a media player could be used to reproduce the media. Usage ============================================================================== To create a Pixtream P2P network you need to have at least a streaming source, a tracker and a source peer. Streaming source ------------------------------------------------------------------------------ Pixtream currently supports three types of streaming source: HTTP, TCP and File. An HTTP streaming source could be any HTTP streaming server. You can also create simple TCP streams using netcat. For example: $ nc -l -p 3000 < mediafile.ogg Tracker ------------------------------------------------------------------------------ The tracker program can be found in the bin directory of the Pixtream source distribution. Usage: tracker [options] Options: -h, --help show this help message and exit -p PORT, --port=PORT -p PORT, --port=PORT Listening Port -i INTERVAL, --interval=INTERVAL Interval in seconds for peers to make requests Example: $ tracker -p 8080 -i 10 Source peer ------------------------------------------------------------------------------ A source peer should connect to the tracker and the streaming source. The source peer program can be found in the bin directory of the Pixtream source distribution: Usage: peersource [options] tracker_url source_type source Options: -h, --help show this help message and exit -i ADDRESS, --ip=ADDRESS IP Address to use -p PORT, --port=PORT Listening Port -s PORT, --streaming-port=PORT Listening Port for the streaming output Examples: Using a HTTP streaming server as a streaming source: $ peersource http://tracker.com http http://source.com:8080 Using a file a streaming source: $ peersource http://tracker.com file /var/song.mp3 Using a TCP stream as a streaming source: $ peersource http://tracker.com tcp 192.168.1.10:30000 Regular peer ------------------------------------------------------------------------------ A regular peer should connect to the tracker. There should be at least one source peer in the network currently. Usage: usage: peer [options] tracker_url Options: -h, --help show this help message and exit -i ADDRESS, --ip=ADDRESS IP Address to use -p PORT, --port=PORT Listening Port -s PORT, --streaming-port=PORT Listening Port for the streaming output Example: $ peer -p 60001 -s 30001 http://localhost:8080 Playing the media ------------------------------------------------------------------------------- Each peer provides a streaming port where the reconstructed stream can be accessed by a media player. You can play the media with any media player with server support. Simple example with gstreamer: $ gst-launch-0.10 tcpclientsrc host=127.0.0.1 port=30001 ! decodebin ! audioconvert ! alsasink Using the launcher script ------------------------------------------------------------------------------ The Pixtream source distribution has a launcher script used for testing purposes. The script can used to launch a streaming source, tracker, source peer and several regular peers. The script is located in tests/manualtests/launchpeers.py in the Pixtream source distribution. The launcher requires Netcat and Trickle (http://monkey.org/~marius/pages/?page=trickle) Usage: Usage: launchpeers.py [options] numpeers mediafile Options: -h, --help show this help message and exit -t PORT, --tracker-port=PORT Port to use with the tracker -i INTERVAL, --tracker-interval=INTERVAL Interval of the tracker checks in seconds -p PORT, --start-peer-port=PORT Starting listening port for the peers -s PORT, --start-streaming-port=PORT Starting listening port for streaming -r RATE, --media-server-rate=RATE Media server upload rate in KB/s -m PORT, --media-server-port=PORT Media server listening port Example: $ ./launchpeers.py -t 8080 -i 30 -p 60000 -s 30000 -r 50 -m 3000 10 test.ogg This will launch a Netcat streaming server on port 3000 sending information at 50 KB/s maximum. It will launch a tracker listening on port 8080 with an interval of 30 seconds. It will launch a source peer listening on port 60000 for peer communication and retransmitting the reconstructed stream on port 30000. It will launch 10 peers listening on ports from 60001 to 60010 and retransmitting from 30001 to 30010. The script has some default values. Other way to call it would be: $ ./launchpeers.py 10 test.ogg The outputs of each process would be saved in a file *.output. For example the output for first peer would be peer0.output.
About
Prototype for a P2P streaming system
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published