mirror of
https://github.com/AlexxIT/go2rtc.git
synced 2025-09-26 20:31:11 +08:00
66 lines
1020 B
Go
66 lines
1020 B
Go
package wyoming
|
|
|
|
import (
|
|
"net"
|
|
|
|
"github.com/AlexxIT/go2rtc/pkg/core"
|
|
"github.com/pion/rtp"
|
|
)
|
|
|
|
type Producer struct {
|
|
core.Connection
|
|
api *API
|
|
}
|
|
|
|
func newProducer(conn net.Conn) *Producer {
|
|
return &Producer{
|
|
core.Connection{
|
|
ID: core.NewID(),
|
|
FormatName: "wyoming",
|
|
Medias: []*core.Media{
|
|
{
|
|
Kind: core.KindAudio,
|
|
Direction: core.DirectionRecvonly,
|
|
Codecs: []*core.Codec{
|
|
{Name: core.CodecPCML, ClockRate: 16000},
|
|
},
|
|
},
|
|
},
|
|
Transport: conn,
|
|
},
|
|
NewAPI(conn),
|
|
}
|
|
}
|
|
|
|
func (p *Producer) Start() error {
|
|
var seq uint16
|
|
var ts uint32
|
|
|
|
for {
|
|
evt, err := p.api.ReadEvent()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if evt.Type != "audio-chunk" {
|
|
continue
|
|
}
|
|
|
|
p.Recv += len(evt.Payload)
|
|
|
|
pkt := &core.Packet{
|
|
Header: rtp.Header{
|
|
Version: 2,
|
|
Marker: true,
|
|
SequenceNumber: seq,
|
|
Timestamp: ts,
|
|
},
|
|
Payload: evt.Payload,
|
|
}
|
|
p.Receivers[0].WriteRTP(pkt)
|
|
|
|
seq++
|
|
ts += uint32(len(evt.Payload) / 2)
|
|
}
|
|
}
|