From 83aa44eebe7885b12977b76ee698a117d0d350fe Mon Sep 17 00:00:00 2001 From: q191201771 <191201771@qq.com> Date: Sat, 18 Dec 2021 19:24:58 +0800 Subject: [PATCH] =?UTF-8?q?[refactor]=20error=E4=BF=A1=E6=81=AF=E6=9B=B4?= =?UTF-8?q?=E5=8F=8B=E5=A5=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/aac/aac.go | 34 ++-- pkg/aac/aac_test.go | 11 +- pkg/aac/seqheader.go | 18 ++- pkg/avc/avc.go | 76 +++++---- pkg/avc/avc_test.go | 28 ++-- pkg/avc/beta.go | 284 +-------------------------------- pkg/base/error.go | 69 ++++++++ pkg/base/http_server.go | 8 +- pkg/base/session.go | 20 ++- pkg/base/url.go | 13 +- pkg/hevc/hevc.go | 65 +++++--- pkg/hls/hls.go | 6 +- pkg/hls/m3u8.go | 7 +- pkg/hls/muxer.go | 4 +- pkg/hls/streamer.go | 2 +- pkg/httpflv/flv_file_writer.go | 14 +- pkg/httpflv/httpflv.go | 6 - pkg/httpts/httpts.go | 4 - pkg/mpegts/file_writer.go | 10 +- pkg/mpegts/mpegts.go | 4 - pkg/rtmp/amf0.go | 54 +++---- pkg/rtmp/amf0_test.go | 31 ++-- pkg/rtmp/chunk_composer.go | 13 +- pkg/rtmp/client_session.go | 5 +- pkg/rtmp/rtmp.go | 8 - pkg/rtmp/server_session.go | 8 +- 26 files changed, 325 insertions(+), 477 deletions(-) create mode 100644 pkg/base/error.go diff --git a/pkg/aac/aac.go b/pkg/aac/aac.go index 69d409b..fcfd128 100644 --- a/pkg/aac/aac.go +++ b/pkg/aac/aac.go @@ -9,10 +9,13 @@ package aac import ( - "errors" + "fmt" + + "github.com/q191201771/naza/pkg/nazaerrors" + + "github.com/q191201771/lal/pkg/base" "github.com/q191201771/naza/pkg/nazabits" - "github.com/q191201771/naza/pkg/nazalog" ) // AudioSpecificConfig(asc) @@ -25,8 +28,6 @@ import ( // StreamMuxConfig // -var ErrAac = errors.New("lal.aac: fxxk") - const ( AdtsHeaderLength = 7 @@ -38,6 +39,8 @@ const ( minAscLength = 2 ) +// AscContext +// // // <1.6.2.1 AudioSpecificConfig>, // <1.5.1.1 Audio Object type definition>, @@ -47,6 +50,7 @@ const ( // audio object type [5b] 1=AAC MAIN 2=AAC LC // samplingFrequencyIndex [4b] 3=48000 4=44100 6=24000 5=32000 11=11025 // channelConfiguration [4b] 1=center front speaker 2=left, right front speakers +// type AscContext struct { AudioObjectType uint8 // [5b] SamplingFrequencyIndex uint8 // [4b] @@ -61,14 +65,15 @@ func NewAscContext(asc []byte) (*AscContext, error) { return &ascCtx, nil } +// Unpack +// // @param asc: 2字节的AAC Audio Specifc Config // 注意,如果是rtmp/flv的message/tag,应去除Seq Header头部的2个字节 // 函数调用结束后,内部不持有该内存块 // func (ascCtx *AscContext) Unpack(asc []byte) error { if len(asc) < minAscLength { - nazalog.Warnf("aac seq header length invalid. len=%d", len(asc)) - return ErrAac + return nazaerrors.Wrap(base.ErrShortBuffer) } br := nazabits.NewBitReader(asc) @@ -78,6 +83,8 @@ func (ascCtx *AscContext) Unpack(asc []byte) error { return nil } +// Pack +// // @return asc: 内存块为独立新申请;函数调用结束后,内部不持有该内存块 // func (ascCtx *AscContext) Pack() (asc []byte) { @@ -89,6 +96,8 @@ func (ascCtx *AscContext) Pack() (asc []byte) { return } +// PackAdtsHeader +// // 获取ADTS头,由于ADTS头中的字段依赖包的长度,而每个包的长度可能不同,所以每个包的ADTS头都需要独立生成 // // @param frameLength: raw aac frame的大小 @@ -102,11 +111,13 @@ func (ascCtx *AscContext) PackAdtsHeader(frameLength int) (out []byte) { return } +// PackToAdtsHeader +// // @param out: 函数调用结束后,内部不持有该内存块 // func (ascCtx *AscContext) PackToAdtsHeader(out []byte, frameLength int) error { if len(out) < AdtsHeaderLength { - return ErrAac + return nazaerrors.Wrap(base.ErrShortBuffer) } // @@ -163,8 +174,7 @@ func (ascCtx *AscContext) GetSamplingFrequency() (int, error) { case AscSamplingFrequencyIndex44100: return 44100, nil } - nazalog.Errorf("GetSamplingFrequency failed. ascCtx=%+v", ascCtx) - return -1, ErrAac + return -1, fmt.Errorf("%w. index=%d", base.ErrSamplingFrequencyIndex, ascCtx.SamplingFrequencyIndex) } type AdtsHeaderContext struct { @@ -181,11 +191,13 @@ func NewAdtsHeaderContext(adtsHeader []byte) (*AdtsHeaderContext, error) { return &ctx, nil } +// Unpack +// // @param adtsHeader: 函数调用结束后,内部不持有该内存块 // func (ctx *AdtsHeaderContext) Unpack(adtsHeader []byte) error { if len(adtsHeader) < AdtsHeaderLength { - return ErrAac + return nazaerrors.Wrap(base.ErrShortBuffer) } br := nazabits.NewBitReader(adtsHeader) @@ -200,6 +212,8 @@ func (ctx *AdtsHeaderContext) Unpack(adtsHeader []byte) error { return nil } +// MakeAscWithAdtsHeader +// // @param adtsHeader: 函数调用结束后,内部不持有该内存块 // // @return asc: 内存块为独立新申请;函数调用结束后,内部不持有该内存块 diff --git a/pkg/aac/aac_test.go b/pkg/aac/aac_test.go index 55d369e..a698bee 100644 --- a/pkg/aac/aac_test.go +++ b/pkg/aac/aac_test.go @@ -9,8 +9,11 @@ package aac_test import ( + "errors" "testing" + "github.com/q191201771/lal/pkg/base" + "github.com/q191201771/lal/pkg/aac" "github.com/q191201771/naza/pkg/nazalog" @@ -58,10 +61,10 @@ func TestAscContext(t *testing.T) { // error case _, err = aac.NewAscContext(nil) - assert.Equal(t, aac.ErrAac, err) + assert.Equal(t, true, errors.Is(err, base.ErrShortBuffer)) // error case _, err = aac.MakeAscWithAdtsHeader(nil) - assert.Equal(t, aac.ErrAac, err) + assert.Equal(t, true, errors.Is(err, base.ErrShortBuffer)) } func TestMakeAudioDataSeqHeader(t *testing.T) { @@ -78,10 +81,10 @@ func TestMakeAudioDataSeqHeader(t *testing.T) { // error case _, err = aac.MakeAudioDataSeqHeaderWithAsc(nil) - assert.Equal(t, aac.ErrAac, err) + assert.Equal(t, true, errors.Is(err, base.ErrShortBuffer)) // error case _, err = aac.MakeAudioDataSeqHeaderWithAdtsHeader(nil) - assert.Equal(t, aac.ErrAac, err) + assert.Equal(t, true, errors.Is(err, base.ErrShortBuffer)) } func TestSequenceHeaderContext(t *testing.T) { diff --git a/pkg/aac/seqheader.go b/pkg/aac/seqheader.go index e28b2ca..16401d7 100644 --- a/pkg/aac/seqheader.go +++ b/pkg/aac/seqheader.go @@ -8,10 +8,17 @@ package aac -import "github.com/q191201771/naza/pkg/nazabits" +import ( + "github.com/q191201771/lal/pkg/base" + "github.com/q191201771/naza/pkg/nazaerrors" + + "github.com/q191201771/naza/pkg/nazabits" +) // TODO(chef) 这个文件的部分内容可以考虑放到package base中 +// SequenceHeaderContext +// // ,