mirror of
https://github.com/giorgisio/goav.git
synced 2024-04-21 12:31:56 +00:00
107 lines
3.2 KiB
Markdown
107 lines
3.2 KiB
Markdown
# Deprecation Notice
|
|
|
|
This repository is no longer maintained.
|
|
|
|
# goav
|
|
Golang binding for FFmpeg
|
|
|
|
A comprehensive binding to the ffmpeg video/audio manipulation library.
|
|
|
|
[](https://godoc.org/github.com/giorgisio/goav)
|
|
|
|
## Usage
|
|
|
|
`````go
|
|
|
|
import "github.com/giorgisio/goav/avformat"
|
|
|
|
func main() {
|
|
|
|
filename := "sample.mp4"
|
|
|
|
// Register all formats and codecs
|
|
avformat.AvRegisterAll()
|
|
|
|
ctx := avformat.AvformatAllocContext()
|
|
|
|
// Open video file
|
|
if avformat.AvformatOpenInput(&ctx, filename, nil, nil) != 0 {
|
|
log.Println("Error: Couldn't open file.")
|
|
return
|
|
}
|
|
|
|
// Retrieve stream information
|
|
if ctx.AvformatFindStreamInfo(nil) < 0 {
|
|
log.Println("Error: Couldn't find stream information.")
|
|
|
|
// Close input file and free context
|
|
ctx.AvformatCloseInput()
|
|
return
|
|
}
|
|
|
|
//...
|
|
|
|
}
|
|
`````
|
|
|
|
## Libraries
|
|
|
|
* `avcodec` corresponds to the ffmpeg library: libavcodec [provides implementation of a wider range of codecs]
|
|
* `avformat` corresponds to the ffmpeg library: libavformat [implements streaming protocols, container formats and basic I/O access]
|
|
* `avutil` corresponds to the ffmpeg library: libavutil [includes hashers, decompressors and miscellaneous utility functions]
|
|
* `avfilter` corresponds to the ffmpeg library: libavfilter [provides a mean to alter decoded Audio and Video through chain of filters]
|
|
* `avdevice` corresponds to the ffmpeg library: libavdevice [provides an abstraction to access capture and playback devices]
|
|
* `swresample` corresponds to the ffmpeg library: libswresample [implements audio mixing and resampling routines]
|
|
* `swscale` corresponds to the ffmpeg library: libswscale [implements color conversion and scaling routines]
|
|
|
|
|
|
## Installation
|
|
|
|
[FFMPEG INSTALL INSTRUCTIONS](https://github.com/FFmpeg/FFmpeg/blob/master/INSTALL.md)
|
|
|
|
``` sh
|
|
sudo apt-get -y install autoconf automake build-essential libass-dev libfreetype6-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texi2html zlib1g-dev
|
|
|
|
sudo apt install -y libavdevice-dev libavfilter-dev libswscale-dev libavcodec-dev libavformat-dev libswresample-dev libavutil-dev
|
|
|
|
sudo apt-get install yasm
|
|
|
|
export FFMPEG_ROOT=$HOME/ffmpeg
|
|
export CGO_LDFLAGS="-L$FFMPEG_ROOT/lib/ -lavcodec -lavformat -lavutil -lswscale -lswresample -lavdevice -lavfilter"
|
|
export CGO_CFLAGS="-I$FFMPEG_ROOT/include"
|
|
export LD_LIBRARY_PATH=$HOME/ffmpeg/lib
|
|
```
|
|
|
|
```
|
|
go get github.com/giorgisio/goav
|
|
|
|
```
|
|
|
|
## More Examples
|
|
|
|
Coding examples are available in the examples/ directory.
|
|
|
|
## Note
|
|
- Function names in Go are consistent with that of the libraries to help with easy search
|
|
- [cgo: Extending Go with C](http://blog.giorgis.io/cgo-examples)
|
|
- goav comes with absolutely no warranty.
|
|
|
|
## Contribute
|
|
- Fork this repo and create your own feature branch.
|
|
- Follow standard Go conventions
|
|
- Test your code.
|
|
- Create pull request
|
|
|
|
## TODO
|
|
|
|
- [ ] Returning Errors
|
|
- [ ] Garbage Collection
|
|
- [X] Review included/excluded functions from each library
|
|
- [ ] Go Tests
|
|
- [ ] Possible restructuring packages
|
|
- [x] Tutorial01.c
|
|
- [ ] More Tutorial
|
|
|
|
## License
|
|
This library is under the [MIT License](http://opensource.org/licenses/MIT)
|