Browse Source

Signed-off-by: Caner <5658514@qq.com>

Caner 4 years ago
parent
commit
f198518ea9
6 changed files with 218 additions and 0 deletions
  1. 48 0
      client/main.py
  2. 27 0
      client/recv.py
  3. 44 0
      client/send.py
  4. 26 0
      client/test.py
  5. 39 0
      service/comCation.py
  6. 34 0
      service/main.py

+ 48 - 0
client/main.py

@@ -0,0 +1,48 @@
+import time
+import sys
+from socket import *
+from recv import RECVSERVER
+from send import SENDSERVER
+# 服务配置
+HOST = '172.16.102.9'
+PORT = 10087
+ADDR = (HOST, PORT)
+ICED = {
+    'sdpSemantics': 'unified-plan',
+    'iceServers': [
+        {
+            'urls': 'stun:81.70.80.219:3478',
+            'username': 'admin',
+            'credential': '123456'
+        },
+        {
+            'urls': 'turn:81.70.80.219:3478',
+            'username': 'admin',
+            'credential': '123456'
+        },
+    ]
+}
+
+
+if __name__ == '__main__':
+    sock = socket(AF_INET, SOCK_STREAM)
+    data = str.encode('test')
+    state = sock.connect_ex(ADDR)
+    if state == 0:
+        print('服务器连接成功')
+        # 发送
+        sendd = SENDSERVER(sock, ICED)
+        sendd.start()
+        # 接收
+        recvd = RECVSERVER(sock, ICED)
+        recvd.start()
+    else:
+        print('服务器连接失败')
+        sys.exit(0)
+
+    while True:
+        time.sleep(1)
+        if not sendd.is_alive() or not recvd.is_alive():
+            print("Client close")
+            sys.exit(0)
+        pass

+ 27 - 0
client/recv.py

@@ -0,0 +1,27 @@
+import threading
+import time
+
+
+class RECVSERVER(threading.Thread):
+    def __init__(self, sock, config):
+        threading.Thread.__init__(self)
+        self.setDaemon(True)
+        self.sock = sock
+
+    def __del__(self):
+        self.sock.close()
+        pass
+
+    def run(self):
+        # 接收
+        while True:
+            try:
+                msg = self.sock.recv(1024)
+                if not msg:
+                    print('无数据')
+                    continue
+                else:
+                    print('接收数据', msg.decode('utf-8'), time.ctime())
+            except:
+                print('服务器断开')
+                break

+ 44 - 0
client/send.py

@@ -0,0 +1,44 @@
+import time
+import platform
+import threading
+from aiortc.contrib.media import MediaPlayer, MediaRelay
+
+
+class SENDSERVER(threading.Thread):
+    def __init__(self, sock, config):
+        threading.Thread.__init__(self)
+        self.setDaemon(True)
+        self.sock = sock
+        self.relay = None
+        self.webcam = None
+
+    def __del__(self):
+        self.sock.close()
+        pass
+
+    # 获取本地视频流
+    def create_local_tracks(self):
+        options = {"framerate": "30", "video_size": "640x480"}
+        print(options)
+        if self.relay is None:
+            if platform.system() == "Darwin":
+                self.webcam = MediaPlayer(
+                    "default:none", format="avfoundation", options=options)
+            elif platform.system() == "Windows":
+                self.webcam = MediaPlayer(
+                    "video=Integrated Camera", format="dshow", options=options)
+            else:
+                print('get video source')
+                self.webcam = MediaPlayer(
+                    "/dev/video0", format="v4l2", options=options)
+                print(self.webcam)
+            self.relay = MediaRelay()
+        return None, self.relay.subscribe(self.webcam.video)
+
+    def run(self):
+        data = str.encode('test111')
+        audio, video = self.create_local_tracks()
+        while True:
+            self.sock.sendall(video)
+            print('发送', data)
+            time.sleep(1)

+ 26 - 0
client/test.py

@@ -0,0 +1,26 @@
+from socket import *
+import time
+
+# 服务配置
+HOST = '127.0.0.1'
+PORT = 6969
+ADDR = (HOST, PORT)
+
+
+if __name__ == '__main__':
+    sock = socket(AF_INET, SOCK_STREAM)
+    state = sock.connect_ex(ADDR)
+    data = str.encode('{"type":"conctrl","data":2222}')
+    if state == 0:
+        print('服务器连接成功')
+        # 初始化视频
+        while True:
+            try:
+                sock.sendall(data)
+                print('发送数据', data)
+            except:
+                print('服务器断开')
+                break
+            time.sleep(1)
+    else:
+        print('服务器连接失败')

+ 39 - 0
service/comCation.py

@@ -0,0 +1,39 @@
+import threading
+import time
+
+
+class ComCationServer(threading.Thread):
+    def __init__(self, client, userList):
+        threading.Thread.__init__(self)
+        self.setDaemon(True)
+        self.client = client
+        self.userList = userList
+
+    def __del__(self):
+        if self.client in self.userList:
+            self.userList.remove(self.client)
+        self.client.close()
+
+    def run(self):
+        db = str.encode('服务器收到')
+        while True:
+            try:
+                msg = self.client.recv(1024)
+                if not msg:
+                    self.userList.remove(self.client)
+                    self.client.close()
+                    print('clinet exit1:', len(self.userList))
+                    break
+                # 去除自己,客户端大于1才转发
+                for c in self.userList:
+                    if c != self.client:
+                        # print('转发')
+                        c.sendall(msg)
+                # self.client.sendall(db)
+                print('客户信息', msg, time.ctime())
+                time.sleep(1)
+            except:
+                self.userList.remove(self.client)
+                self.client.close()
+                print('client exit2:', len(self.userList))
+                break

+ 34 - 0
service/main.py

@@ -0,0 +1,34 @@
+from socket import *
+from time import ctime
+from comCation import ComCationServer
+# 服务配置
+HOST = '172.16.102.9'
+PORT = 10087
+ADDR = (HOST, PORT)
+userList = []
+
+
+def loopServer(SOCK):
+    # 服务监听
+    global userList
+    while True:
+        print('Waiting For Client Connection ...', ctime())
+        client, addr = SOCK.accept()  # 会阻塞
+        print('NewUser', addr, ctime())
+        # 增加线程
+        if client not in userList and len(userList) < 2:
+            userList.append(client)
+            # 接收
+            newClinet = ComCationServer(client, userList)
+            newClinet.start()
+        else:
+            # 不允许连接
+            print('不允许连接')
+            client.close()
+
+
+if __name__ == '__main__':
+    SOCK = socket(AF_INET, SOCK_STREAM)
+    SOCK.bind(ADDR)
+    SOCK.listen(1)
+    loopServer(SOCK)