From 912165f2460cfa1f216c109c37a07beb3a3efe5e Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Fri, 17 Dec 2021 03:35:42 +0100 Subject: [PATCH] Add support for virtual camera This adds the following commands: obs-cli virtualcam start obs-cli virtualcam stop obs-cli virtualcam toggle obs-cli virtualcam status Fixes #20. --- README.md | 16 ++++++++++ virtualcam.go | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 virtualcam.go diff --git a/README.md b/README.md index 016671f..e2739df 100644 --- a/README.md +++ b/README.md @@ -216,3 +216,19 @@ Switch to a profile: ``` obs-cli profile set ``` + +### Virtual Camera + +Change the virtual camera state: + +``` +obs-cli virtualcam start +obs-cli virtualcam stop +obs-cli virtualcam toggle +``` + +Display virtual camera status: + +``` +obs-cli virtualcam status +``` diff --git a/virtualcam.go b/virtualcam.go new file mode 100644 index 0000000..ee5f02d --- /dev/null +++ b/virtualcam.go @@ -0,0 +1,87 @@ +package main + +import ( + "fmt" + "strconv" + + "github.com/spf13/cobra" +) + +var ( + virtualCamCmd = &cobra.Command{ + Use: "virtualcam", + Short: "manage virtual camera", + Long: `The virtualcam command manages the virtual camera`, + RunE: nil, + } + + startStopVirtualCamCmd = &cobra.Command{ + Use: "toggle", + Short: "Toggle virtual camera status", + RunE: func(cmd *cobra.Command, args []string) error { + return starStopVirtualCam() + }, + } + + startVirtualCamCmd = &cobra.Command{ + Use: "start", + Short: "Starts virtual camera", + RunE: func(cmd *cobra.Command, args []string) error { + return startVirtualCam() + }, + } + + stopVirtualCamCmd = &cobra.Command{ + Use: "stop", + Short: "Stops virtual camera", + RunE: func(cmd *cobra.Command, args []string) error { + return stopVirtualCam() + }, + } + + virtualCamStatusCmd = &cobra.Command{ + Use: "status", + Short: "Reports virtual camera status", + RunE: func(cmd *cobra.Command, args []string) error { + return virtualCamStatus() + }, + } +) + +func starStopVirtualCam() error { + _, err := client.VirtualCam.StartStopVirtualCam() + return err +} + +func startVirtualCam() error { + _, err := client.VirtualCam.StartVirtualCam() + return err +} + +func stopVirtualCam() error { + _, err := client.VirtualCam.StopVirtualCam() + return err +} + +func virtualCamStatus() error { + r, err := client.VirtualCam.GetVirtualCamStatus() + if err != nil { + return err + } + + fmt.Printf("Virtual camera: %s\n", strconv.FormatBool(*r.IsVirtualCam)) + if !*r.IsVirtualCam { + return nil + } + + fmt.Printf("Timecode: %s\n", r.VirtualCamTimecode) + return nil +} + +func init() { + virtualCamCmd.AddCommand(startStopVirtualCamCmd) + virtualCamCmd.AddCommand(startVirtualCamCmd) + virtualCamCmd.AddCommand(stopVirtualCamCmd) + virtualCamCmd.AddCommand(virtualCamStatusCmd) + rootCmd.AddCommand(virtualCamCmd) +}