[telepathy-butterfly/master] Signal stream state changes

Louis-Francis Ratté-Boulianne louis-francis.ratte-boulianne at collabora.co.uk
Thu Sep 10 06:48:10 PDT 2009


---
 butterfly/channel/media.py         |    3 ++
 butterfly/media/session_handler.py |    4 +++
 butterfly/media/stream_handler.py  |   51 ++++++++++++++++++++++++-----------
 3 files changed, 42 insertions(+), 16 deletions(-)

diff --git a/butterfly/channel/media.py b/butterfly/channel/media.py
index c1c2cae..84fa4c9 100644
--- a/butterfly/channel/media.py
+++ b/butterfly/channel/media.py
@@ -123,6 +123,9 @@ class ButterflyMediaChannel(
         self.StreamDirectionChanged(handler.id, handler.direction,
                 handler.pending_send)
 
+    def on_stream_state_changed(self, id, state):
+        self.StreamStateChanged(id, state)
+
     @async
     def __add_initial_participants(self):
         self.MembersChanged('', [self._handle], [], [], [],
diff --git a/butterfly/media/session_handler.py b/butterfly/media/session_handler.py
index 23e95a4..2a9cd47 100644
--- a/butterfly/media/session_handler.py
+++ b/butterfly/media/session_handler.py
@@ -33,6 +33,7 @@ __all__ = ['ButterflySessionHandler']
 class ButterflySessionHandler (telepathy.server.MediaSessionHandler):
     def __init__(self, connection, channel, session, handle):
         self._conn = connection
+        self._channel = channel
         self._session = session
         self._handle = handle
         self._stream_handlers = {}
@@ -87,3 +88,6 @@ class ButterflySessionHandler (telepathy.server.MediaSessionHandler):
 
     def RemoveStream(self, id):
         pass
+
+    def on_stream_state_changed(self, id, state):
+        self._channel.on_stream_state_changed(id, state)
diff --git a/butterfly/media/stream_handler.py b/butterfly/media/stream_handler.py
index 1580d64..7d64d19 100644
--- a/butterfly/media/stream_handler.py
+++ b/butterfly/media/stream_handler.py
@@ -95,17 +95,22 @@ class ButterflyStreamHandler (
     def stun_servers(self):
         return [("64.14.48.28", dbus.UInt32(3478))]
 
-    def Ready(self, Codecs):
+    def Ready(self, codecs):
+        print "StreamReady : ", codecs
         if self._remote_candidates is not None:
             self.SetRemoteCandidateList(self._remote_candidates)
         if self._remote_codecs is not None:
             self.SetRemoteCodecs(self._remote_codecs)
+        self.SetStreamPlaying(True)
+        self.SetStreamSending(True)
         self.SetLocalCodecs(codecs)
         #if self._session is None:
         #    self._session = ButterflyWebcamSession(self._conn, self._handle.contact)
 
-    def StreamState(self, State):
-        print "StreamState : ", State
+    def StreamState(self, state):
+        print "StreamState : ", state
+        self._state = state
+        self._session.on_stream_state_changed(self.id, state)
 
     def Error(self, code, message):
         print "StreamError - %i - %s" % (code, message)
@@ -121,24 +126,26 @@ class ButterflyStreamHandler (
         self._stream.local_candidates_prepared()
 
     def NewActiveCandidatePair(self, native_id, remote_id):
+        print "New active candidate pair %s %s" % (native_id, remote_id)
+        remote_id = '1'
         self._stream.new_active_candidate_pair(native_id, remote_id)
 
-    def SetLocalCodecs(self, Codecs):
+    def SetLocalCodecs(self, codecs):
+        pass
+
+    def SupportedCodecs(self, codecs):
+        print "SupportedCodecs: ", codecs
         list = self.convert_tp_codecs(codecs)
         self._stream.set_local_codecs(list)
 
-    def SupportedCodecs(self, Codecs):
-        print "SupportedCodecs: ", Codecs
-
-    def CodecChoice(self, Codec_ID):
-        print "CodecChoice :", Codec_ID
+    def CodecChoice(self, codec_id):
+        print "CodecChoice :", codec_id
 
-    def CodecsUpdated(self, Codecs):
-        print "CodecsUpdated: ", Codecs
+    def CodecsUpdated(self, codecs):
+        print "CodecsUpdated: ", codecs
 
     #papyon.event.MediaStreamEventInterface
     def on_remote_candidates_received(self, candidates):
-        print "REMOTE CANDIDATES"
         list = self.convert_ice_candidates(candidates)
         self._remote_candidates = list
 
@@ -159,12 +166,13 @@ class ButterflyStreamHandler (
         self.Close()
 
     def convert_sdp_codec(self, codec):
-        return (codec.payload, codec.encoding, self._type, codec.bitrate, 1, {})
+        return (codec.payload, codec.encoding, self._type, codec.clockrate, 0,
+                codec.params)
 
     def convert_tp_codecs(self, codecs):
         list = []
         for codec in codecs:
-            c = papyon.sip.sdp.SDPCodec(codec[0], codec[1], codec[3])
+            c = papyon.sip.sdp.SDPCodec(codec[0], codec[1], codec[3], codec[5])
             list.append(c)
         return list
 
@@ -205,7 +213,18 @@ class ButterflyStreamHandler (
     def convert_tp_candidate(self, id, transport):
         proto = "UDP"
         priority = int(transport[6] * 65536)
-        type = "host"
+        if transport[7] == 0:
+            type = "host"
+            addr = None
+            port = None
+        elif transport[7] == 1:
+            type = "srflx"
+            addr = "192.168.1.102"
+            port = int(transport[2])
+        elif transport[7] == 2:
+            type = "relay"
+            addr = None
+            port = None
         return papyon.sip.ice.ICECandidate(19, id, int(transport[0]), proto, priority,
                 transport[8], transport[9], type, transport[1],
-                int(transport[2]))
+                int(transport[2]), addr, port)
-- 
1.5.6.5




More information about the telepathy-commits mailing list