写点什么

2023-02-18:ffmpeg 是 c 编写的音视频编解码库,请问用 go 语言如何调用?例子是 03 输出版本号。

  • 2023-02-18
    北京
  • 本文字数:715 字

    阅读完需:约 2 分钟

2023-02-18:ffmpeg是c编写的音视频编解码库,请问用go语言如何调用?例子是03输出版本号。

2023-02-18:ffmpeg 是 c 编写的音视频编解码库,请问用 go 语言如何调用?例子是 03 输出版本号。


答案 2023-02-18:


用 github.com/moonfdd/ffmpeg-go 这个库。这是我自己写的 golang 绑定 ffmpeg 库,只依赖动态链接库,不依赖头文件,接口全部是按照头文件改过来的。


这个库目前只能用在 windows 上,原因是 go 的回调函数在 c 中调用,用 syscall.NewCallBack 函数转换成 uintptr,而这个函数只支持 windows 操作系统。请各位高手提供下跨平台的 callback 转换函数,拜托了。


代码参考ffmpeg5入门教程的第三个例子输出版本号,用 golang 改写的。


用如下命令便可查看运行结果。


go run ./examples/a03get_lib_version/main.go
复制代码


代码用 golang 编写。代码如下:


package main
import ( "fmt" "os" "os/exec"
"github.com/moonfdd/ffmpeg-go/ffcommon" "github.com/moonfdd/ffmpeg-go/libavcodec" "github.com/moonfdd/ffmpeg-go/libavutil")
func main() { os.Setenv("Path", os.Getenv("Path")+";./lib") ffcommon.SetAvutilPath("./lib/avutil-56.dll") ffcommon.SetAvcodecPath("./lib/avcodec-58.dll") codecVer := libavcodec.AvcodecVersion() ver_major := (codecVer >> 16) & 0xff ver_minor := (codecVer >> 8) & 0xff ver_micro := (codecVer) & 0xff fmt.Printf("FFmpeg version is: %s .\navcodec version is: %d=%d.%d.%d.\n", libavutil.FFMPEG_VERSION, codecVer, ver_major, ver_minor, ver_micro)
fmt.Println("---------------------------------") data, err := exec.Command("./lib/ffmpeg", "-version").Output() if err != nil { fmt.Println("ffmpeg err = ", err) } fmt.Println(string(data))}
复制代码



发布于: 刚刚阅读数: 2
用户头像

还未添加个人签名 2021-02-15 加入

还未添加个人简介

评论

发布
暂无评论
2023-02-18:ffmpeg是c编写的音视频编解码库,请问用go语言如何调用?例子是03输出版本号。_golang_福大大架构师每日一题_InfoQ写作社区