环境
- python 3.11.8
- opencv-python == 4.9.0.80
- numpy == 1.26.4
通过rtsp协议拉流
有一个问题就是如果要同时拉流保存与同时保存最近1分钟视频的需求,会触发一个问题。当写入视频的时候同时读取回抛错。目前是采取每10秒钟保存视频的方式保存。
而且有个采用opencv拼接视频效率并不高
如果是采用opencv读取视频后转存为另一部视频时在cv2.waitkey(1000 // 帧率),不然会出现另存的视频播放速度快的问题
import datetime
import math
import os
import cv2
import time
username = 'username'
password = 'password'
ip = '192.168.1.101'
# 显示的视频分辨率
show_width = 1600
show_height = 800
# 保存的视频分辨率
save_width = 1920
save_height = 1080
# 每个厂商的视频流地址不一定相同,示例使用的海康威视的摄像头
url = f'rtsp://{
username}:{
password}@{
ip}/Stream2'
# url = f'rtsp://{username}:{password}@{ip}/Streaming/channels/1'
# 通过rtsp协议获取码流数据
cap = cv2.VideoCapture(url)
# 获取视频分辨率与帧率
old_width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
old_height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
old_fps = cap.get(cv2.CAP_PROP_FPS)
print(f'{
old_width}@{
old_height} {
old_fps}')
# 设置视频保存的编码格式
fourcc = cv2.VideoWriter.fourcc(*'mp4v')
# 保存视频播放倍率
play_speed = 1.0
play_interval = int</