Chromium Code Reviews| Index: chrome/test/data/webrtc/wsh/webrtc_write_wsh.py |
| diff --git a/chrome/test/data/webrtc/wsh/webrtc_write_wsh.py b/chrome/test/data/webrtc/wsh/webrtc_write_wsh.py |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..84c94e456cf59f33ef3bb40f3e60518d2498b395 |
| --- /dev/null |
| +++ b/chrome/test/data/webrtc/wsh/webrtc_write_wsh.py |
| @@ -0,0 +1,76 @@ |
| +# Copyright (c) 2012 The Chromium Authors. All rights reserved. |
|
kjellander_chromium
2014/04/07 14:59:58
I assume this is an exact copy of the file that wa
phoglund_chromium
2014/04/08 09:29:00
Yes.
|
| +# Use of this source code is governed by a BSD-style license that can be |
| +# found in the LICENSE file. |
| +# |
| +# This module is handler for incoming data to the pywebsocket standalone server |
| +# (source is in http://code.google.com/p/pywebsocket/source/browse/trunk/src/). |
| +# It follows the conventions of the pywebsocket server and in our case receives |
| +# and stores incoming frames to disk. |
| + |
| +import Queue |
| +import os |
| +import sys |
| +import threading |
| + |
| +_NUMBER_OF_WRITER_THREADS = 10 |
| + |
| +_HOME_ENV_NAME = 'HOMEPATH' if 'win32' == sys.platform else 'HOME' |
| +_WORKING_DIR = os.path.join(os.environ[_HOME_ENV_NAME], 'webrtc_video_quality') |
|
kjellander_chromium
2014/04/07 14:59:58
It would be great if you could create a temporary
phoglund_chromium
2014/04/08 09:29:00
I completely agree.
|
| + |
| +# I couldn't think of other way to handle this but through a global variable |
| +g_frame_number_counter = 0 |
| +g_frames_queue = Queue.Queue() |
| + |
| + |
| +def web_socket_do_extra_handshake(request): |
| + pass # Always accept. |
| + |
| + |
| +def web_socket_transfer_data(request): |
| + while True: |
| + data = request.ws_stream.receive_message() |
| + if data is None: |
| + return |
| + |
| + # We assume we will receive only frames, i.e. binary data |
| + global g_frame_number_counter |
| + frame_number = str(g_frame_number_counter) |
| + g_frame_number_counter += 1 |
| + g_frames_queue.put((frame_number, data)) |
| + |
| + |
| +class FrameWriterThread(threading.Thread): |
| + """Writes received frames to disk. |
| + |
| + The frames are named in the format frame_xxxx, where xxxx is the 0-padded |
| + frame number. The frames and their numbers are obtained from a synchronized |
| + queue. The frames are written in the directory specified by _WORKING_DIR. |
| + """ |
| + def __init__(self, queue): |
| + threading.Thread.__init__(self) |
| + self._queue = queue |
| + |
| + def run(self): |
| + while True: |
| + frame_number, frame_data = self._queue.get() |
| + file_name = 'frame_' + frame_number.zfill(4) |
| + file_name = os.path.join(_WORKING_DIR, file_name) |
| + frame = open(file_name, "wb") |
| + frame.write(frame_data) |
| + frame.close() |
| + self._queue.task_done() |
| + |
| + |
| +def start_threads(): |
| + for i in range(_NUMBER_OF_WRITER_THREADS): |
| + t = FrameWriterThread(g_frames_queue) |
| + t.setDaemon(True) |
| + t.start() |
| + g_frames_queue.join() |
| + |
| + |
| +# This handler's entire code is imported as 'it is' and then incorporated in the |
| +# code of the standalone pywebsocket server. If we put this start_threads() call |
| +# inside a if __name__ == '__main__' clause it wouldn't run this code at all |
| +# (tested). |
| +start_threads() |