RTSP播放

SKILL前端设计
前端设计 未标注权限 许可证不明确
安装这个技能

播放网络 RTSP 视频流:通过 python3 + opencv 或 ffmpeg 等工具实时播放 RTSP 流、截图帧保存为图片、多张截图合成 GIF 动图、录制片段为视频文件。支持定时截图(可设秒/分钟间隔)、带鉴权的 RTSP URL、超时处理、自动重连。触发词:RTSP、视频流、摄像头、实时视频、监控流、播放流、截图、定时截图、间隔截图、录制、GIF、动图、rtsp://

一句话选型结论

按资料字段整理

RTSP播放是前端设计类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类前端设计 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_a706bb76/xb202605
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

前端设计
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_a706bb76仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791621963
正文体量15.2 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
出页面与组件

按描述生成页面结构和组件草稿。

调整样式与布局

改间距、配色与响应式布局。

生成设计说明

把设计稿整理成开发能接的说明。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在前端设计场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
RTSP播放当前 未标注权限 未标注 未标注 未标注 有
前端设计 只读 GitHub 仓库 882.3 万 Codex、Claude、Cursor 有
Vercel 组合模式 联网访问 GitHub 仓库 385.9 万 Codex、Claude、Cursor 有
Vercel React native skills 前端 只读 GitHub 仓库 246.9 万 Codex、Claude、Cursor 有
adapt 搜索 浏览器控制 GitHub 仓库 202.7 万 Codex、Claude、Cursor 有
使用我的浏览器 浏览器控制 GitHub 仓库 184.8 万 Codex、Claude、Cursor 有

SKILL.md 全文

15.2 KB
模型实际读到的说明书原文,来自技能仓库

RTSP 视频流播放器

播放网络 RTSP 视频流并支持实时画面查看、截图保存、录制片段。优先使用 python3 + opencv-python(通过 exec(action="acquire", package="opencv-python") 按需安装),备选 ffmpeg。

何时使用

  • 用户要求播放 RTSP 网络视频流(例如 rtsp://192.168.1.100:554/stream1)。
  • 用户要求查看 IP 摄像头/监控设备的实时画面。
  • 用户要求从视频流中截取一帧保存为图片(降级场景)。
  • 用户要求录制 RTSP 流的一段视频保存到本地。
  • 用户要求检测 RTSP 流是否可用/在线。
  • 用户要求定时/周期截图,例如「每5秒截一张图」「每30秒截图」「每5分钟截一张」。
  • 用户要求将多张截图合成为 GIF 动图,例如「把截图做成动图」「转成 GIF」「输出 GIF」。

何时不用

  • 播放本地视频文件(.mp4、.avi 等)→ 使用 media-processing 技能。
  • 视频格式转换或编辑 → 使用 media-processing 技能(ffmpeg)。
  • 网络摄像头 USB 设备本地调用 → 使用 desktop + 摄像头驱动。
  • 图片/图像处理 → 使用 image-processing 技能。

可用能力

步骤 工具
Python OpenCV 播放/截图 exec(command="python3 -c '...'")(先 acquire opencv-python)
定时连续截图(自定义秒/分钟间隔) exec(command="python3 -c '...'")(先 acquire opencv-python)
多张截图合成 GIF 动图 exec(command="python3 -c '...'")(先 acquire opencv-python + Pillow)
ffmpeg 播放/录制 exec(command="ffmpeg -i rtsp://... output.mp4")(ffmpeg 需已安装)
流可用性检测 exec(command="timeout 5 ffprobe rtsp://...")
分析 RTSP URL 和截图间隔参数 think(text="...")

知识

RTSP URL 格式

rtsp://[username:password@]host[:port]/path
  • 无鉴权: rtsp://192.168.1.100:554/stream1
  • 带鉴权: rtsp://admin:password@192.168.1.100:554/h264/ch1/main/av_stream
  • 默认端口为 554,可省略
  • 常见摄像头路径后缀因品牌而异:/live、/stream1、/h264/ch1/main/av_stream

能力路径优先级

最佳路径(优先尝试)→ python3 + opencv-python:
- 先执行 exec(action="acquire", package="opencv-python") 安装
- 通过 cv2.VideoCapture(rtsp_url) 打开流
- 逐帧读取并处理(保存截图或逐帧显示)

备选路径 → ffmpeg:
- ffmpeg 可直接播放 RTSP 流
- ffmpeg -rtsp_transport tcp -i rtsp://...(TCP 传输更稳定)
- ffmpeg -i rtsp://... -vframes 1 output.jpg(截图一帧)

RTSP 传输协议

传输方式 特点 适用场景
UDP(默认) 延迟低,易丢包 局域网,网络质量好
TCP 可靠传输,延迟稍高 跨网络,网络不稳定
HTTP 隧道 穿透防火墙 受限网络环境

建议:跨网络环境始终使用 TCP 传输(-rtsp_transport tcp 参数)。

opencv-python 关键参数

cap = cv2.VideoCapture("rtsp://admin:pass@192.168.1.100:554/stream1")
cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)       # 减小缓冲,降低延迟
cap.set(cv2.CAP_PROP_FPS, 30)             # 设置帧率
ret, frame = cap.read()                   # 读取一帧
if ret:
    cv2.imwrite("snapshot.jpg", frame)    # 保存截图

定时截图参数说明

用户可通过自然语言指定截图间隔,支持的单位:

用户说法 转换 代码实现
"每5秒"、"每隔5秒" interval=5 秒 time.sleep(5)
"每30秒"、"半分钟一次" interval=30 秒 time.sleep(30)
"每1分钟"、"每分钟" interval=60 秒 time.sleep(60)
"每5分钟"、"5分钟一次" interval=300 秒 time.sleep(300)

核心代码模式:

import cv2, time, os
interval = 5  # 用户指定的间隔(秒)
total = 10    # 总截图次数(可选,不设则持续直到超时)
count = 0

cap = cv2.VideoCapture(url)
while True:
    ret, frame = cap.read()
    if ret:
        path = f"snapshot_{int(time.time())}.jpg"
        cv2.imwrite(path, frame)
        count += 1
        print(f"第{count}张: {path}")
    if total and count >= total:
        break
    time.sleep(interval)
cap.release()

截图合成 GIF 动图

Pillow(已预装)可将多张截图合成为 GIF 动图。支持参数:

参数 说明 默认值
duration 每帧停留时间(毫秒) 500(即 0.5 秒/帧)
loop 循环次数,0=无限循环 0
fps 用户说"每秒几帧"时的换算:duration = 1000/fps -

核心代码模式:

from PIL import Image
import glob

frames = []
# 按文件名排序,确保 GIF 帧顺序正确
images = sorted(glob.glob("snapshot_*.jpg"))
for f in images:
    im = Image.open(f)
    frames.append(im.copy())
    im.close()

# 合成 GIF,duration 单位毫秒
frames[0].save(
    "rtsp_animation.gif",
    save_all=True,
    append_images=frames[1:],
    duration=500,     # 每帧 0.5 秒
    loop=0            # 无限循环
)

> 注意:GIF 文件全部由 Pillow 处理,与 ffmpeg 无关。Pillow 已预装,但若遇到 unknown file extension: .gif 错误,需重新安装带 GIF 编码支持的 Pillow:exec(action="acquire", package="Pillow")。若截图数量过多(>100张),建议提高 duration 或只取部分帧合成,避免 GIF 文件过大。

场景示例

场景 1:查看 RTSP 流并截图保存(推荐路径)

用户要求:「帮我查看摄像头 rtsp://192.168.1.100:554/stream1 的画面。」

# 安装 opencv-python
exec(action="acquire", package="opencv-python")

# 用 OpenCV 打开 RTSP 流并截图
exec(command="python3 -c \"
import cv2
cap = cv2.VideoCapture('rtsp://192.168.1.100:554/stream1')
cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
ret, frame = cap.read()
if ret:
    cv2.imwrite('rtsp_snapshot.jpg', frame)
    print('截图保存成功: rtsp_snapshot.jpg')
else:
    print('无法读取 RTSP 流')
cap.release()
\"")

场景 2:使用 ffmpeg 录制 RTSP 片段

用户要求:「录制摄像头 rtsp://admin:pass@camera.example.com:554/live 的 10 秒片段。」

exec(command="ffmpeg -rtsp_transport tcp -i 'rtsp://admin:pass@camera.example.com:554/live' -t 10 -c copy rtsp_clip.mp4")

输出:录制完成,文件为 rtsp_clip.mp4。

场景 3:检测 RTSP 流可用性

用户要求:「检查 rtsp://192.168.1.100:554/stream1 这个摄像头是否在线。」

exec(command="timeout 10 ffprobe -v quiet -print_format json -show_streams 'rtsp://192.168.1.100:554/stream1' 2>&1 || echo 'UNAVAILABLE'")

如果输出包含 codec_type 等流信息,说明摄像头在线;否则显示 UNAVAILABLE。

场景 4:降级 - 没有 opencv 和 ffmpeg 时,提示安装引导

用户要求:「播放这个 RTSP 流 rtsp://192.168.1.100:554/stream1。」

exec(action="acquire", package="opencv-python")

若 acquire 失败(如沙箱无网络),回复用户:
> 当前环境不支持实时播放 RTSP 视频流。建议:
> 1. 使用 VLC 播放器(vlc rtsp://...)在本地播放
> 2. 让管理员在数字员工平台上安装 ffmpeg 后重试

场景 6:定时截图并合成 GIF 动图

用户要求:「每3秒截一张摄像头画面,截5张,然后做成 GIF 动图。」

# 安装 opencv-python(如未安装)
exec(action="acquire", package="opencv-python")

# 定时截图:每3秒截一张,共5张
exec(command="python3 -c \"
import cv2, time, os

url = 'rtsp://admin:pass@192.168.1.100:554/stream1'
os.environ['OPENCV_FFMPEG_CAPTURE_OPTIONS'] = 'rtsp_transport;tcp'

cap = cv2.VideoCapture(url, cv2.CAP_FFMPEG)
cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)

interval = 3
total = 5
count = 0

for i in range(total):
    ret, frame = cap.read()
    if ret:
        ts = int(time.time())
        path = f'snapshot_{ts}.jpg'
        cv2.imwrite(path, frame)
        count += 1
        print(f'第{count}张: {path}')
    else:
        print(f'第{i+1}次: 读取失败')
    time.sleep(interval)

cap.release()
print(f'截图完成: 共{count}张')
\"")

# 将截图合成 GIF 动图
exec(command="python3 -c \"
from PIL import Image
import glob

images = sorted(glob.glob('snapshot_*.jpg'))
if not images:
    print('没有找到截图文件')
else:
    frames = []
    for f in images:
        im = Image.open(f)
        frames.append(im.copy())
        im.close()

    gif_path = 'rtsp_animation.gif'
    frames[0].save(
        gif_path,
        save_all=True,
        append_images=frames[1:],
        duration=500,    # 每帧0.5秒
        loop=0
    )
    print(f'GIF 生成成功: {gif_path}')
    print(f'帧数: {len(frames)}, 文件大小: {__import__(\"os\").path.getsize(gif_path)//1024}KB')
\"")

用户要求参考:「截10张,每5秒一张,做成每帧0.2秒的 GIF」→ interval=5, total=10, duration=200

用户要求:「每隔5秒截一张摄像头画面,截10张。」

# 安装 opencv-python(如未安装)
exec(action="acquire", package="opencv-python")

# 定时截图:每5秒截一张,共10张
exec(command="python3 -c \"
import cv2, time, os

url = 'rtsp://admin:pass@192.168.1.100:554/stream1'
os.environ['OPENCV_FFMPEG_CAPTURE_OPTIONS'] = 'rtsp_transport;tcp'

cap = cv2.VideoCapture(url, cv2.CAP_FFMPEG)
cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)

interval = 5   # 间隔秒数
total = 10     # 截图张数
count = 0

for i in range(total):
    ret, frame = cap.read()
    if ret:
        ts = int(time.time())
        path = f'snapshot_{ts}.jpg'
        cv2.imwrite(path, frame)
        count += 1
        print(f'第{count}张: {path} ({frame.shape[1]}x{frame.shape[0]})')
    else:
        print(f'第{i+1}次: 读取失败')
    time.sleep(interval)

cap.release()
print(f'完成: 共截图{count}张,间隔{interval}秒')
\"")

用户要求参考:「帮我每30秒截一次摄像头画面」→ 将 interval 改为 30
用户要求参考:「每5分钟截一张,截1小时」→ interval=300, total=12

约束

  • 不存储或输出用户提供的 RTSP 鉴权凭据。 密码部分应保持安全处理。
  • 不通过 browser 或 read 工具访问 RTSP URL(它们是应用层协议,不支持 RTSP)。
  • 优先使用 TCP 传输模式(-rtsp_transport tcp)提高稳定性。
  • 截图的图片文件保存在当前工作目录并告知用户路径。
  • 长时录制需设置合理的超时时间(默认 -t 30 限制30秒),避免无限阻塞。
  • 不猜测 RTSP 地址。格式存疑时要求用户提供完整 URL(包括端口和路径)。

异常场景

现象 可能原因 处理方式
cv2.error: OpenCV(4.x) ... Failed to parse rtsp:// URL 格式错误 检查 URL 是否有拼写错误或缺失端口/路径
Connection refused 摄像头未开机或地址错误 确认设备在线,检查 IP 和端口
Unauthorized 鉴权凭据错误 检查用户名密码
Timeout 网络不通或设备离线 检查网络连通性,使用 TCP 传输重试
ModuleNotFoundError: cv2 opencv-python 未安装 执行 exec(action="acquire", package="opencv-python")
[rtsp @ ...] method DESCRIBE failed: 401 Unauthorized ffmpeg 鉴权失败 确认 URL 中用户名密码是否正确
Stream ended unexpectedly 摄像头主动断流 重建连接,可设置自动重试机制
画面卡顿/花屏 网络带宽不足 建议降低分辨率或切换到 TCP 模式
定时截图中途某帧读取失败 瞬断/网络抖动 跳过该帧,继续下一个间隔,不中断整个任务
用户指定的间隔小于1秒 参数不合理 下限为1秒,小于1秒按1秒处理
用户说"持续截图直到停止"(未指定张数) 无限循环风险 设定默认总时长上限(如30分钟),或让用户明确指定张数/时长
GIF 合成时没有找到截图文件 截图步骤失败或文件被删除 先检查 .jpg 截图文件是否存在,仅用已有帧合成
GIF 文件过大(>50MB) 截图数量多或分辨率高 建议降低帧数(每隔一张取一张)、提高 duration、或降低分辨率
Pillow import 失败 Pillow 未安装 执行 exec(action="acquire", package="Pillow") 安装

降级策略

条件 降级方案
opencv-python 无法安装(沙箱无网络) 尝试使用 ffmpeg 方案;若 ffmpeg 也不可用,告知用户使用本地 VLC 播放
opencv-python 安装成功但 cv2.VideoCapture 无法打开流 尝试使用 rtsp_transport 参数切换传输协议(UDP ↔ TCP)
ffmpeg 未安装 引导到 exec(action="acquire", package="ffmpeg") 或提示管理员安装
实时播放不可行(无显示器/GUI环境) 降级为截图保存一帧为图片,或定时连续截图保存为图片序列
定时截图任务用户未指定张数(可能无限循环) 设默认上限:total=60 张,或 max_duration=1800 秒(30分钟),并向用户说明
定时截图中某帧失败 跳过该帧继续,不中断整个任务;统计成功/失败比告知用户
网络不稳定导致频繁断流 设置自动重连循环(最多 3 次),每次等待 2 秒
RTSP 流长时间无响应(超时) 设定 timeout=15 秒的执行超时,超时后告知用户设备可能离线
所有播放方案均失败 输出详细的错误分析报告,告知用户可能的故障原因和排查方向
Pillow 未安装导致无法合成 GIF 执行 exec(action="acquire", package="Pillow")" 安装
GIF 合成时截图文件不足(<2张) 告知用户至少需要2张截图才能合成 GIF,建议先执行定时截图

验证闭环

操作 验证方式
单次截图保存 检查截图文件是否生成(ls -la snapshot.jpg)且大小 > 0
定时连续截图 检查生成的截图数量是否匹配用户要求的张数,文件名含时间戳
截图合成 GIF 检查 rtsp_animation.gif 文件存在且大小 > 0;通过 Pillow 确认帧数
录制视频 检查输出文件是否存在,通过 ffprobe 确认文件有效
流可用性检测 ffprobe 返回码为 0 且输出了流信息
opencv-python 安装 exec(command=&quot;python3 -c &#x27;import cv2; print(cv2.__version__)&#x27;&quot;) 输出版本号

常见问题

5 问
答案由本站依据条目字段整理
RTSP播放怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_a706bb76/xb202605。安装方式为未标注。装完刷新技能列表或重开客户端。

RTSP播放支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

RTSP播放权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

RTSP播放收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

RTSP播放用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。