python代码实时h264视频发送与接收
时间: 2023-11-29 15:05:09 浏览: 215
要实现实时H264视频的发送和接收,可以使用基于Python的FFmpeg和OpenCV库。下面是一个简单的示例代码,用于在本地发送和接收实时H264视频流。
发送端代码:
```python
import cv2
import subprocess
# 获取摄像头视频流
cap = cv2.VideoCapture(0)
# 设置视频编码器为H264
fourcc = cv2.VideoWriter_fourcc(*'H264')
# 设置输出视频文件的路径和参数
output_file = 'output.mp4'
out = cv2.VideoWriter(output_file, fourcc, 30.0, (640, 480))
# 循环读取视频帧并编码为H264格式
while True:
ret, frame = cap.read()
if not ret:
break
out.write(frame)
# 将H264流发送到远程主机
cmd = ['ffmpeg', '-re', '-i', output_file, '-vcodec', 'copy', '-f', 'mpegts', 'udp://127.0.0.1:1234']
subprocess.Popen(cmd)
# 释放资源
cap.release()
out.release()
```
接收端代码:
```python
import cv2
import subprocess
# 创建UDP监听器
cmd = ['ffmpeg', '-i', 'udp://127.0.0.1:1234', '-vcodec', 'copy', '-f', 'mpegts', '-']
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
# 循环读取视频帧并解码
while True:
# 从管道中读取H264流
raw_frame = p.stdout.read(640 * 480 * 3)
# 转换为OpenCV格式
frame = cv2.imdecode(np.frombuffer(raw_frame, dtype=np.uint8), 1)
# 在窗口中显示视频帧
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源
cv2.destroyAllWindows()
p.kill()
```
这些代码使用FFmpeg将视频流编码为H264格式,并通过UDP发送到远程主机。接收端从UDP监听器读取H264流,并使用OpenCV解码和显示视频帧。请注意,此代码仅提供了一个简单的示例,您需要根据自己的需求进行修改和优化。
阅读全文