screencast quality and framerate.

This commit is contained in:
Miroslav Šedivý 2021-01-22 18:44:27 +01:00
parent 3161870906
commit 75393905e8
3 changed files with 18 additions and 2 deletions

View File

@ -59,12 +59,12 @@ func CreateRTMPPipeline(pipelineDevice string, pipelineDisplay string, pipelineS
} }
// CreateJPEGPipeline creates a GStreamer Pipeline // CreateJPEGPipeline creates a GStreamer Pipeline
func CreateJPEGPipeline(pipelineDisplay string, pipelineSrc string) (*Pipeline, error) { func CreateJPEGPipeline(pipelineDisplay string, pipelineSrc string, rate string, quality string) (*Pipeline, error) {
var pipelineStr string var pipelineStr string
if pipelineSrc != "" { if pipelineSrc != "" {
pipelineStr = fmt.Sprintf(pipelineSrc, pipelineDisplay) pipelineStr = fmt.Sprintf(pipelineSrc, pipelineDisplay)
} else { } else {
pipelineStr = fmt.Sprintf("ximagesrc display-name=%s show-pointer=true use-damage=false ! videoconvert ! videoscale ! videorate ! video/x-raw,framerate=10/1 ! jpegenc quality=60" + appSink, pipelineDisplay) pipelineStr = fmt.Sprintf("ximagesrc display-name=%s show-pointer=true use-damage=false ! videoconvert ! videoscale ! videorate ! video/x-raw,framerate=%s ! jpegenc quality=%s" + appSink, pipelineDisplay, rate, quality)
} }
return CreatePipeline(pipelineStr, 0) return CreatePipeline(pipelineStr, 0)

View File

@ -81,6 +81,8 @@ func (manager *ScreencastManagerCtx) createPipeline() error {
manager.pipeline, err = gst.CreateJPEGPipeline( manager.pipeline, err = gst.CreateJPEGPipeline(
manager.config.Display, manager.config.Display,
manager.config.ScreencastPipeline, manager.config.ScreencastPipeline,
manager.config.ScreencastRate,
manager.config.ScreencastQuality,
) )
if err != nil { if err != nil {

View File

@ -16,6 +16,8 @@ type Capture struct {
BroadcastPipeline string BroadcastPipeline string
Screencast bool Screencast bool
ScreencastRate string
ScreencastQuality string
ScreencastPipeline string ScreencastPipeline string
} }
@ -89,6 +91,16 @@ func (Capture) Init(cmd *cobra.Command) error {
return err return err
} }
cmd.PersistentFlags().String("screencast_rate", "10/1", "set screencast frame rate")
if err := viper.BindPFlag("screencast_rate", cmd.PersistentFlags().Lookup("screencast_rate")); err != nil {
return err
}
cmd.PersistentFlags().String("screencast_quality", "60", "set screencast JPEG quality")
if err := viper.BindPFlag("screencast_quality", cmd.PersistentFlags().Lookup("screencast_quality")); err != nil {
return err
}
cmd.PersistentFlags().String("screencast_pipeline", "", "custom screencast pipeline") cmd.PersistentFlags().String("screencast_pipeline", "", "custom screencast pipeline")
if err := viper.BindPFlag("screencast_pipeline", cmd.PersistentFlags().Lookup("screencast_pipeline")); err != nil { if err := viper.BindPFlag("screencast_pipeline", cmd.PersistentFlags().Lookup("screencast_pipeline")); err != nil {
return err return err
@ -127,5 +139,7 @@ func (s *Capture) Set() {
s.BroadcastPipeline = viper.GetString("broadcast_pipeline") s.BroadcastPipeline = viper.GetString("broadcast_pipeline")
s.Screencast = viper.GetBool("screencast") s.Screencast = viper.GetBool("screencast")
s.ScreencastRate = viper.GetString("screencast_rate")
s.ScreencastQuality = viper.GetString("screencast_quality")
s.ScreencastPipeline = viper.GetString("screencast_pipeline") s.ScreencastPipeline = viper.GetString("screencast_pipeline")
} }