Menu

streaming modules

Alex Libov

These streaming modules are currently supported:

Pull-based streaming

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.

Coolstreaming
<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:

  • EarliestContinuousChunkVSInitIngredient - When the player is initialized after receiving a bitmap, there are several possible playback starting positions. This parameterized ingredient starts the playback at most maxOffset chunks before the most recent available chunk reported in the bitmap.
  • HandleChunkRequestsOnArrivalIngredient - this ingredient handles chunk requests. it handles then on a FIFO basis.
  • CoolstreamingChunkReuqestIngredient - This chunk request ingredient first calculates the number of potential suppliers for each segment.The algorithm then determines the supplier of each segment by starting with those that have only one potential supplier. When multiple potential suppliers could be chosen, CoolstreamingChunkReuqestIngredient selects the one with the highest bandwidth and most ample time before the playback deadline. This algorithm is Based on a paper titled: "CoolStreaming/DONet: a data-driven overlay network for peer-to-peer live media streaming"
  • ServerPushIngredient - this is an optional ingredient (the streaming module will function correctly without it) that affects only the algorithm used by the source node. If present, the source node will push new chunks to all of its neighbors.

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

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 >
  • ChainsawChunkRequestIngredient - sends out requests randomly, but limits the amount of requests sent to each neighbor. Based on a paper titled: "Chainsaw: Eliminating trees from overlay multicast"

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

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 >
  • HandleChunkRequestsSentAscendingIngredient - sorts requests by amounts of chunks sent to requesting nodes, sends to those that received less chunks first.
  • PulseChunkRequestIngredient - uses a group-based overlay. Uses groups defined in the overlay to prioritize chunk requests. requestFromNodeLimit is the maximum amount of chunks that can be requested from a single node in a cycle.
PushTree

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

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]

PushMultipleSubstreamTree

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>
  • sendMissingChunks - if true, every cycle the node will send missing chunk to its children (only chunks that are in the substream are sent)

PushMultipleSubstreamTree receives a single multi-tree overlay module. [overlay modules]

PushMultipleDescriptionTree

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]


Related

Wiki: overlay modules

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.