Files
go-gst/examples/device_provider/main.go

65 lines
1.5 KiB
Go

// This example uses gstreamer's device provider api.
//
// https://gstreamer.freedesktop.org/documentation/gstreamer/gstdeviceprovider.html
package main
import (
"context"
"fmt"
"os"
"github.com/go-gst/go-gst/pkg/gst"
)
func runPipeline() error {
gst.Init()
fmt.Println("Running device provider")
fmt.Println("Creating device monitor")
provider := gst.DeviceProviderFactoryGetByName("avfdeviceprovider")
fmt.Println("Created device provider")
if provider == nil {
fmt.Println("No provider found")
os.Exit(2)
}
fmt.Println("Starting device monitor")
provider.Start()
fmt.Println("Started device monitor")
fmt.Println("listing devices from provider")
devices := provider.GetDevices()
for i, v := range devices {
fmt.Printf("Device: %d %s\n", i, v.GetDisplayName())
}
fmt.Println("Getting device provider bus")
bus := provider.GetBus()
fmt.Println("Got device provider bus")
for msg := range bus.Messages(context.Background()) {
switch msg.Type() {
case gst.MessageDeviceAdded:
message := msg.ParseDeviceAdded().GetDisplayName()
fmt.Println("Added: ", message)
case gst.MessageDeviceRemoved:
message := msg.ParseDeviceRemoved().GetDisplayName()
fmt.Println("Removed: ", message)
default:
// All messages implement a Stringer. However, this is
// typically an expensive thing to do and should be avoided.
fmt.Println("Type: ", msg.Type())
fmt.Println("Message: ", msg.String())
}
}
return nil
}
func main() {
runPipeline()
}