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

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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))


以上是关于2023-02-18:ffmpeg是c编写的音视频编解码库,请问用go语言如何调用?例子是03输出版本号。的主要内容,如果未能解决你的问题,请参考以下文章

如何用 FFmpeg 编写一个简单播放器详

2022年音视频面试题 C/C++/Linux/FFmpeg/webRTC/rtmp/hls/rtsp/ffplay/srs

FFmpeg简单转码程序--视频剪辑

基于FFMPEG的音视频截取(C++Qt 版)

基于FFMPEG的音视频截取(C++Qt 版)

FFmpeg 视频处理命令备忘