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()
Source: Examples/example4/MulticastStreamingServer.py
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()
Source: Examples/example4/MulticastStreamingClient.py
|