当前位置:首页 > 旅游 > 正文

用Golang写个脚本,把ycc365 plus监控里的视频下载到手机,这事儿还真没那么玄乎

  • 旅游
  • 2026-07-17 09:21:13
  • 69
摘要: 说实话,我一开始接触ycc365 plus监控的时候,纯粹是被它那个“手机随时看”的功能吸引的,你懂的,家里有老人有小孩,装个摄...

说实话,我一开始接触ycc365 plus监控的时候,纯粹是被它那个“手机随时看”的功能吸引的,你懂的,家里有老人有小孩,装个摄像头图个安心,但用了一段时间就发现一个问题——我想把某些片段下载到手机本地保存,可官方App那个下载功能吧……怎么说呢,有时候点半天没反应,有时候下载下来的视频格式还不认,更别提批量导出了。

后来我寻思,能不能自己写个脚本绕开App的限制? 我本身是写Golang的,就琢磨着用Go语言试试,别一听“编程”就觉得多高大上,其实这事儿跟做菜差不多,食材(代码)准备好了,按步骤来就行,下面我就把整个过程掰开了揉碎了讲给你听,保证你看完也能明白个七七八八。

ycc365 plus监控的视频存在哪儿?

先得搞清楚一件事:ycc365 plus录下来的视频,默认是存在摄像头的MicroSD卡里,或者通过云存储传到它的服务器上,手机App查看的时候,本质上是通过API接口去拉取这些视频流,我们要做的,就是模拟App的行为,把视频流“截”下来。

我这里用的是RTSP协议,很多ycc365 plus的摄像头都支持RTSP实时流传输,你可以在摄像头的设置页面(通常是192.168.x.x这样的局域网地址)里找到“网络设置”或者“视频设置”,里面会有一个RTSP地址,长这样:

rtsp://admin:密码@摄像头IP:554/stream1

这个地址是关键,把admin后面的“密码”换成你摄像头管理员密码,“摄像头IP”换成你家摄像头的IP地址,如果不知道IP,去路由器后台看设备列表,或者用局域网扫描工具一扫就出来了。

第二步:用Golang写个视频下载小工具

有了RTSP地址,剩下的就是写代码去“拉流”了,Go语言标准库不带RTSP解析,但我们有开源库啊,我用的库叫 github.com/bluenviron/mediamtx 旗下的RTSP客户端包,其实更直接的是用 github.com/pion/rtsp 或者 github.com/deepch/RTSPtoWebRTC 之类的,我挑一个轻量的:github.com/use-go/rtsp(这个库简单粗暴)。

下面这个例子,假设你能在终端里运行Go代码,如果你没有Go环境,先去go.dev下载安装,两三分钟的事。

package main
import (
    "fmt"
    "log"
    "os"
    "os/exec"
    "github.com/use-go/rtsp"
)
func main() {
    // 这里填你摄像头的RTSP地址
    rtspURL := "rtsp://admin:你的密码@192.168.1.100:554/stream1"
    // 用FFmpeg转码并保存为本地MP4文件
    // 因为Go本身不直接编码视频,我借助了FFmpeg这个工具
    cmd := exec.Command("ffmpeg",
        "-rtsp_transport", "tcp",
        "-i", rtspURL,
        "-t", "30",  // 录制30秒
        "-c", "copy",
        "output.mp4",
    )
    err := cmd.Run()
    if err != nil {
        log.Fatal("下载失败:", err)
    }
    fmt.Println("视频已下载到当前目录的 output.mp4")
}

等一下,你可能会问:“FFmpeg是什么?” 它是个开源的音视频处理神器,几乎所有视频工具背后都有它的影子,下载地址是ffmpeg.org,选你系统对应的版本(Windows/Mac/Linux),解压后把ffmpeg.exe或者ffmpeg丢到系统PATH里,或者直接放在跟Go脚本同一个文件夹。

这段代码的工作流程很简单:

  1. Go脚本调用FFmpeg,把RTSP流作为输入。
  2. FFmpeg通过-t 30参数只取前30秒,省得下载整个大文件
  3. -c copy的意思是直接复制视频流,不重新编码,速度快且画质无损。
  4. 最后保存成output.mp4手机直接就就能播放

第三步:怎么把视频弄到手机上?

电脑上跑完脚本,得到一个MP4文件,接下来要把文件传到手机里,方法多得很

  • 最直接:用数据线连电脑,复制到手机存储。
  • 最无线:在电脑上开启一个简单HTTP服务器,比如用Python python -m http.server 8000,然后在手机浏览器输入电脑IP:8000,点开文件下载。
  • 最聪明:把脚本改一改,直接让Go脚本把视频上传到手机的某个共享文件夹,或者用SCP传到局域网NAS里,但这对新手来说有点复杂,所以我强烈推荐用HTTP服务器那个方法,简单不折腾。

我一般是在电脑上跑完脚本后,用手机浏览器访问168.1.101:8000(换你电脑IP),看到output.mp4点一下就开始下载了。整个过程不超过1分钟

一个更自动化的Golang版本(带点“智能”)

你要是觉得每次改IP和时长麻烦,可以写个交互式版本,我后来就改成了这样:

package main
import (
    "bufio"
    "fmt"
    "log"
    "os"
    "os/exec"
    "strings"
)
func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Println("=== ycc365plus 视频下载小助手 ===")
    fmt.Print("请输入RTSP地址(默认: rtsp://admin:12345@192.168.1.100:554/stream1): ")
    rtspURL, _ := reader.ReadString('\n')
    rtspURL = strings.TrimSpace(rtspURL)
    if rtspURL == "" {
        rtspURL = "rtsp://admin:12345@192.168.1.100:554/stream1"
    }
    fmt.Print("请输入录制时长(秒,默认30): ")
    durationInput, _ := reader.ReadString('\n')
    durationInput = strings.TrimSpace(durationInput)
    duration := "30"
    if durationInput != "" {
        duration = durationInput
    }
    filename := fmt.Sprintf("监控视频_%s秒_%s.mp4", duration, "片段")
    cmd := exec.Command("ffmpeg",
        "-rtsp_transport", "tcp",
        "-i", rtspURL,
        "-t", duration,
        "-c", "copy",
        filename,
    )
    fmt.Printf("正在从 %s 下载视频...\n", rtspURL)
    err := cmd.Run()
    if err != nil {
        log.Fatal("下载失败:", err)
    }
    fmt.Printf("下载完成!文件名为: %s\n", filename)
    fmt.Println("现在可以用手机访问电脑的HTTP服务器来下载这个文件了。")
}

把这个脚本编译成可执行文件(go build),扔U盘里或者放桌面,每次想下载ycc365 plus的视频,双击运行,输入信息就完事了,比打开App翻半天菜单快多了。

一些你可能遇到的坑和解决办法

  • RTSP地址连不上? 先去摄像头管理页面看看是不是开启了RTSP功能,有些型号默认是关闭的,需要手动打开。确保电脑和摄像头在同一个局域网
  • FFmpeg报错找不到文件? 把你FFmpeg的路径写全,或者复制到脚本同目录下。
  • 下载下来的视频只有音频没有画面? 有些摄像头的RTSP流分主码流和子码流。stream1一般是主码流,stream2是子码流。试试把地址最后的stream1改成stream2
  • 录制时间太长文件太大? 可以用-t 60限制60秒,或者用-fs 100M限制文件大小为100MB。

你真的需要写代码吗?

其实吧,对于完全不懂技术的用户,我更推荐直接用手机App里的“回放”功能,然后屏幕录制,虽然画质会打折扣,但胜在0门槛,但如果你想要原始画质、批量下载、自动命名,那写个Golang脚本就是目前性价比最高的办法了,Go语言编译出来就是个独立的exe文件,连环境都不需要装。

我后来甚至把这个脚本改成了一个带简单Web界面的工具,在浏览器里填IP和时长,点击下载,直接弹出文件。但那是另一个故事了,对于大多数人来说,上面那个命令行版本已经够用了。

反正ycc365 plus的开发者可能也没想到,会有人用Golang去绕开他们的App下载视频吧,但技术嘛,本来就是拿来解决问题的,你如果也会点Go,可以试试自己加功能,比如定时录制、上传到云盘什么的。

下载完视频,手机里又多了一份安心,家里猫狗的动态、老人活动的片段,存着比看着踏实

用Golang写个脚本,把ycc365 plus监控里的视频下载到手机,这事儿还真没那么玄乎