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.
Server Script, the easy way
#!/usr/bin/python
from Kamaelia.ReadFileAdaptor import ReadFileAdaptor
from Kamaelia.Internet.Multicast_transceiver import Multicast_transceiver
from Kamaelia.Util.PipelineComponent import pipeline
file_to_stream = "/usr/share/wesnoth/music/wesnoth-1.ogg"
pipeline(
ReadFileAdaptor(file_to_stream, readmode="bitrate", bitrate=400000, chunkrate=50),
Multicast_transceiver("0.0.0.0", 0, "224.168.2.9", 1600),
).run()
Server Script, the hard way (but exactly equivalent)
#!/usr/bin/python
import Axon
file_to_stream = "/usr/share/wesnoth/music/wesnoth-1.ogg"
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):
source = Kamaelia.ReadFileAdaptor.ReadFileAdaptor(file_to_stream,
readmode="bitrate",
bitrate=400000,
chunkrate=50)
sender = Multicast_transceiver("0.0.0.0", 0, "224.168.2.9", 1600)
self.link((source,"outbox"), (sender,"inbox"))
self.addChildren(source, sender)
yield Axon.Ipc.newComponent(*(self.children))
while 1:
yield 1
harness = testComponent()
harness.activate()
scheduler.run.runThreads(slowmo=0)
if __name__=="__main__":
tests()
Client Script
#!/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(
Multicast_transceiver("0.0.0.0", 1600, "224.168.2.9", 0),
detuple(1),
VorbisDecode(),
AOAudioPlaybackAdaptor(),
).run()
Client Script, the hard way (but exactly equivalent)
#!/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):
receiver = Multicast_transceiver("0.0.0.0", 1600, "224.168.2.9", 0)
detupler = detuple(1)
decoder = VorbisDecode()
player = AOAudioPlaybackAdaptor()
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
harness = testComponent()
harness.activate()
scheduler.run.runThreads(slowmo=0)
if __name__=="__main__":
tests()
(C) 2006 Kamaelia Contributors, including the British Broadcasting Corporation, All Rights Reserved, This is an ongoing community based development site. As a result the contents of this page is the opinions of the contributors of the pages involved not the organisations involved. Specificially, this page may contain personal views which are not the views of the BBC.