// Copyright 2022, Chef. All rights reserved. // https://github.com/q191201771/lal // // Use of this source code is governed by a MIT-style license // that can be found in the License file. // // Author: Chef (191201771@qq.com) package gb28181 import ( "encoding/hex" "fmt" "github.com/q191201771/lal/pkg/base" "github.com/q191201771/naza/pkg/nazalog" "github.com/q191201771/naza/pkg/nazanet" "io/ioutil" "os" "testing" "time" ) func TestPubSession(t *testing.T) { //testPubSession() } func testPubSession() { // 一个udp包一个文件,按行分隔,hex stream格式如下 // 8060 0000 0000 0000 0beb c567 0000 01ba // 46ab 1ea9 4401 0139 9ffe ffff 0094 ab0d fp, err := os.Create("/tmp/udp2.h264") nazalog.Assert(nil, err) defer fp.Close() fp2, err := os.Create("/tmp/udp2.aac") nazalog.Assert(nil, err) defer fp2.Close() pool := nazanet.NewAvailUdpConnPool(1024, 10240) port, err := pool.Peek() nazalog.Assert(nil, err) addr := fmt.Sprintf("127.0.0.1:%d", port) session := NewPubSession().WithOnAvPacket(func(packet *base.AvPacket) { nazalog.Infof("[test2] onAvPacket. packet=%s", packet.DebugString()) if packet.IsAudio() { _, _ = fp2.Write(packet.Payload) } else if packet.IsVideo() { _, _ = fp.Write(packet.Payload) } }) go func() { time.Sleep(100 * time.Millisecond) conn, err := nazanet.NewUdpConnection(func(option *nazanet.UdpConnectionOption) { option.RAddr = addr }) nazalog.Assert(nil, err) for i := 1; i < 1000; i++ { //filename := fmt.Sprintf("/tmp/rtp-h264-aac/%d.ps", i) filename := fmt.Sprintf("/tmp/rtp-ps-video/%d.ps", i) b, err := ioutil.ReadFile(filename) nazalog.Assert(nil, err) nazalog.Debugf("[test] %d: %s", i, hex.EncodeToString(b[12:])) conn.Write(b) } }() runErr := session.RunLoop(addr) nazalog.Assert(nil, runErr) }