Go bindings for GStreamer (retired: currently I don't use/develop this package)

Retired. I don't use/develop this package anymore.

Go bindings for GStreamer at a very early stage of maturity.

This package is based on GLib bindings. It should be goinstalable. Try

$ go get github.com/ziutek/gst

Documentation

See examples directory and http://gopkgdoc.appspot.com/pkg/github.com/ziutek/gst

To run examples use go run command:

$ cd examples
$ go run simple.go

To run live WebM example use go run live_webm.go and open http://127.0.0.1:8080 with your browser. You probably need to wait a long time for video because of small bitrate of this stream and big buffer in you browser.

Owner
Comments
  • 'g_type_init' is deprecated

    'g_type_init' is deprecated

    I get the following error when trying to go get this library:

    # github.com/ziutek/glib
    type.go:19:1: error: 'g_type_init' is deprecated (declared at /usr/include/glib-2.0/gobject/gtype.h:669) [-Werror=deprecated-declarations]
     )
     ^
    cc1: all warnings being treated as errors
    

    I also tried running the examples, they don't work either, giving the same error.

    I'm on Arch Linux x64, Go 1.1, GCC 4.8.1.

  • issues running live_web.go example on go 1.4.1

    issues running live_web.go example on go 1.4.1

    GST_DEBUG=3 go run live_webm.go 0:00:00.023227292 4260 0xc67090 WARN structure gststructure.c:195:gst_structure_validate_name: Invalid character ',' at offset 11 in structure name: video/x-raw,format=yuv

    (live_webm:4260): GStreamer-CRITICAL **: gst_structure_new_empty: assertion 'gst_structure_validate_name (name)' failed

    (live_webm:4260): GStreamer-CRITICAL **: gst_structure_take_value: assertion 'structure != NULL' failed

    (live_webm:4260): GStreamer-CRITICAL **: gst_structure_take_value: assertion 'structure != NULL' failed

    (live_webm:4260): GStreamer-CRITICAL **: gst_structure_take_value: assertion 'structure != NULL' failed 0:00:00.025233199 4260 0xc720a0 FIXME default gstutils.c:3643:gst_pad_create_stream_id_internal: Creating random stream-id, consider implementing a deterministic way of creating a stream-id 0:00:00.029249741 4260 0xc720a0 WARN basesrc gstbasesrc.c:2933:gst_base_src_loop: error: Internal data flow error. 0:00:00.029347884 4260 0xc720a0 WARN basesrc gstbasesrc.c:2933:gst_base_src_loop: error: streaming task paused, reason not-linked (-1)

    go version go1.4.2 linux/amd64 gstreamer version 1.4.3.

  • Added basic support for: GstAllocator, GstAppSrc, GstBuffer

    Added basic support for: GstAllocator, GstAppSrc, GstBuffer

    Due to lack of push-behaviour I added some basic GstAppSrc and GstBuffer support which allows to allocate buffer and push it to AppSrc element inside "need-data" handler.

  • Windows 8.1 - go.exe get github.com/ziutek/gst fails

    Windows 8.1 - go.exe get github.com/ziutek/gst fails

    I have not found any documentation how to install it for windows 8.1? in windows 8.1 when i apply

    C:\Go\bin>go.exe get github.com/ziutek/gst
    # pkg-config --cflags glib-2.0 gobject-2.0 gthread-2.0
    pkg-config: exec: "pkg-config": executable file not found in %PATH%
    

    Can you please show me how to make it work? (i have Gstreamer SDK in C:\gstreamer\1.0..)

  • live_webm example broken in go 1.4.1

    live_webm example broken in go 1.4.1

    I've tested the gstreamer bindings in osx.

    gstreamer 1.4.5, go 1.4.1 (built with swig support) are installed, as well as all the dependencies

    The simple example works ok (replacing xvimagesink for autovideosink), but the live_webm fails building and launching it as shown. Any ideas on what's going on?

    fatal error: attempt to execute C code on Go stack

    runtime stack: runtime.throw(0x444a625) /usr/local/Cellar/go/1.4.1/libexec/src/runtime/panic.go:491 +0xad badc() /usr/local/Cellar/go/1.4.1/libexec/src/runtime/stack.c:891 +0x2a runtime.onM(0x4465370) /usr/local/Cellar/go/1.4.1/libexec/src/runtime/asm_amd64.s:257 +0x68 runtime.mstart() /usr/local/Cellar/go/1.4.1/libexec/src/runtime/proc.c:818

    goroutine 1 [running]: runtime.switchtoM() /usr/local/Cellar/go/1.4.1/libexec/src/runtime/asm_amd64.s:198 fp=0xc208009a90 sp=0xc208009a88 runtime.morestackc() /usr/local/Cellar/go/1.4.1/libexec/src/runtime/stack.c:885 +0x1e fp=0xc208009aa8 sp=0xc208009a90 runtime.sighandler(0x5082120, 0x0, 0x0, 0x0) /usr/local/Cellar/go/1.4.1/libexec/src/runtime/signal_amd64x.c:44 +0x14 fp=0xc208009ab0 sp=0xc208009aa8

    goroutine 5 [syscall, locked to thread]: github.com/ziutek/glib._Cfunc_mp_wait(0x0) /Users/bleedinge/src/go/src/github.com/ziutek/glib/:517 +0x4d github.com/ziutek/glib.callbackLoop() /Users/bleedinge/src/go/src/github.com/ziutek/glib/object.go:417 +0x1f created by github.com/ziutek/glib.init·1 /Users/bleedinge/src/go/src/github.com/ziutek/glib/object.go:423 +0x25

    goroutine 17 [syscall, locked to thread]: runtime.goexit() /usr/local/Cellar/go/1.4.1/libexec/src/runtime/asm_amd64.s:2232 +0x1

  • segfault in (*Message).ParseError

    segfault in (*Message).ParseError

    I get a segfault when trying to parse a error message from gstreamer.

    *** glibc detected *** /usr/local/bin/rtp-receiver: free(): invalid pointer: 0x00fd9040 ***
    SIGABRT: abort
    PC=0xb6c1acdc
    
    goroutine 43 [syscall]:
    runtime.cgocall(0xf7f8, 0x8246cb88)
        /usr/lib/go/src/pkg/runtime/cgocall.c:142 +0xdc fp=0x8246cb78 sp=0x8246cb4c
    github.com/ziutek/gst._Cfunc_free(0xfd9040)
        github.com/ziutek/gst/_obj/_cgo_defun.c:82 +0x34 fp=0x8246cb84 sp=0x8246cb78
    github.com/ziutek/gst.(*Message).ParseError(0x10b9c08, 0x96b92bc0, 0x96b2c680, 0x73)
        /home/pi/.go/src/github.com/ziutek/gst/message.go:157 +0x188 fp=0x8246cba8 sp=0x8246cb84
    main.(*Manager).onMessage(0x96b00540, 0x96b0b7a8, 0x10b9c08)
        /home/pi/go/streaming/common-client.go:49 +0xd0 fp=0x8246cc1c sp=0x8246c
    [..]
    

    I tried it with different go versions without any change in behavior.

    My current workaround is to comment out two lines in the library to not make it free the two pointers:

    func (m *Message) ParseError() (err *glib.Error, debug string) {
            var d *C.gchar
            var     e, ret_e *C.GError
    
            C.gst_message_parse_error(m.g(), &e, &d)
            // prevent segfaults by not freeing the pointer
            //defer C.free(unsafe.Pointer(e))
            //defer C.free(unsafe.Pointer(d))
    
            debug = C.GoString((*C.char)(d))
            ret_e = new(C.GError)
            *ret_e = *e
            err = (*glib.Error)(unsafe.Pointer(ret_e))
            return
    }
    

    I'm not sure, if this is the way to fix it. I guess it creates a memory leak.

Related tags
Golang bindings for FFmpeg

goav Golang binding for FFmpeg A comprehensive binding to the ffmpeg video/audio manipulation library. Usage import "github.com/giorgisio/goav/avforma

Dec 27, 2022
Go bindings for libVLC and high-level media player interface
Go bindings for libVLC and high-level media player interface

Go bindings for libVLC 2.X/3.X/4.X and high-level media player interface. The package can be useful for adding multimedia capabilities to applications

Dec 31, 2022
Go4vl is Go library for working with the Video for Linux API (V4L2) natively, without any C bindings.

go4vl A Go library for working with the Video for Linux user API (V4L2). Gov4l hides all the complexities of working with V4L2 and exposes idiomatic G

Dec 23, 2022
Package implement reading and writing popular playlist formats: PLS, ASX, M3U, XSPF and others.

go-playlist ⚠️ WARNING The API is not stable yet and can change. Package playlist implement reading and writing popular playlist formats: PLS, ASX, M3

Oct 14, 2021
Go bindings for GStreamer (retired: currently I don't use/develop this package)

Retired. I don't use/develop this package anymore. Go bindings for GStreamer at a very early stage of maturity. This package is based on GLib bindings

Nov 10, 2022
dont-interface calculates how many interface{} are declared or used in your project?

dont-interface calculates how many interface{} are declared or used in your project?

Jun 9, 2022
sg is the CLI tool that Sourcegraph developers can use to develop Sourcegraph.

sg is the CLI tool that Sourcegraph developers can use to develop Sourcegraph.

Dec 14, 2022
Beerus-DB: a database operation framework, currently only supports Mysql, Use [go-sql-driver/mysql] to do database connection and basic operations

Beerus-DB · Beerus-DB is a database operation framework, currently only supports Mysql, Use [go-sql-driver/mysql] to do database connection and basic

Oct 29, 2022
Oct 8, 2022
A Go package for sending and receiving ethernet frames. Currently supporting Linux, Freebsd, and OS X.

ether ether is a go package for sending and receiving ethernet frames. Currently supported platform: BPF based OS X FreeBSD AF_PACKET based Linux Docu

Sep 27, 2022
A Go native tabular data extraction package. Currently supports .xls, .xlsx, .csv, .tsv formats.

grate A Go native tabular data extraction package. Currently supports .xls, .xlsx, .csv, .tsv formats. Why? Grate focuses on speed and stability first

Dec 26, 2022
hc is a lightweight framework to develop HomeKit accessories in Go.

hc hc is a lightweight framework to develop HomeKit accessories in Go. It abstracts the HomeKit Accessory Protocol (HAP) and makes it easy to work wit

Jan 4, 2023
An experimental port of TinyRb to Google go, both as a means of learning go and exploring alternate approaches to implementing Ruby. Work is currently focused on the GoLightly VM.

tinyrb¶ ↑ A tiny subset of Ruby with a Lua'esc VM. Everything in TinyRb should run in the big Ruby. (except bugs and things that don't comply to the p

Sep 22, 2022
Open source Firebase + Heroku to develop, scale and secure serverless apps on Kubernetes

Develop, Deploy and Secure Serverless Apps on Kubernetes. Website • Docs • Support Space Cloud is a Kubernetes based serverless platform that provides

Dec 29, 2022
A tool to list and diagnose Go processes currently running on your system

gops gops is a command to list and diagnose Go processes currently running on your system. $ gops 983 980 uplink-soecks go1.9 /usr/local/bin/u

Dec 27, 2022
Currently in beta testing. A chess engine written in golang
Currently in beta testing. A chess engine written in golang

Weasel Art graciously provided by Alex Table of Contents: About Installing and Compiling from Source Contributing License About Weasel is an 0x88 and

Dec 30, 2022
gqlanalysis makes easy to develop static analysis tools for GraphQL in Go.
gqlanalysis makes easy to develop static analysis tools for GraphQL in Go.

gqlanalysis gqlanalysis defines the interface between a modular static analysis for GraphQL in Go. gqlanalysis is inspired by go/analysis. gqlanalysis

Dec 14, 2022
gqlanalysis makes easy to develop static analysis tools for GraphQL in Go.
gqlanalysis makes easy to develop static analysis tools for GraphQL in Go.

gqlanalysis gqlanalysis defines the interface between a modular static analysis for GraphQL in Go. gqlanalysis is inspired by go/analysis. gqlanalysis

Dec 14, 2022