From 33b07c6a20f1f1fbaa8ea22eaf6f9345d6a33f46 Mon Sep 17 00:00:00 2001 From: Andrey Semochkin Date: Sat, 9 Jan 2021 17:24:48 +0300 Subject: [PATCH] opus work worked --- format/rtspv2/client.go | 21 +++++++++++---------- format/webrtcv3/adapter.go | 8 ++++++++ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/format/rtspv2/client.go b/format/rtspv2/client.go index 37af914..0058ce1 100644 --- a/format/rtspv2/client.go +++ b/format/rtspv2/client.go @@ -75,8 +75,9 @@ type RTSPClient struct { sps []byte pps []byte CodecData []av.CodecData - PCMTime time.Duration + AudioTimeLine time.Duration AudioTimeScale int64 + audioCodec string } type RTSPClientOptions struct { @@ -179,6 +180,7 @@ func Dial(options RTSPClientOptions) (*RTSPClient, error) { if CodecData != nil { client.CodecData = append(client.CodecData, CodecData) client.audioIDX = int8(len(client.CodecData) - 1) + client.audioCodec = CodecData.Type().String() if i2.TimeScale != 0 { client.AudioTimeScale = int64(i2.TimeScale) } @@ -572,21 +574,20 @@ func (client *RTSPClient) RTPDemuxer(payloadRAW *[]byte) ([]*av.Packet, bool) { nalRaw, _ := h264parser.SplitNALUs(content[offset:end]) var retmap []*av.Packet for _, nal := range nalRaw { - //basic - //time.Duration(float32(timestamp)/float32(float32(client.AudioTimeScale)/float32(1000))) * time.Millisecond - //pcm - //client.PCMTime += time.Duration(len(nal)) * time.Second / time.Duration(client.AudioTimeScale) - //opus - //client.PCMTime := time.Duration((sampleCount/48000)*1000) * time.Millisecond - //Need Add Opus And AAC + if client.audioCodec == av.PCM_MULAW.String() || client.audioCodec == av.PCM_ALAW.String() || client.audioCodec == av.PCM.String() { + client.AudioTimeLine += time.Duration(len(nal)) * time.Second / time.Duration(client.AudioTimeScale) + } else if client.audioCodec == av.OPUS.String() { + client.AudioTimeLine += time.Duration(20) * time.Millisecond + } else { + client.AudioTimeLine = time.Duration(float32(timestamp)/float32(float32(client.AudioTimeScale)/float32(1000))) * time.Millisecond + } retmap = append(retmap, &av.Packet{ Data: append(binSize(len(nal)), nal...), CompositionTime: time.Duration(1) * time.Millisecond, Idx: client.audioIDX, IsKeyFrame: false, - Time: time.Duration(float32(timestamp)/float32(float32(client.AudioTimeScale)/float32(1000))) * time.Millisecond, + Time: client.AudioTimeLine, }) - //log.Println("===>", time.Duration(float32(timestamp)/float32(float32(client.AudioTimeScale)/float32(1000)))*time.Millisecond) } if len(retmap) > 0 { return retmap, true diff --git a/format/webrtcv3/adapter.go b/format/webrtcv3/adapter.go index a372634..34c3e96 100644 --- a/format/webrtcv3/adapter.go +++ b/format/webrtcv3/adapter.go @@ -159,6 +159,11 @@ func (element *Muxer) WritePacket(pkt av.Packet) (err error) { if element.stop { return ErrorClientOffline } + //Wait client ICEConnectionStateConnected + if element.status == webrtc.ICEConnectionStateChecking { + WritePacketSuccess = true + return nil + } if element.status != webrtc.ICEConnectionStateConnected { return nil } @@ -176,8 +181,11 @@ func (element *Muxer) WritePacket(pkt av.Packet) (err error) { pkt.Data = pkt.Data[4:] } case av.PCM_MULAW: + pkt.Data = pkt.Data[4:] case av.PCM_ALAW: + pkt.Data = pkt.Data[4:] case av.OPUS: + pkt.Data = pkt.Data[4:] default: return ErrorCodecNotSupported }