python代码实时h264视频tcp发送与接收
时间: 2023-11-29 15:05:09 浏览: 248
以下是一个简单的Python程序,可以实现实时发送和接收H264视频流通过TCP。
发送端代码:
```python
import socket
import cv2
# 服务器地址和端口
TCP_IP = 'localhost'
TCP_PORT = 8000
# 创建socket连接
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
# 打开摄像头
cap = cv2.VideoCapture(0)
# 设置视频编码器
# 注意,如果出现错误,请更改为其他编码器,例如XVID
fourcc = cv2.VideoWriter_fourcc(*'H264')
# 设置视频帧大小
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))
# 创建VideoWriter对象
out = cv2.VideoWriter('output.mp4', fourcc, 20.0, (frame_width, frame_height))
while True:
# 读取一帧
ret, frame = cap.read()
# 编码为H264格式
ret, buffer = cv2.imencode('.h264', frame)
# 发送数据
s.send(buffer)
# 显示视频
cv2.imshow('frame', frame)
# 按下q退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放所有资源
cap.release()
out.release()
cv2.destroyAllWindows()
s.close()
```
接收端代码:
```python
import socket
import cv2
import numpy as np
# 监听地址和端口
TCP_IP = 'localhost'
TCP_PORT = 8000
# 创建socket连接
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
# 等待连接
conn, addr = s.accept()
# 创建VideoWriter对象
fourcc = cv2.VideoWriter_fourcc(*'H264')
out = cv2.VideoWriter('output.mp4', fourcc, 20.0, (640, 480))
while True:
# 接收数据
buffer = b''
while True:
data = conn.recv(4096)
if not data:
break
buffer += data
# 解码为图片格式
nparr = np.fromstring(buffer, np.uint8)
frame = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
# 显示视频
cv2.imshow('frame', frame)
# 写入视频文件
out.write(frame)
# 按下q退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放所有资源
out.release()
cv2.destroyAllWindows()
s.close()
```
以上代码只是一个简单的实现,实际应用中需要考虑更多的细节和错误情况,例如异常处理、缓冲区管理等。
阅读全文