From 49ac52ff6782accee04eaada414a2fe531abc1d1 Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Sat, 30 Jan 2021 21:19:50 +0100 Subject: [PATCH] speed up RTMP sources --- internal/sourcertmp/source.go | 326 +++++++++++++++------------ main_test.go | 12 +- testimages/ffmpeg/Dockerfile | 2 +- testimages/ffmpeg/emptyvideoaudio.ts | Bin 0 -> 503464 bytes 4 files changed, 193 insertions(+), 147 deletions(-) create mode 100644 testimages/ffmpeg/emptyvideoaudio.ts diff --git a/internal/sourcertmp/source.go b/internal/sourcertmp/source.go index c3205133..7480e55a 100644 --- a/internal/sourcertmp/source.go +++ b/internal/sourcertmp/source.go @@ -13,6 +13,7 @@ import ( "github.com/aler9/gortsplib/pkg/rtph264" "github.com/notedit/rtmp/av" "github.com/notedit/rtmp/codec/h264" + "github.com/notedit/rtmp/format/flv/flvio" "github.com/notedit/rtmp/format/rtmp" "github.com/aler9/rtsp-simple-server/internal/logger" @@ -20,8 +21,10 @@ import ( ) const ( - retryPause = 5 * time.Second - analyzeTimeout = 8 * time.Second + retryPause = 5 * time.Second + + codecH264 = 7 + codecAAC = 10 ) // Parent is implemeneted by path.Path. @@ -107,6 +110,33 @@ func (s *Source) run() { } } +func readMetadata(conn *rtmp.Conn) (flvio.AMFMap, error) { + pkt, err := conn.ReadPacket() + if err != nil { + return nil, err + } + + if pkt.Type != av.Metadata { + return nil, fmt.Errorf("first packet must be metadata") + } + + arr, err := flvio.ParseAMFVals(pkt.Data, false) + if err != nil { + return nil, err + } + + if len(arr) != 1 { + return nil, fmt.Errorf("invalid metadata") + } + + ma, ok := arr[0].(flvio.AMFMap) + if !ok { + return nil, fmt.Errorf("invalid metadata") + } + + return ma, nil +} + func (s *Source) runInner() bool { s.log(logger.Info, "connecting") @@ -130,64 +160,6 @@ func (s *Source) runInner() bool { return true } - // gather video and audio features - var h264Sps []byte - var h264Pps []byte - var aacConfig []byte - confDone := make(chan struct{}) - confClose := uint32(0) - go func() { - defer close(confDone) - - for { - var pkt av.Packet - pkt, err = conn.ReadPacket() - if err != nil { - return - } - - if atomic.LoadUint32(&confClose) > 0 { - return - } - - switch pkt.Type { - case av.H264DecoderConfig: - codec, err := h264.FromDecoderConfig(pkt.Data) - if err != nil { - panic(err) - } - - h264Sps, h264Pps = codec.SPS[0], codec.PPS[0] - - if aacConfig != nil { - return - } - - case av.AACDecoderConfig: - aacConfig = pkt.Data - - if h264Sps != nil { - return - } - } - } - }() - - timer := time.NewTimer(analyzeTimeout) - defer timer.Stop() - - select { - case <-confDone: - case <-timer.C: - atomic.StoreUint32(&confClose, 1) - <-confDone - } - - if err != nil { - s.log(logger.Info, "ERR: %s", err) - return true - } - var tracks gortsplib.Tracks var videoTrack *gortsplib.Track @@ -198,47 +170,120 @@ func (s *Source) runInner() bool { var audioRTCPSender *rtcpsender.RTCPSender var aacEncoder *rtpaac.Encoder - if h264Sps != nil { - videoTrack, err = gortsplib.NewTrackH264(96, h264Sps, h264Pps) + confDone := make(chan error) + go func() { + confDone <- func() error { + md, err := readMetadata(conn) + if err != nil { + return err + } + + hasVideo := false + if v, ok := md.GetFloat64("videocodecid"); ok { + switch v { + case codecH264: + hasVideo = true + case 0: + default: + return fmt.Errorf("unsupported video codec %v", v) + } + + } + + hasAudio := false + if v, ok := md.GetFloat64("audiocodecid"); ok { + switch v { + case codecAAC: + hasAudio = true + case 0: + default: + return fmt.Errorf("unsupported audio codec %v", v) + } + } + + if !hasVideo && !hasAudio { + return fmt.Errorf("stream has no tracks") + } + + for { + var pkt av.Packet + pkt, err = conn.ReadPacket() + if err != nil { + return err + } + + switch pkt.Type { + case av.H264DecoderConfig: + if !hasVideo { + return fmt.Errorf("unexpected video packet") + } + if videoTrack != nil { + return fmt.Errorf("video track setupped twice") + } + + codec, err := h264.FromDecoderConfig(pkt.Data) + if err != nil { + return err + } + + videoTrack, err = gortsplib.NewTrackH264(96, codec.SPS[0], codec.PPS[0]) + if err != nil { + return err + } + + clockRate, _ := videoTrack.ClockRate() + videoRTCPSender = rtcpsender.New(clockRate) + + h264Encoder, err = rtph264.NewEncoder(96) + if err != nil { + return err + } + + tracks = append(tracks, videoTrack) + + case av.AACDecoderConfig: + if !hasAudio { + return fmt.Errorf("unexpected audio packet") + } + if audioTrack != nil { + return fmt.Errorf("audio track setupped twice") + } + + audioTrack, err = gortsplib.NewTrackAAC(96, pkt.Data) + if err != nil { + return err + } + + clockRate, _ := audioTrack.ClockRate() + audioRTCPSender = rtcpsender.New(clockRate) + + aacEncoder, err = rtpaac.NewEncoder(96, clockRate) + if err != nil { + return err + } + + tracks = append(tracks, audioTrack) + } + + if (!hasVideo || videoTrack != nil) && + (!hasAudio || audioTrack != nil) { + return nil + } + } + }() + }() + + select { + case err := <-confDone: if err != nil { s.log(logger.Info, "ERR: %s", err) return true } - clockRate, _ := videoTrack.ClockRate() - videoRTCPSender = rtcpsender.New(clockRate) - - h264Encoder, err = rtph264.NewEncoder(96) - if err != nil { - s.log(logger.Info, "ERR: %s", err) - return true - } - - tracks = append(tracks, videoTrack) - } - - if aacConfig != nil { - audioTrack, err = gortsplib.NewTrackAAC(96, aacConfig) - if err != nil { - s.log(logger.Info, "ERR: %s", err) - return true - } - - clockRate, _ := audioTrack.ClockRate() - audioRTCPSender = rtcpsender.New(clockRate) - - aacEncoder, err = rtpaac.NewEncoder(96, clockRate) - if err != nil { - s.log(logger.Info, "ERR: %s", err) - return true - } - - tracks = append(tracks, audioTrack) - } - - if len(tracks) == 0 { - s.log(logger.Info, "ERR: no tracks found") - return true + case <-s.terminate: + nconn.Close() + <-confDone + return false } for i, t := range tracks { @@ -284,61 +329,56 @@ func (s *Source) runInner() bool { readerDone := make(chan error) go func() { - for { - pkt, err := conn.ReadPacket() - if err != nil { - readerDone <- err - return - } - - switch pkt.Type { - case av.H264: - if h264Sps == nil { - readerDone <- fmt.Errorf("rtmp source ERR: received an H264 frame, but track is not setup up") - return - } - - // decode from AVCC format - nalus, typ := h264.SplitNALUs(pkt.Data) - if typ != h264.NALU_AVCC { - readerDone <- fmt.Errorf("invalid NALU format (%d)", typ) - return - } - - // encode into RTP/H264 format - frames, err := h264Encoder.Write(pkt.Time+pkt.CTime, nalus) + readerDone <- func() error { + for { + pkt, err := conn.ReadPacket() if err != nil { - readerDone <- err - return + return err } - for _, f := range frames { - videoRTCPSender.ProcessFrame(time.Now(), gortsplib.StreamTypeRTP, f) - s.parent.OnFrame(videoTrack.ID, gortsplib.StreamTypeRTP, f) - } + switch pkt.Type { + case av.H264: + if videoTrack == nil { + return fmt.Errorf("rtmp source ERR: received an H264 frame, but track is not setup up") + } - case av.AAC: - if aacConfig == nil { - readerDone <- fmt.Errorf("rtmp source ERR: received an AAC frame, but track is not setup up") - return - } + // decode from AVCC format + nalus, typ := h264.SplitNALUs(pkt.Data) + if typ != h264.NALU_AVCC { + return fmt.Errorf("invalid NALU format (%d)", typ) + } - frames, err := aacEncoder.Write(pkt.Time+pkt.CTime, pkt.Data) - if err != nil { - readerDone <- err - return - } + // encode into RTP/H264 format + frames, err := h264Encoder.Write(pkt.Time+pkt.CTime, nalus) + if err != nil { + return err + } - for _, f := range frames { - audioRTCPSender.ProcessFrame(time.Now(), gortsplib.StreamTypeRTP, f) - s.parent.OnFrame(audioTrack.ID, gortsplib.StreamTypeRTP, f) - } + for _, f := range frames { + videoRTCPSender.ProcessFrame(time.Now(), gortsplib.StreamTypeRTP, f) + s.parent.OnFrame(videoTrack.ID, gortsplib.StreamTypeRTP, f) + } - default: - readerDone <- fmt.Errorf("rtmp source ERR: unexpected packet: %v", pkt.Type) - return + case av.AAC: + if audioTrack == nil { + return fmt.Errorf("rtmp source ERR: received an AAC frame, but track is not setup up") + } + + frames, err := aacEncoder.Write(pkt.Time+pkt.CTime, pkt.Data) + if err != nil { + return err + } + + for _, f := range frames { + audioRTCPSender.ProcessFrame(time.Now(), gortsplib.StreamTypeRTP, f) + s.parent.OnFrame(audioTrack.ID, gortsplib.StreamTypeRTP, f) + } + + default: + return fmt.Errorf("rtmp source ERR: unexpected packet: %v", pkt.Type) + } } - } + }() }() for { diff --git a/main_test.go b/main_test.go index a2634184..002caea7 100644 --- a/main_test.go +++ b/main_test.go @@ -651,7 +651,8 @@ func TestSource(t *testing.T) { "rtsp_udp", "rtsp_tcp", "rtsps", - "rtmp", + "rtmp_videoaudio", + "rtmp_video", } { t.Run(source, func(t *testing.T) { switch source { @@ -730,15 +731,20 @@ func TestSource(t *testing.T) { require.Equal(t, true, ok) defer p2.close() - case "rtmp": + case "rtmp_videoaudio", "rtmp_video": cnt1, err := newContainer("nginx-rtmp", "rtmpserver", []string{}) require.NoError(t, err) defer cnt1.close() + input := "emptyvideoaudio.ts" + if source == "rtmp_video" { + input = "emptyvideo.ts" + } + cnt2, err := newContainer("ffmpeg", "source", []string{ "-re", "-stream_loop", "-1", - "-i", "emptyvideo.ts", + "-i", input, "-c", "copy", "-f", "flv", "rtmp://" + cnt1.ip() + "/stream/test", diff --git a/testimages/ffmpeg/Dockerfile b/testimages/ffmpeg/Dockerfile index 1f380e26..e4d2228b 100644 --- a/testimages/ffmpeg/Dockerfile +++ b/testimages/ffmpeg/Dockerfile @@ -3,7 +3,7 @@ FROM amd64/alpine:3.12 RUN apk add --no-cache \ ffmpeg -COPY emptyvideo.ts / +COPY *.ts / COPY start.sh / RUN chmod +x /start.sh diff --git a/testimages/ffmpeg/emptyvideoaudio.ts b/testimages/ffmpeg/emptyvideoaudio.ts new file mode 100644 index 0000000000000000000000000000000000000000..a25061ea0c73ff56c35ac1ab4c32f85ef6b77277 GIT binary patch literal 503464 zcmdSi2|QG7|3C0^EFof624fjZmKOVxn(Rx9vQ(4`A(HGBvX@YaR9Y+}ZBk0BR!c;r zC>1SsCHs~o+x)MQZhD^Q{{4SX%J07BRbyt%n9p_2nKRe-yw5q8p%xZ{=yXXUXfA@# zQ96Q-1QU#K=qv++9qtZ}9Oe$5ySCXm$Sdsj*Da?1vo3~O2nIni=8R`Y&@M#wI?IiJ zR>Z$eV`u`hGi3;kXRkxL5JAQjPaWDdYc|VHS9^p#;LGm6ef9tCFATL2c{URS*~1lx zAP8EEAi+7a6%dZ@GgySJ(w6ZUM;GJT(H@b$@=nW#N$OLM9)d6!H@{N!op?v5kD{uw=mJqYH%|vq1r-%hPsK$FYNGPC z>dN+u)WI)|7J?_p8Jp-EE>ITLUZ)G5Y42bMexd8;?(5>P)mv0iUS4T|qPzm**-qZx z?izA(yA4qUyLm$}!$)p_BIx7w|kcckgX(u3j3VcD7q=?WhW( zo(@~7N}~1-TU^}iwo?@}gUXEbMv^_Fe6UW_-|=IJorz}*hp9G$$kfZw^f zJGfdqy19ejet*y%ynMTZFZlaZCHaY4);qSjf_Lz;b8vOA+sTMB{`QOs>*?U-1nzs< zS^w2u#_K%osCJ%PMR#lgQ$aEGd>v`}8ugV7qQ{6bZ5)1C2W$A8-TP*oR!2fVx; z+^Nc=$3f^Y_EPliX6Y`t|s`+jY@ zvm}7*8XNvx_Nf#8LEC z-3x}KnVegr1`SaZd%~h*y)^!r^Ro7Sy?(xQ8+_P4sl%5l_p!&z4=&13vVWRCuZ9v> zH~W>eE?)Uc(2}sxI&QlPb|0m({H5yx#n=PS1^G*8?#fPz)zt5999{o8bmIlnIhkyf zM=y$xExRAG_@vnGmZJx_F!`8`K5`@KDYXxn#lF?F4%5!b5VPp5nUaeRnB#XemC)>? zCG=0e*yCl8RO8Te=*t%F2pxg@g^?eE3qxPbwnqEIJM2zYwNyyC2QqhJDnNGJ?x+5R zymnF6mA?2c5gF0NLOAQhUcX~f3h61Ej`e)IGsqF6A$Xdc_CBb2M0n4z$XLL-D@Qt- zO8nghG~=Ti*d^ZCJJYlKMs!ZP6Amj~_)5O_5`~!y!CjHI$;U zRF8d2h3Ggj>kF=fI-A#(AJRSWTxu7GP(gm&Uc9%WAf0JjumRIkF}|T8zNq^j_n-CF z<*Isf!j}8(*MKsRouJW*&B;6Z!npki$@*m{5^h)}znVWy%3Y{tqtLc=#VqyZi7OCQ zlJ={>+MS9wF1?fKHE6gq|E0wzZU1WuEs9R64dN*;aW8z19bSHq>mr+EZD-Sg6`$oI zi+set@x+YC_&rRV-%T-*Ql)UlMC@15M-qIFCl}ep>z0eMFF888MUPo{chpdjca~=w zyX=v9l43it*e}DkuogVkfk;%OH`9?`;`Qg5?#pBzK06=DQl)xAIBuS}@HUX0Sj+ez z2!oHs1=7mPc%hX}K@~|${A#RiMgrE-G%q%^R%Cu1F;p37V_#q8uu;9#Aw{CaBXA}8 zxyEX-VhzHY&x-}b)Xk39lRP*tovC(Mkd`*9s_x~M*_YSg3EST#h;!yfoO2pl>Q3Q3 zu_E|()2ptrkz87b3-#*r6qe2x`7BvoV|%{bSM3o$;9Iw72m3De)O`rT#@p3$F=$|v zZ4c?j+&;4d$E7dGnAgln3^huVXg+u9$YUp=_8(wV8BzRqQv54;uuO z%ky_jdG4wumm88rO6(JgL^&_dK6)Sri|!Rg4BVm*<<-=D3|F7K>d zq3dzqvf;dBRuFEDp{iPc%PQtXrEjC3g4uj9+I1RA$E+z^U}H$ zR*&`7;ad#@L3X|!YSGIMvd`N19>G1Ef8&|#qHRtO@+sZHV9lwBAPV86s(=rp7k!_< zyII-~9t0N_)Nnj8SXGi%57Fsn>mEP7q0lxT�l;#&qwPtWIy7C%mlauJg)uyq|pL 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±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 F{eMfROnU$T literal 0 HcmV?d00001