Hi there 👋

Welcome to my blog

Go截取视频某一帧图片

前言 最近遇到一个需求,需要截取视频的某一帧图片作为视频封面。我搜寻了相关资料,在 go 语言端常见的有两种做法,1)使用 opencv 的 go 绑定库,2)使用 ffmpeg 的 go 绑定库。 这里我打算使用第二种方法,使用 ffmpeg 的 go 绑定库。 ffmpeg 介绍 FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。 FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。 FFmpeg项目由以下几部分组成: FFMpeg 视频文件转换命令行工具,也支持经过实时电视卡抓取和编码成视频文件。 FFServer 基于HTTP(RTSP正在开发中)用于实时广播的多媒体服务器,也支持时间平移. FFplay 用SDL和FFmpeg库开发的一个简单的媒体播放器. libavcodec 一个包含了所有FFmpeg音视频编解码器的库.为了保证最优性能和高可复用性,大多数编解码器从头开发的. libavformat 一个包含了所有的普通音视格式的解析器和产生器的库 解决 1 安装 ffmpeg 浏览器访问 https://ffbinaries.com/downloads 根据你的系统安装 ffmpeg 2 安装 ffmpeg 的 go 绑定库 这里我使用了 github.com/u2takey/ffmpeg-go 这个项目,它是一个绑定库,可以在 go 语言端使用 ffmpeg 命令行工具。 3 编写代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 package main import ( "bytes" "fmt" "github....

May 28, 2022 · 2 min · overstarry

Go errgroup

我们知道在 go 语言中很容易开启携程进行并发任务, 但是如何处理并发过程中的错误是非常棘手的,接下来我就来介绍 errgroup 的用法。 errgroup errgroup 包里主要是一个结构体和相应的方法,它可以让你在并发任务中处理错误。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 type Group struct { // context 的 cancel 方法 cancel func() // 复用 WaitGroup wg sync.WaitGroup sem chan token // 用来保证只会接受一次错误 errOnce sync.Once // 保存第一个返回的错误 err error } func WithContext(ctx context....

May 21, 2022 · 2 min · overstarry

应用内存升高原因排查

起因 最近一个部署了 go 应用的服务器出现了 OOM 的现象,内存占用过高。 原因 通过 Pyroscope 分析得出是因为 Minio 的 go sdk 中的 PutObject 函数占用了大量的内存。 Pyroscope 是什么,前面的文章已经介绍过了,这里就不过多介绍了。 接下来我们通过查看相关的源码来查看是什么原因。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 // PutObject creates an object in a bucket. // // You must have WRITE permissions on a bucket to create an object....

May 14, 2022 · 3 min · overstarry

多平台博客发布工具openwrite使用

介绍 OpenWrite是一款便捷的多平台博客发布工具,可以在OpenWrite编写markdown文档,然后发布到其他博客平台,目前已经支持CSDN、SegmentFault、掘金、博客园、简书等知名平台。 使用 注册 进入 http://admin.openwrite.cn/, 注册并登陆账号。 安装浏览器插件 第一步需要安装浏览器插件, 根据这个链接教程安装,只有安装了插件,才能配置分发的平台。根据对插件的源码的分析,插件是通过 cookie、storage 等浏览器数据进行认证登陆的。此插件还包括模拟写作和 mackdown 编辑器。 认证配置渠道 安装完插件后,点击渠道管理,可以看到可配置的平台,支持多个平台。相应的平台如果没有登陆则显示未登陆,这时需要你登陆相应的平台。 登陆平台后,点击认证,即可配置渠道。 这里以掘金为例,认证成功后,可以进行相应的配置,配置文章分类和标题。 发布文章 点击文章管理界面,添加文章,添加文章后,可以选择配置的平台,并发布到相应的平台。 普通用户一个月只有 10 次机会,一个平台占用一次机会。

May 7, 2022 · 1 min · overstarry

Buf初入门2

上文讲了 Buf lint 命令的基础方法,本文将介绍 Buf lint 命令的一些常用配置。 如果你的项目中没有 buf.yaml 配置文件, Buf lint 会提供一个默认的配置文件,默认内容如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 version: v1 lint: use: - DEFAULT except: - FILE_LOWER_SNAKE_CASE ignore: - bat - ban/ban.proto ignore_only: ENUM_PASCAL_CASE: - foo/foo.proto - bar BASIC: - foo enum_zero_value_suffix: _UNSPECIFIED rpc_allow_same_request_response: false rpc_allow_google_protobuf_empty_requests: false rpc_allow_google_protobuf_empty_responses: false service_suffix: Service allow_comment_ignores: true 配置选项 接下来开始介绍 Buf lint 命令的配置选项。...

May 4, 2022 · 1 min · overstarry