先说说ycc365和存储卡这回事
说实话,我第一次拿到ycc365摄像头的时候,也压根没搞明白怎么调取存储卡里的视频,它不像手机相册那样直接点开就能看,需要走点“弯路”,但摸清楚规律以后,其实也就是几个步骤的事儿,我这人就喜欢边写代码边琢磨,正好用Golang写了几个小工具,顺便把整个过程理得明明白白。
ycc365存储卡视频的存储逻辑
ycc365摄像头默认录制的视频,会按照时间片段保存在存储卡里,通常是每段1分钟或者3分钟,具体看你设置,文件名一般长这样:
REC_20250314_143025.mp4
这串数字代表的是 年月日_时分秒,也就是说,2025年3月14日14点30分25秒开始的视频段。

摄像头内部其实跑的是一个轻量级Linux系统,存储卡的文件系统一般是 FAT32 或者 exFAT,你用Golang的os包读它,完全没问题。
怎么在ycc365里看存储卡视频——手动方法
先别急着用Golang,你得先确保摄像头本身能正常播放,步骤不复杂:
- 打开ycc365的官方App(或者你用的兼容App)
- 进入设备列表,点击你的摄像头
- 在画面底部找到 “回放” 或者 “录像” 图标(有时候是个小日历)
- 选择 “存储卡” 模式
- 滑动时间轴,找到你想看的那个时间段
- 点播放——完事
如果你发现回放里面是空的,先检查俩地方:
- 存储卡是不是格式化成FAT32了?(很多摄像头不支持NTFS)
- 摄像头是不是开启了“全天录像”或者“事件录像”?没开的话卡里是空的
常见问题:为什么App里找不到存储卡视频?
| 问题现象 | 可能原因 | 解决办法 |
|---|---|---|
| 回放界面显示“无录像” | 存储卡未格式化 | 在App设置里格式化存储卡 |
| 时间轴一片空白 | 录像计划没开 | 进入设置,开启“连续录像” |
| 视频播放卡顿 | 存储卡速度太慢 | 换一张Class10或以上的卡 |
| 文件损坏 | 不正常断电 | 用电脑读取,尝试修复 |
用Golang自己写一个“存储卡视频浏览器”
别笑,我还真写过,因为有时候App卡得要命,不如直接把存储卡插电脑上,用程序读出来,下面是我写的一个简化版代码,加了注释,边写边想那种感觉。
package main
import (
"fmt"
"io/ioutil"
"path/filepath"
"strings"
"time"
)
func main() {
// 这是存储卡挂载的路径,Windows一般是D:或E:
cardPath := "E:\\DCIM" // 很多摄像头会把视频放在DCIM文件夹下
// 先读取所有文件
files, err := ioutil.ReadDir(cardPath)
if err != nil {
fmt.Println("读卡失败:", err)
return
}
fmt.Printf("发现 %d 个文件或文件夹\n", len(files))
// 过滤出MP4文件
var videoFiles []string
for _, f := range files {
if !f.IsDir() && strings.HasSuffix(strings.ToLower(f.Name()), ".mp4") {
videoFiles = append(videoFiles, f.Name())
}
}
fmt.Printf("其中视频文件有 %d 个\n", len(videoFiles))
// 按文件名排序(其实就是按时间排序)
// 因为文件名就是REC_YYYYMMDD_HHMMSS.mp4格式
// 我们直接按字符串排序就行
// 打印前5个文件名
limit := 5
if len(videoFiles) < limit {
limit = len(videoFiles)
}
for i := 0; i < limit; i++ {
fmt.Println(videoFiles[i])
}
}
这代码特别糙,但能用,跑完之后你会发现,所有视频文件都列出来了。
进阶:按时间范围筛选视频
我加了个时间筛选功能,比如我只想看 2025年3月14日下午2点到3点 之间的视频。
func filterByTime(files []string, start time.Time, end time.Time) []string {
var result []string
for _, name := range files {
// 从文件名里提取时间信息
// 假设文件名是 REC_20250314_143025.mp4
parts := strings.Split(name, "_")
if len(parts) < 3 {
continue
}
datePart := parts[1] // 20250314
timePart := parts[2] // 143025
// 解析时间
timeStr := datePart + timePart[:6] // 去掉.mp4
t, err := time.Parse("20060102150405", timeStr)
if err != nil {
continue
}
if t.After(start) && t.Before(end) {
result = append(result, name)
}
}
return result
}
用法很简单:
startTime := time.Date(2025, 3, 14, 14, 0, 0, 0, time.Local) endTime := time.Date(2025, 3, 14, 15, 0, 0, 0, time.Local) videos := filterByTime(videoFiles, startTime, endTime)
这样你就能精确找出某个时间段的所有视频片段,不用在全天录像里慢慢翻了。
关于文件格式和播放的小秘密
ycc365录的视频,大部分是 H.264 编码的MP4文件,你用Windows自带的“电影和电视”或者VLC都能打开,但如果用Golang直接读二进制流,你会发现文件头部有厂商自定义的metadata,不影响播放,但程序读取时要注意跳过。
如果你遇到播放卡顿或者花屏,大概率是:
- 存储卡写入速度跟不上(换个高速卡)
- 摄像头在录制时被断电了(文件不完整)
- 你偷偷用Golang程序直接改了文件内容(别问我怎么知道的)
写一个简单的视频信息读取器
type VideoInfo struct {
FileName string
FileSize int64
RecTime time.Time
Duration int // 秒
}
func getVideoInfo(filePath string) (VideoInfo, error) {
info := VideoInfo{}
baseName := filepath.Base(filePath)
// 解析文件名
parts := strings.Split(baseName, "_")
if len(parts) >= 3 {
timeStr := parts[1] + parts[2][:6]
t, err := time.Parse("20060102150405", timeStr)
if err == nil {
info.RecTime = t
}
}
// 获取文件大小
stat, err := os.Stat(filePath)
if err == nil {
info.FileSize = stat.Size()
}
info.FileName = baseName
// 大多数摄像头每段视频是60秒或180秒,我们直接假设60秒
// 更精确的做法是用ffprobe工具,但这里就不展开了
info.Duration = 60
return info, nil
}
这个结构体跑一遍,你就知道自己卡里有多少视频、每个多大、什么时候录的。
如果你想把视频合并成一个大文件
这个方法我折腾过,因为ycc365会把视频切成很多小段,你想看连续1小时的内容,得一个个点,用Golang可以简单拼接,但要注意编码参数必须一致。
拼接方法(纯文件级别,不涉及重新编码):
func mergeFiles(fileList []string, outputPath string) error {
outFile, err := os.Create(outputPath)
if err != nil {
return err
}
defer outFile.Close()
for _, f := range fileList {
data, err := ioutil.ReadFile(f)
if err != nil {
return err
}
_, err = outFile.Write(data)
if err != nil {
return err
}
}
return nil
}
但说句实话,直接拼接MP4文件可能会出问题,因为MP4文件有moov box之类的元数据结构,直接拼接会导致播放器不认识时间轴,更好的做法是用ffmpeg的命令行工具来合并,不过咱这是Golang文章,我点到为止。
最后说点实在的
用Golang读ycc365的存储卡视频,本质上就是读文件、解文件名、筛选、播放,摄像头只是把视频写进卡里,跟普通U盘差不多,你只要掌握文件名里的时间规律,就能自己写程序调取任何你想要的那段视频。
我写的那些代码,有的跑得通,有的跑一半就崩了——这就是真实写程序的样子,但改改总能用,你如果自己尝试,建议先从手动在App里看开始,实在觉得App太蠢(确实有这个可能),再把卡插电脑上跑跑Golang程序。
毕竟,能自己写工具看监控视频,比把卡拔来拔去爽多了。
本文来自作者[kyadmin]投稿,不代表be365立场,如若转载,请注明出处:http://www.hljbesthome.com/fnagchan/1351.html
评论列表(4条)
我是be365的签约作者“kyadmin”!
希望本篇文章《用Golang写一篇关于ycc365怎么看存储卡里的视频的实用指南》能对你有所帮助!
本站[be365]内容主要涵盖:be365,be365网站,be365网址,ball365体育,Be365排名
本文概览:先说说ycc365和存储卡这回事说实话,我第一次拿到ycc365摄像头的时候,也压根没搞明白怎么调取存储卡里的视频,它不像手机相册那...