python代码实时h264视频发送与接收
时间: 2023-11-29 21:05:09 浏览: 16
发送端代码:
```python
import cv2
import socket
import struct
import pickle
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('127.0.0.1', 8000))
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90]
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
result, frame = cv2.imencode('.jpg', frame, encode_param)
data = pickle.dumps(frame, 0)
size = len(data)
client_socket.sendall(struct.pack(">L", size) + data)
cap.release()
```
接收端代码:
```python
import cv2
import socket
import struct
import pickle
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', 8000))
server_socket.listen(10)
connection, address = server_socket.accept()
data = b''
payload_size = struct.calcsize(">L")
while True:
while len(data) < payload_size:
data += connection.recv(4096)
packed_size = data[:payload_size]
data = data[payload_size:]
msg_size = struct.unpack(">L", packed_size)[0]
while len(data) < msg_size:
data += connection.recv(4096)
frame_data = data[:msg_size]
data = data[msg_size:]
frame = pickle.loads(frame_data, fix_imports=True, encoding="bytes")
frame = cv2.imdecode(frame, cv2.IMREAD_COLOR)
cv2.imshow('frame', frame)
cv2.waitKey(1)
cv2.destroyAllWindows()
connection.close()
server_socket.close()
```
在运行时需要先启动接收端代码,再启动发送端代码。如果要发送到远程主机上,只需要将 `client_socket.connect(('127.0.0.1', 8000))` 中的 IP 地址改为目标主机的 IP 地址即可。