custom RTMP pipeline
This commit is contained in:
parent
de04cac28e
commit
d02617329b
@ -36,6 +36,7 @@ func (manager *BroadcastManager) Start() {
|
|||||||
manager.pipeline, err = gst.CreateRTMPPipeline(
|
manager.pipeline, err = gst.CreateRTMPPipeline(
|
||||||
manager.remote.Device,
|
manager.remote.Device,
|
||||||
manager.remote.Display,
|
manager.remote.Display,
|
||||||
|
manager.config.Pipeline,
|
||||||
manager.url,
|
manager.url,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -65,11 +65,18 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateRTMPPipeline creates a GStreamer Pipeline
|
// CreateRTMPPipeline creates a GStreamer Pipeline
|
||||||
func CreateRTMPPipeline(pipelineDevice string, pipelineDisplay string, pipelineRTMP string) (*Pipeline, error) {
|
func CreateRTMPPipeline(pipelineDevice string, pipelineDisplay string, pipelineSrc string, pipelineRTMP string) (*Pipeline, error) {
|
||||||
video := fmt.Sprintf(videoSrc, pipelineDisplay)
|
video := fmt.Sprintf(videoSrc, pipelineDisplay)
|
||||||
audio := fmt.Sprintf(audioSrc, pipelineDevice)
|
audio := fmt.Sprintf(audioSrc, pipelineDevice)
|
||||||
|
|
||||||
return CreatePipeline(fmt.Sprintf("flvmux name=mux ! rtmpsink location='%s live=1' %s voaacenc ! mux. %s x264enc bframes=0 key-int-max=60 byte-stream=true tune=zerolatency speed-preset=veryfast ! mux.", pipelineRTMP, audio, video), "", 0)
|
var pipelineStr string
|
||||||
|
if pipelineSrc != "" {
|
||||||
|
pipelineStr = fmt.Sprintf(pipelineSrc, pipelineRTMP, pipelineDevice, pipelineDisplay)
|
||||||
|
} else {
|
||||||
|
pipelineStr = fmt.Sprintf("flvmux name=mux ! rtmpsink location='%s live=1' %s ! voaacenc ! mux. %s x264enc bframes=0 key-int-max=60 byte-stream=true tune=zerolatency speed-preset=veryfast ! mux.", pipelineRTMP, audio, video)
|
||||||
|
}
|
||||||
|
|
||||||
|
return CreatePipeline(pipelineStr, "", 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateAppPipeline creates a GStreamer Pipeline
|
// CreateAppPipeline creates a GStreamer Pipeline
|
||||||
|
@ -6,32 +6,18 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Broadcast struct {
|
type Broadcast struct {
|
||||||
// Enabled bool
|
Pipeline string
|
||||||
// AudioParams string
|
|
||||||
// VideoParams string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (Broadcast) Init(cmd *cobra.Command) error {
|
func (Broadcast) Init(cmd *cobra.Command) error {
|
||||||
// cmd.PersistentFlags().Bool("broadcast", false, "enable boradcasting")
|
cmd.PersistentFlags().String("broadcast_pipeline", "", "audio codec parameters to use for broadcasting")
|
||||||
// if err := viper.BindPFlag("broadcast", cmd.PersistentFlags().Lookup("broadcast")); err != nil {
|
if err := viper.BindPFlag("broadcast_pipeline", cmd.PersistentFlags().Lookup("broadcast_pipeline")); err != nil {
|
||||||
// return err
|
return err
|
||||||
// }
|
}
|
||||||
|
|
||||||
// cmd.PersistentFlags().String("cast_audio", "", "audio codec parameters to use for broadcasting")
|
|
||||||
// if err := viper.BindPFlag("cast_audio", cmd.PersistentFlags().Lookup("cast_audio")); err != nil {
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
|
|
||||||
// cmd.PersistentFlags().String("cast_video", "", "video codec parameters to use for broadcasting")
|
|
||||||
// if err := viper.BindPFlag("cast_video", cmd.PersistentFlags().Lookup("cast_video")); err != nil {
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Broadcast) Set() {
|
func (s *Broadcast) Set() {
|
||||||
// s.Enabled = viper.GetBool("broadcast")
|
s.Pipeline = viper.GetString("broadcast_pipeline")
|
||||||
// s.AudioParams = viper.GetString("cast_audio")
|
|
||||||
// s.VideoParams = viper.GetString("cast_video")
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user