关于一个摄像头的需求,求大佬指点

2024-07-12 15:00:24 +08:00
 V392920

现在有这样一个需求,需要开发一个程序,写一个接口,当接口接收到请求,就需要获取摄像头当前时间-5 到+5 秒的视频

举例说明: 比如在 10:00:00 接口接收到请求,那就需要将摄像头 9:59:55~10:00:05 这 10 秒的视频保存到指定目录并推送至指定地方,并且需要在 30 秒内完成该逻辑

设备是海康威视摄像头

我尝试过的方法

1 、通过海康的 RTSP 流添加 starttime 和 endtime 来获取回放流,比如我 10:00:00 收到请求,我就拼接 rtsp 流地址 rtsp://admin:xxx@192.168.1.33:554/Streaming/101?starttime=20240712T095955Z,然后使用 ffmpeg 进行录制 10 秒,就能刚刚好保存出这个时间段的视频

发现的问题: 不知道是什么原因,我只要获取当前时间的 rtsp 流,就无法访问,经过写代码尝试,发现必须获取当前时间 2 分钟前的流,才可以访问,比如 10:00:00 接到请求,只能访问到 9:58:00 左右的回放流,我猜测是因为录像没有实时落盘的原因?

2 、集成海康 SDK 尝试,也遇到了跟 1 操作一样的问题,就是没办法实时或者说获取 10 秒内的回放,获取 1 分钟之前的回放文件可以成功,比 rtsp 稍微好一点,但是也不能满足我的需求,我在看海康文档的时候,有个刷新索引的接口,写的是设备默认 2 分钟刷新,但是我尝试了,我的摄像头提示不支持该接口

我通过官方的 App 海康互联测试,他们 App 的回放功能好像就没这么大的差距,他们的 App 能回放 30 秒内的视频

希望求大佬指点,或者有没有其他办法能实现这个需求,万分感谢

2903 次点击
所在节点    程序员
23 条回复
zhy321
2024-07-13 10:03:17 +08:00
最后怎么实现的
zreyu
2024-07-13 10:39:56 +08:00
from flask import Flask, request
import cv2
import datetime
import subprocess
import time

app = Flask(__name__)

@app.route('/capture_video', methods=['POST'])
def capture_video():
try:
# 获取当前时间
current_time = datetime.datetime.now()
start_time = (current_time - datetime.timedelta(seconds=5)).strftime('%H:%M:%S')
end_time = (current_time + datetime.timedelta(seconds=5)).strftime('%H:%M:%S')

# 摄像头 ID ,假设使用默认摄像头
camera_id = 0

# 保存视频的路径
output_path = 'captured_video.mp4'

# 使用 FFmpeg 捕获视频
ffmpeg_cmd = f'ffmpeg -y -ss {start_time} -t 10 -i /dev/video{camera_id} {output_path}'
subprocess.run(ffmpeg_cmd, shell=True, check=True)

# 推送视频到指定地方(这里假设推送到某个 URL )
push_url = 'http://example.com/upload'
push_cmd = f'curl -F "file=@{output_path}" {push_url}'
subprocess.run(push_cmd, shell=True, check=True)

return {'status': 'success', 'message': 'Video captured and pushed successfully'}
except Exception as e:
return {'status': 'error', 'message': str(e)}

if __name__ == '__main__':
app.run(debug=True)
liuxh7
2024-07-17 18:05:49 +08:00
老哥,我现在做的摄像头有个优化需求也是类似的问题,想找老哥聊下,方便加下小而美吗? aGFsbG9feGlhb2hlaQ==

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1056852

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX