From ee561b96a0942c0cb6b06b6c74ab2ad0dae398a2 Mon Sep 17 00:00:00 2001 From: ZSC714725 Date: Fri, 17 Mar 2023 08:54:37 +0800 Subject: [PATCH] rtmp2rtsp add utest --- pkg/sdp/pack.go | 4 ++ pkg/sdp/pack_test.go | 154 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 158 insertions(+) create mode 100644 pkg/sdp/pack_test.go diff --git a/pkg/sdp/pack.go b/pkg/sdp/pack.go index 624dcde..eff15d5 100644 --- a/pkg/sdp/pack.go +++ b/pkg/sdp/pack.go @@ -52,6 +52,10 @@ a=tool:%s sdpStr += audioSdpStr } + if videoSdpStr == "" && audioSdpStr == "" { + return ctx, fmt.Errorf("invalid video and audio info, sdp:%s", sdpStr) + } + raw := []byte(strings.ReplaceAll(sdpStr, "\n", "\r\n")) ctx, err = ParseSdp2LogicContext(raw) return diff --git a/pkg/sdp/pack_test.go b/pkg/sdp/pack_test.go new file mode 100644 index 0000000..a0cd664 --- /dev/null +++ b/pkg/sdp/pack_test.go @@ -0,0 +1,154 @@ +package sdp + +import ( + "testing" + + "github.com/q191201771/lal/pkg/base" + "github.com/q191201771/naza/pkg/assert" +) + +var avcsps = []byte{ + 0x67, 0x64, 0x00, 0x20, 0xac, 0xd9, 0x40, 0xc0, 0x29, 0xb0, 0x11, 0x00, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x03, 0x00, 0x32, 0x0f, 0x18, 0x31, 0x96, +} + +var avcpps = []byte{ + 0x68, 0xeb, 0xec, 0xb2, 0x2c, +} + +var hevcsps = []byte{ + 0x42, 0x01, 0x01, 0x01, 0x60, 0x00, 0x00, 0x03, 0x00, 0x90, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x50, 0x50, 0x40, 0x00, 0x00, 0x03, 0x00, 0x40, 0x00, 0x00, 0x07, 0x82, +} + +var hevcpps = []byte{ + 0x44, 0x01, 0xc1, 0x72, 0xb0, 0x62, 0x40, +} + +var hevcvps = []byte{ + 0x40, 0x01, 0x0c, 0x01, 0xff, 0xff, 0x01, 0x60, 0x00, 0x00, 0x03, 0x00, 0x90, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x78, 0x91, 0x14, 0x09, +} + +var asc = []byte{ + 0x12, 0x10, +} + +func TestSdpPack(t *testing.T) { + { + // avc和aac + video := VideoInfo{ + VideoPt: base.AvPacketPtAvc, + Sps: avcsps, + Pps: avcpps, + } + + audio := AudioInfo{ + AudioPt: base.AvPacketPtAac, + SamplingFrequency: 44100, + Asc: asc, + } + + sdpctx, err := Pack(video, audio) + assert.Equal(t, nil, err) + assert.Equal(t, avcsps, sdpctx.Sps) + assert.Equal(t, avcpps, sdpctx.Pps) + assert.Equal(t, asc, sdpctx.Asc) + } + { + // video和audio无效 + video := VideoInfo{ + VideoPt: base.AvPacketPtUnknown, + } + audio := AudioInfo{ + AudioPt: base.AvPacketPtUnknown, + } + _, err := Pack(video, audio) + assert.IsNotNil(t, err) + } + { + // 只有video + video := VideoInfo{ + VideoPt: base.AvPacketPtAvc, + Sps: avcsps, + Pps: avcpps, + } + audio := AudioInfo{ + AudioPt: base.AvPacketPtUnknown, + } + sdpctx, err := Pack(video, audio) + assert.Equal(t, nil, err) + assert.Equal(t, avcsps, sdpctx.Sps) + assert.Equal(t, avcpps, sdpctx.Pps) + assert.Equal(t, nil, sdpctx.Asc) + } + { + // 只有audio + video := VideoInfo{ + VideoPt: base.AvPacketPtUnknown, + } + audio := AudioInfo{ + AudioPt: base.AvPacketPtAac, + SamplingFrequency: 44100, + Asc: asc, + } + sdpctx, err := Pack(video, audio) + assert.Equal(t, nil, err) + assert.Equal(t, nil, sdpctx.Sps) + assert.Equal(t, nil, sdpctx.Pps) + assert.Equal(t, asc, sdpctx.Asc) + } + { + // g711a + video := VideoInfo{ + VideoPt: base.AvPacketPtUnknown, + } + audio := AudioInfo{ + AudioPt: base.AvPacketPtG711A, + SamplingFrequency: 44100, + } + sdpctx, err := Pack(video, audio) + assert.Equal(t, nil, err) + assert.Equal(t, nil, sdpctx.Sps) + assert.Equal(t, nil, sdpctx.Pps) + assert.Equal(t, nil, sdpctx.Asc) + assert.Equal(t, base.AvPacketPtG711A, sdpctx.audioPayloadTypeBase) + assert.Equal(t, 44100, sdpctx.AudioClockRate) + } + { + // g711u + video := VideoInfo{ + VideoPt: base.AvPacketPtUnknown, + } + audio := AudioInfo{ + AudioPt: base.AvPacketPtG711U, + SamplingFrequency: 44100, + } + sdpctx, err := Pack(video, audio) + assert.Equal(t, nil, err) + assert.Equal(t, nil, sdpctx.Sps) + assert.Equal(t, nil, sdpctx.Pps) + assert.Equal(t, nil, sdpctx.Asc) + assert.Equal(t, base.AvPacketPtG711U, sdpctx.audioPayloadTypeBase) + assert.Equal(t, 44100, sdpctx.AudioClockRate) + } + { + // hevc和aac + video := VideoInfo{ + VideoPt: base.AvPacketPtHevc, + Sps: hevcsps, + Pps: hevcpps, + Vps: hevcvps, + } + + audio := AudioInfo{ + AudioPt: base.AvPacketPtAac, + SamplingFrequency: 44100, + Asc: asc, + } + + sdpctx, err := Pack(video, audio) + assert.Equal(t, nil, err) + assert.Equal(t, hevcsps, sdpctx.Sps) + assert.Equal(t, hevcpps, sdpctx.Pps) + assert.Equal(t, hevcvps, sdpctx.Vps) + assert.Equal(t, asc, sdpctx.Asc) + } +}