Add support snd mode for wyoming module
This commit is contained in:
@@ -93,6 +93,8 @@ func handle(srv *wyoming.Server, mode string, conn net.Conn) {
|
|||||||
switch mode {
|
switch mode {
|
||||||
case "mic":
|
case "mic":
|
||||||
err = srv.HandleMic(conn)
|
err = srv.HandleMic(conn)
|
||||||
|
case "snd":
|
||||||
|
err = srv.HandleSnd(conn)
|
||||||
default:
|
default:
|
||||||
err = srv.Handle(conn)
|
err = srv.Handle(conn)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -377,7 +377,9 @@ func (s *sndProducer) Start() error {
|
|||||||
seq++
|
seq++
|
||||||
}
|
}
|
||||||
|
|
||||||
s.onClose()
|
if s.onClose != nil {
|
||||||
|
s.onClose()
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package wyoming
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"net"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (s *Server) HandleSnd(conn net.Conn) error {
|
||||||
|
defer conn.Close()
|
||||||
|
|
||||||
|
var snd []byte
|
||||||
|
|
||||||
|
api := NewAPI(conn)
|
||||||
|
for {
|
||||||
|
evt, err := api.ReadEvent()
|
||||||
|
if err != nil {
|
||||||
|
if err == io.EOF {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
s.Trace("event: %s data: %s payload: %d", evt.Type, evt.Data, len(evt.Payload))
|
||||||
|
|
||||||
|
switch evt.Type {
|
||||||
|
case "audio-start":
|
||||||
|
snd = snd[:0]
|
||||||
|
case "audio-chunk":
|
||||||
|
snd = append(snd, evt.Payload...)
|
||||||
|
case "audio-stop":
|
||||||
|
prod := newSndProducer(snd, func() {
|
||||||
|
time.Sleep(time.Second) // some extra delay before close
|
||||||
|
})
|
||||||
|
if err = s.SndHandler(prod); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user