暂时不放代码
socket通信问题,我的是python服务器socket传输视频流数据,java客户端接收数据,问java怎么实现视频流实时显示
# -*- codeing = utf-8 -*-
# @Time : 2021/11/8 8:13
# @Author : slience_me
# @File : demo1.py
# @Software : demo
# - * - coding: utf - 8 -*-
import socket
import threading
import time
import sys
from io import BytesIO
import cv2
from PIL import Image
def socket_service():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 防止socket server重启后端口被占用(socket.error: [Errno 98] Address already in use)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('127.0.0.1', 9000))
s.listen(10)
except socket.error as msg:
print(msg)
sys.exit(1)
print('Waiting connection...')
while 1:
conn, addr = s.accept()
t = threading.Thread(target=deal_data, args=(conn, addr))
t.start()
def deal_data(conn, addr):
cap = cv2.VideoCapture(0)
print('Accept new connection from {0}'.format(addr))
conn.send(('Hi, Welcome to the server!').encode('utf-8'))
while 1:
ret, frame = cap.read()
# cv2.imshow("server", frame)
print(ret)
if ret is False:
print("can not get this frame")
continue
# 将opencv下的图像转换为PIL支持的格式
pi = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
buf = BytesIO() # 缓存对象
pi.save(buf, format='JPEG') # 将PIL下的图像压缩成jpeg格式,存入buf中
jpeg = buf.getvalue() # 从buf中读出jpeg格式的图像
buf.close()
# 上面全是信息编码的,将每一次的信息编码之后通过for循环中send发送出去
# print(jpeg)
conn.send(jpeg) # 通过socket传到服务器
# data = conn.recv(1024)
# print('{0} client send data is {1}'.format(addr, data.decode()))
time.sleep(1)
# if data == 'exit' or not data:
# print('{0} connection close'.format(addr))
# conn.send(bytes('Connection closed!'), 'UTF-8')
# break
# result = Syntax_analysis(data)
# conn.send((str(data)).encode('utf-8')) # TypeError: a bytes-like object is required, not 'str'
conn.close()
cap.release()
if __name__ == '__main__':
socket_service()
cv2.destroyAllWindows()