python 解码rtsp 在视频上画个矩形,在推流出去
时间: 2023-06-01 09:03:13 浏览: 98
RTMP推流RTSP视频
使用OpenCV库可以实现解码rtsp视频流并在视频上画矩形的功能,然后使用FFmpeg库将处理后的视频推流出去。具体步骤如下:
1. 安装OpenCV和FFmpeg库
在Python环境下安装OpenCV和FFmpeg库,可以使用pip命令进行安装:
```
pip install opencv-python
pip install ffmpeg-python
```
2. 解码rtsp视频流并画矩形
使用OpenCV库的VideoCapture类可以从rtsp视频流中读取帧,使用rectangle函数可以在视频帧上画矩形,示例代码如下:
```python
import cv2
cap = cv2.VideoCapture("rtsp://example.com/stream") # rtsp视频流地址
while True:
ret, frame = cap.read() # 读取视频帧
if not ret:
break
cv2.rectangle(frame, (100, 100), (200, 200), (0, 0, 255), 2) # 画矩形
cv2.imshow("frame", frame) # 显示视频帧
if cv2.waitKey(1) == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
```
3. 推流处理后的视频
使用FFmpeg库可以将处理后的视频推流出去,示例代码如下:
```python
import ffmpeg
in_filename = "input.mp4" # 处理后的视频文件名
out_filename = "rtmp://example.com/live/stream" # 推流地址
input_stream = ffmpeg.input(in_filename)
output_stream = ffmpeg.output(input_stream, out_filename, vcodec="copy")
ffmpeg.run(output_stream)
```
注意,推流地址需要根据实际情况修改。完整代码如下:
```python
import cv2
import ffmpeg
cap = cv2.VideoCapture("rtsp://example.com/stream") # rtsp视频流地址
out_filename = "rtmp://example.com/live/stream" # 推流地址
out_width, out_height = 1280, 720 # 输出视频的宽高
out_fps = 30 # 输出视频的帧率
out_format = "flv" # 输出视频的格式
# FFmpeg命令行参数
ffmpeg_args = [
"-y",
"-f", "rawvideo",
"-pix_fmt", "bgr24",
"-s", "{}x{}".format(out_width, out_height),
"-r", str(out_fps),
"-i", "-",
"-vcodec", "libx264",
"-pix_fmt", "yuv420p",
"-preset", "ultrafast",
"-f", out_format,
out_filename
]
process = (
ffmpeg
.input("pipe:", format="rawvideo", pix_fmt="bgr24", s="{}x{}".format(out_width, out_height))
.output(out_filename, vcodec="copy")
.overwrite_output()
.run_async(pipe_stdin=True)
)
while True:
ret, frame = cap.read() # 读取视频帧
if not ret:
break
cv2.rectangle(frame, (100, 100), (200, 200), (0, 0, 255), 2) # 画矩形
process.stdin.write(frame.tostring()) # 写入处理后的视频帧
cv2.imshow("frame", frame) # 显示视频帧
if cv2.waitKey(1) == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
process.stdin.close()
process.wait()
```
阅读全文