These streaming modules are currently supported:
In pull-based streaming, each peer exchanges chunk availability bitmaps with each neighbor. Based on received bitmaps, peers request chunks from neighbors.
In StreamAID, all pull-based modules can be constructed using ingredients. An ingredient is an encapsulated logic that handles a single aspect of the operation of the module.
<streamingModule algorithm="PullAlgorithm" size="200"> <overlayModule H="200" M="4" c="1" amountToSend="6" exploreRound="30" gossipTimeout="6" algorithm="CoolStreamingOverlay"> <ingredient name="NeighborChunkAvailabilityIngredient" operationMode="updateEveryRound"/> </overlayModule > <ingredient name="ServerPushIngredient"/> <ingredient name="EarliestContinuousChunkVSInitIngredient" maxOffset="0"/> <ingredient name="HandleChunkRequestsOnArrivalIngredient"/> <ingredient name="CoolstreamingChunkReuqestIngredient"/> </streamingModule >
Coolstreaming is built using the following ingredients:
PullAlgorithm receives a single overlay module. [overlay modules]
Notice that the NeighborChunkAvailabilityIngredient is added to the overlay module.
There is an alias to the aforementioned ingredients
<streamingModule algorithm="CoolStreaming" maxInitOffset="0" sourcePush="true" size="300"> <overlayModule H="10" L="4" S="12" algorithm="AraneolaOverlay" amountToSend="3" connect_timeout="2" disconnect_timeout="2" gossipDelay="6"/> </streamingModule>
Coolstreaming receives a single overlay module. [overlay modules]
Chainsaw is similar to Coolstreaming, but uses a different chunk request ingredient:
<streamingModule algorithm="PullAlgorithm" size="200"> <overlayModule H="200" M="2" c="1" amountToSend="6" exploreRound="30" gossipTimeout="6" algorithm="CoolStreamingOverlay"> <ingredient name="NeighborChunkAvailabilityIngredient" operationMode="updateEveryRound"/> </overlayModule > <ingredient name="EarliestContinuousChunkVSInitIngredient" maxOffset="0"/> <ingredient name="HandleChunkRequestsOnArrivalIngredient"/> <ingredient name="ChainsawChunkRequestIngredient"/> </streamingModule >
There is an alias to the aforementioned ingredients:
<streamingModule algorithm="Chainsaw" maxInitOffset="0" sourcePush="true" size="300"> <overlayModule H="10" L="4" S="12" algorithm="AraneolaOverlay" amountToSend="3" connect_timeout="2" disconnect_timeout="2" gossipDelay="6"/> </streamingModule>
Pulse is a group-based pull-streaming based on the paper: PULSE: an adaptive, incentive-based, unstructured P2P live streaming system. PULSE streaming module can also be built using only ingredients:
<streamingModule algorithm="PullAlgorithm" size="200"> <overlayModule algorithm="PulseOverlay" c="1" missing="4" forward="4" epoch="30"/> <ingredient name="NeighborChunkAvailabilityIngredient" operationMode="updateEveryRound"/> </overlayModule > <ingredient name="EarliestContinuousChunkVSInitIngredient" maxOffset="0"/> <ingredient name="HandleChunkRequestsSentAscendingIngredient"/> <ingredient name="PulseChunkRequestIngredient" requestFromNodeLimit="3" /> </streamingModule >
requestFromNodeLimit
is the maximum amount of chunks that can be requested from a single node in a cycle.In PushTree, the source node waits for chunks to become available and then sends chunks to each child.
Every node that receives content from its parent node immediately forwards the content to its children.
<streamingModule algorithm="PushTree"> <overlayModule algorithm="TreeBoneOverlay" stableCoefficient="0.3" queryTimeout="3" /> </streamingModule >
PushTree receives a single tree overlay module. [overlay modules]
PushPullAlgorithm is a general protocol that uses a push streaming module for disseminating messages in the normal case together with a fallback option to use a pull streaming module if the main overlay is not connected.
<streamingModule algorithm="PushPullAlgorithm" > <streamingModule algorithm="CoolStreaming" serverPush="false"> <overlayModule H="10" L="4" S="12" algorithm="AraneolaOverlay" amountToSend="3" connect_timeout="2" disconnect_timeout="2" gossipDelay="6"/> </streamingModule> <overlayModule algorithm="TreeBoneOverlay" stableCoefficient="0.3" queryTimeout="3" freeSlots="1"/> </streamingModule>
PushPullAlgorithm receives one streamingModule and one overlayModule to be used as the overlay of the push module. [overlay modules]
A generic multi-tree based streaming module that uses a multi-tree overlay. PushMultipleSubstreamTree divides the video stream into substreams and disseminates each substream on a different tree. the trees are defined by the overlay module.
<streamingModule algorithm="PushMultipleSubstreamTree" sendMissingChunks="true" > <overlayModule clubsForPeer="2" clubs="6" algorithm="BittorrentLiveOverlay" minInClubDownload="2" maxInClubDownload="3" fatherDropTimeout="0" /> </streamingModule>
PushMultipleSubstreamTree receives a single multi-tree overlay module. [overlay modules]
A generic multi-tree based streaming module that uses a multi-tree overlay. PushMultipleDescriptionTree simulates multi=description encoding that divides the video stream into descriptions and disseminates each descriptions on a different tree. the trees are defined by the overlay module.
<streamingModule algorithm="PushMultipleDescriptionTree" > <overlayModule clubsForPeer="2" clubs="6" algorithm="BittorrentLiveOverlay" minInClubDownload="2" maxInClubDownload="3" fatherDropTimeout="0" /> </streamingModule>
PushMultipleDescriptionTree receives a single multi-tree overlay module. [overlay modules]