Files
gb-cms/stream.go
2024-08-08 23:37:28 +08:00

55 lines
1.0 KiB
Go

package main
import (
"context"
"github.com/ghettovoice/gosip/sip"
"time"
)
type Stream struct {
Id string //推流ID
Protocol string //推流协议
DialogRequest sip.Request
publishEvent chan byte
cancelFunc func()
}
func (s *Stream) waitPublishStream() bool {
s.publishEvent = make(chan byte, 0)
timeout, cancelFunc := context.WithTimeout(context.Background(), 10*time.Second)
s.cancelFunc = cancelFunc
select {
case <-s.publishEvent:
return true
case <-timeout.Done():
s.cancelFunc = nil
return false
}
}
func (s *Stream) Close(sendBye bool) {
if s.cancelFunc != nil {
s.cancelFunc()
}
if sendBye && s.DialogRequest != nil {
SipUA.SendRequest(s.CreateRequestFromDialog(sip.BYE))
s.DialogRequest = nil
}
}
func (s *Stream) CreateRequestFromDialog(method sip.RequestMethod) sip.Request {
{
seq, _ := s.DialogRequest.CSeq()
seq.SeqNo++
seq.MethodName = method
}
request := s.DialogRequest.Clone().(sip.Request)
request.SetMethod(method)
return request
}