mirror of
https://github.com/lkmio/lkm.git
synced 2025-09-26 19:21:14 +08:00
51 lines
1.2 KiB
Go
51 lines
1.2 KiB
Go
package gb28181
|
|
|
|
import (
|
|
"github.com/lkmio/avformat"
|
|
"github.com/lkmio/avformat/collections"
|
|
"github.com/lkmio/lkm/stream"
|
|
"github.com/lkmio/rtp"
|
|
)
|
|
|
|
type TalkStream struct {
|
|
*stream.RtpStream
|
|
muxer rtp.Muxer
|
|
packet []byte
|
|
}
|
|
|
|
func (s *TalkStream) WriteHeader() error {
|
|
return nil
|
|
}
|
|
|
|
func (s *TalkStream) Input(packet *avformat.AVPacket, index int) ([]*collections.ReferenceCounter[[]byte], int64, bool, error) {
|
|
var size int
|
|
s.muxer.Input(packet.Data, uint32(packet.Dts), func() []byte {
|
|
return s.packet
|
|
}, func(pkt []byte) {
|
|
size = len(pkt)
|
|
})
|
|
|
|
packet = &avformat.AVPacket{Data: s.packet[:size]}
|
|
return s.RtpStream.Input(packet, index)
|
|
}
|
|
|
|
func NewTalkTransStream(ssrc uint32) (stream.TransStream, error) {
|
|
return &TalkStream{
|
|
RtpStream: stream.NewRtpTransStream(stream.TransStreamGBTalk, 1024),
|
|
muxer: rtp.NewMuxer(8, 0, ssrc),
|
|
packet: make([]byte, 1500),
|
|
}, nil
|
|
}
|
|
|
|
func TalkTransStreamFactory(_ stream.Source, _ stream.TransStreamProtocol, _ []*stream.Track, sink stream.Sink) (stream.TransStream, error) {
|
|
var ssrc uint32 = 0xFFFFFFFF
|
|
if sink != nil {
|
|
forwardSink, ok := sink.(*stream.ForwardSink)
|
|
if ok {
|
|
ssrc = forwardSink.GetSSRC()
|
|
}
|
|
}
|
|
|
|
return NewTalkTransStream(ssrc)
|
|
}
|