• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

golang 使用ffmpeg获取rtsp流截图,并生成缩略图

武飞扬头像
lj907722644
帮助1

golang 使用ffmpeg获取rtsp流截图,并生成缩略图

  1. golang 调用命令公共方法

    func CallCommandRun(cmdName string, args []string) (string, error) {
    	cmd := exec.Command(cmdName, args...)
    	fmt.Println("CallCommand Run 参数=> ", args)
    	fmt.Println("CallCommand Run 执行命令=> ", cmd)
    	bytes, err := cmd.Output()
    	if err != nil {
    		fmt.Println("CallCommand Run 出错了.....", err.Error())
    		fmt.Println(err)
    		return "", err
    	}
    	resp := string(bytes)
    	fmt.Println(resp)
    	fmt.Println("CallCommand Run 调用完成.....")
    	return resp, nil
    }
    
  2. golang直接使用命令调用ffmpeg 获取rtsp码流截图

    • ffmpeg命令

      ./ffmpeg -rtsp_transport tcp -timeout 10000000 -y -i rtsp://username:password@ip:554/chID=00000001-0000-0000-0000-000000000000 -ss 00:00:01 -vframes 1 -f image2 -vcodec png image.png
      
    • go 程序取流截图

      // 根据URL调用ffmpeg 获取截图
      func GetIpcScreenShot(ffmpegPath string, url string, screenShotPath string) string {
      	var params []string
      	params = append(params, "-rtsp_transport")
      	params = append(params, "tcp")
      	params = append(params, "-timeout")
      	// 10s
      	params = append(params, "10000000")
      	params = append(params, "-y")
      	params = append(params, "-i")
      	params = append(params, url)
      	params = append(params, "-ss")
      	params = append(params, "00:00:02")
      	params = append(params, "-vframes")
      	params = append(params, "1")
      	params = append(params, "-f")
      	params = append(params, "image2")
      	params = append(params, "-vcodec")
      	params = append(params, "png")
      	params = append(params, screenShotPath)
      
      	resp, err := CallCommandRun(ffmpegPath, params)
      	if err != nil {
      		fmt.Println(err.Error())
      		fmt.Println("获取截图出错,url为--->", url)
      	}
      	return resp
      }
      
      学新通
  3. 使用imaging包将第二步获取的截图生成缩略图

    github.com/disintegration/imaging
    
    // 将截图生成缩略图
    func GetThumbnail(screenShotPath string) error {
    	src, err := imaging.Open(screenShotPath)
    	if err != nil {
    		fmt.Println("生成缩略图,打开截图文件失败--->", err)
    		return err
    	}
    
    	// 220 * 140 宽220px, 高140px
    	dsc := imaging.Resize(src, 220, 140, imaging.Lanczos)
    	err = imaging.Save(dsc, screenShotPath)
    	if err != nil {
    		fmt.Println("生成缩略图失败--->", err)
    		return err
    	}
    	return nil
    }
    
    学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfbiah
系列文章
更多 icon
同类精品
更多 icon
继续加载