August'24: Kamaelia is in maintenance mode and will recieve periodic updates, about twice a year, primarily targeted around Python 3 and ecosystem compatibility. PRs are always welcome. Latest Release: 1.14.32 (2024/3/24)
Cookbook Example
How can I...?
Example 4: Building a very simplistic multicast based streaming system using ogg vorbis. This time using 2 separate scripts. Components used in server script:component, ReadFileAdaptor, Multicast_transceiver. Components used in client script: component, Multicast_transceiver, detuple (defined in the example), VorbisDecode, AOAudioPlaybackAdaptor.
#!/usr/bin/python
from Kamaelia.ReadFileAdaptor import ReadFileAdaptor
from Kamaelia.Internet.Multicast_transceiver import Multicast_transceiver
from Kamaelia.Util.PipelineComponent import pipeline
= "/usr/share/wesnoth/music/wesnoth-1.ogg"
file_to_stream
pipeline(="bitrate", bitrate=400000, chunkrate=50),
ReadFileAdaptor(file_to_stream, readmode"0.0.0.0", 0, "224.168.2.9", 1600),
Multicast_transceiver( ).run()
#!/usr/bin/python
import Axon
= "/usr/share/wesnoth/music/wesnoth-1.ogg"
file_to_stream
def tests():
from Axon.Scheduler import scheduler
import Kamaelia.ReadFileAdaptor
from Kamaelia.Internet.Multicast_transceiver import Multicast_transceiver
class testComponent(Axon.Component.component):
def main(self):
= Kamaelia.ReadFileAdaptor.ReadFileAdaptor(file_to_stream,
source ="bitrate",
readmode=400000,
bitrate=50)
chunkrate= Multicast_transceiver("0.0.0.0", 0, "224.168.2.9", 1600)
sender self.link((source,"outbox"), (sender,"inbox"))
self.addChildren(source, sender)
yield Axon.Ipc.newComponent(*(self.children))
while 1:
yield 1
= testComponent()
harness
harness.activate()=0)
scheduler.run.runThreads(slowmo
if __name__=="__main__":
tests()
Source: Examples/example4/MulticastStreamingServer.py
#!/usr/bin/python
from Axon.Component import component
from Kamaelia.vorbisDecodeComponent import VorbisDecode, AOAudioPlaybackAdaptor
from Kamaelia.Internet.Multicast_transceiver import Multicast_transceiver
from Kamaelia.Util.PipelineComponent import pipeline
class detuple(component):
def __init__(self, index):
super(detuple, self).__init__()
self.index = index
def main(self):
while 1:
if self.dataReady("inbox"):
tuple=self.recv("inbox")
self.send(tuple[self.index], "outbox")
yield 1
# Client
pipeline("0.0.0.0", 1600, "224.168.2.9", 0),
Multicast_transceiver(1),
detuple(
VorbisDecode(),
AOAudioPlaybackAdaptor(), ).run()
#!/usr/bin/python
import Axon
class detuple(Axon.Component.component):
def __init__(self, index):
super(detuple,self).__init__()
self.index = index
def main(self):
while 1:
if self.dataReady("inbox"):
tuple=self.recv("inbox")
self.send(tuple[self.index], "outbox")
yield 1
def tests():
from Axon.Scheduler import scheduler
import Kamaelia.ReadFileAdaptor
from Kamaelia.vorbisDecodeComponent import VorbisDecode, AOAudioPlaybackAdaptor
from Kamaelia.Internet.Multicast_transceiver import Multicast_transceiver
class testComponent(Axon.Component.component):
def main(self):
= Multicast_transceiver("0.0.0.0", 1600, "224.168.2.9", 0)
receiver = detuple(1)
detupler = VorbisDecode()
decoder = AOAudioPlaybackAdaptor()
player
self.link((receiver,"outbox"), (detupler,"inbox"))
self.link((detupler,"outbox"), (decoder,"inbox"))
self.link((decoder,"outbox"), (player,"inbox"))
self.addChildren(receiver, detupler, decoder, player)
yield Axon.Ipc.newComponent(*(self.children))
while 1:
yield 1
= testComponent()
harness
harness.activate()=0)
scheduler.run.runThreads(slowmo
if __name__=="__main__":
tests()
Source: Examples/example4/MulticastStreamingClient.py