Revision eb9e75ef py/scenic/streamer.py

b/py/scenic/streamer.py
42 42
        # for stats
43 43
        #TODO: add ports?
44 44
        self.session_details = None # either None or a big dict
45
        self.receiving_audio_from_peer = False
46
        self.receiving_video_from_peer = False
47
        self.sending_audio_to_peer = False
48
        self.sending_video_to_peer = False
45 49

  
46 50
    def _gather_config_to_stream(self, addr):
47 51
        """
......
168 172
            self.milhouse_recv_cmd.append('--deinterlace')
169 173

  
170 174
        # setting up
175
        self.rtcp_stats = {
176
            "send": {
177
                "video": {
178
                    "packets-lost": 0,
179
                    "jitter": 0,
180
                    "bitrate": 0,
181
                    "connected": False
182
                },
183
                "audio": {
184
                    "packets-lost": 0,
185
                    "jitter": 0,
186
                    "bitrate": 0,
187
                    "connected": False
188
                }
189
            },
190
            "receive": {
191
                "video": {
192
                    "connected": False
193
                },
194
                "audio": {
195
                    "connected": False
196
                }
197
            }
198
        }
199

  
171 200
        recv_cmd = " ".join(self.milhouse_recv_cmd)
172 201
        self.receiver = process.ProcessManager(command=recv_cmd, identifier="receiver")
173 202
        self.receiver.state_changed_signal.connect(self.on_process_state_changed)
203
        self.receiver.stdout_line_signal.connect(self.on_receiver_stdout_line)
204
        self.receiver.stderr_line_signal.connect(self.on_receiver_stderr_line)
174 205
        send_cmd = " ".join(self.milhouse_send_cmd)
175 206
        self.sender = process.ProcessManager(command=send_cmd, identifier="sender")
176 207
        self.sender.state_changed_signal.connect(self.on_process_state_changed)
208
        self.sender.stdout_line_signal.connect(self.on_sender_stdout_line)
209
        self.sender.stderr_line_signal.connect(self.on_sender_stderr_line)
177 210
        # starting
178 211
        self._set_state(process.STATE_STARTING)
179 212
        print "$", send_cmd
......
181 214
        print "$", recv_cmd
182 215
        self.receiver.start()
183 216

  
217
    def on_receiver_stdout_line(self, line):
218
        """
219
        Handles a new line from our receiver process' stdout
220
        """
221
        if "stream connected" in line:
222
            if "audio" in line:
223
                self.rtcp_stats["receive"]["audio"]["connected"] = True
224
            elif "video" in line:
225
                self.rtcp_stats["receive"]["video"]["connected"] = True
226
        else:
227
            print "%9s stdout: %s" % (self.receiver.identifier, line)
228

  
229
    def on_receiver_stderr_line(self, line):
230
        """
231
        Handles a new line from our receiver process' stderr
232
        """
233
        print "%9s stdout: %s" % (self.receiver.identifier, line)
234
    
235
    def on_sender_stdout_line(self, line):
236
        """
237
        Handles a new line from our receiver process' stdout
238
        """
239
        print "%9s stdout: %s" % (self.sender.identifier, line)
240
        if "PACKETS-LOST" in line:
241
            if "mpeg4" in line or "theora" in line or "h263" in line or "h264" in line:
242
                self.rtcp_stats["send"]["video"]["packets-lost"] = int(line.split(":")[-1])
243
            elif "raw" in line or "mp3" in line or "vorbis" in line:
244
                self.rtcp_stats["send"]["audio"]["packets-lost"] = int(line.split(":")[-1])
245
        elif "JITTER" in line:
246
            if "mpeg4" in line or "theora" in line or "h263" in line or "h264" in line:
247
                self.rtcp_stats["send"]["video"]["jitter"] = int(line.split(":")[-1])
248
            elif "raw" in line or "mp3" in line or "vorbis" in line:
249
                self.rtcp_stats["send"]["audio"]["jitter"] = int(line.split(":")[-1])
250
        elif "connected" in line:
251
            if "mpeg4" in line or "theora" in line or "h263" in line or "h264" in line:
252
                self.rtcp_stats["send"]["video"]["connected"] = True
253
            elif "raw" in line or "mp3" in line or "vorbis" in line:
254
                self.rtcp_stats["send"]["audio"]["connected"] = True
255

  
256
    def on_sender_stderr_line(self, line):
257
        """
258
        Handles a new line from our receiver process' stderr
259
        """
260
        print "%9s stderr: %s" % (self.sender.identifier, line)
261

  
184 262
    def is_busy(self):
185 263
        """
186 264
        Retuns True if a streaming session is in progress.

Also available in: Unified diff