You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lal/app/demo/pullrtmp2pushrtsp/pullrtmp2pushrtsp.go

76 lines
2.1 KiB
Go

// Copyright 2021, 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 main
import (
"flag"
"fmt"
"os"
"github.com/q191201771/lal/pkg/base"
"github.com/q191201771/lal/pkg/remux"
"github.com/q191201771/lal/pkg/rtmp"
"github.com/q191201771/lal/pkg/rtsp"
"github.com/q191201771/lal/pkg/sdp"
"github.com/q191201771/naza/pkg/nazalog"
)
func main() {
_ = nazalog.Init(func(option *nazalog.Option) {
option.AssertBehavior = nazalog.AssertFatal
})
inRtmpUrl, outRtspUrl, overTcp := parseFlag()
pullSession := rtmp.NewPullSession()
pushSession := rtsp.NewPushSession(func(option *rtsp.PushSessionOption) {
option.OverTcp = overTcp == 1
})
remuxer := remux.NewRtmp2RtspRemuxer(
func(sdpCtx sdp.LogicContext) {
// remuxer完成前期工作生成sdp并开始push
nazalog.Info("start push.")
err := pushSession.Push(outRtspUrl, sdpCtx)
nazalog.Assert(nil, err)
nazalog.Info("push succ.")
},
pushSession.WriteRtpPacket, // remuxer的数据给push发送
)
nazalog.Info("start pull.")
err := pullSession.Pull(inRtmpUrl, remuxer.FeedRtmpMsg) // pull接收的数据放入remuxer中
nazalog.Assert(nil, err)
nazalog.Info("pull succ.")
select {
case err := <-pullSession.WaitChan():
nazalog.Fatalf("pull stopped. err=%+v", err)
case err := <-pushSession.WaitChan():
nazalog.Fatalf("push stopped. err=%+v", err)
}
}
func parseFlag() (inRtmpUrl string, outRtspUrl string, overTcp int) {
i := flag.String("i", "", "specify pull rtmp url")
o := flag.String("o", "", "specify push rtsp url")
t := flag.Int("t", 0, "specify rtsp interleaved mode(rtp/rtcp over tcp)")
flag.Parse()
if *i == "" || *o == "" {
flag.Usage()
_, _ = fmt.Fprintf(os.Stderr, `Example:
%s -i rtmp://localhost:1935/live/test110 -o rtsp://localhost:5544/live/test220 -t 0
%s -i rtmp://localhost:1935/live/test110 -o rtsp://localhost:5544/live/test220 -t 1
`, os.Args[0], os.Args[0])
base.OsExitAndWaitPressIfWindows(1)
}
return *i, *o, *t
}