1). flvfile2rtmppush 增加 bininfo 2). flvfile2rtmppush error 时 panic -> log & os exit 3). build_linux.sh 直接调用 build.sh

pull/200/head
q191201771 6 years ago
parent 3ff414cb9e
commit 1394663101

@ -32,7 +32,7 @@ Go语言编写的流媒体 库 / 客户端 / 服务端
```
app/ ......各种main包的源码文件一个子目录对应一个main包即对应可生成一个可执行文件
|-- lal/ ......[最重要的] 流媒体服务器
|-- flvfile2rtmppush ......rtmp推流客户端输入是本地flv文件
|-- flvfile2rtmppush ......rtmp推流客户端输入是本地flv文件文件推送完毕后可循环推送rtmp push流并不断开
|-- rtmppull ......rtmp拉流客户端
|-- httpflvpull ......http-flv拉流客户端
|-- modflvfile ......修改本地flv文件
@ -50,10 +50,13 @@ conf/ ......配置文件目录
```
$go get -u github.com/q191201771/lal
# cd into lal
# cd into $GOPATH/src/github.com/q191201771/lal
$./build.sh
$./bin/lal -c conf/lal.conf.json
#如果使用 go module
$git clone https://github.com/q191201771/lal.git && cd lal && ./build.sh
```
#### 配置文件说明

@ -2,18 +2,19 @@ package main
import (
"flag"
"fmt"
"github.com/q191201771/lal/pkg/httpflv"
"github.com/q191201771/lal/pkg/rtmp"
"github.com/q191201771/nezha/pkg/errors"
"github.com/q191201771/nezha/pkg/bininfo"
"github.com/q191201771/nezha/pkg/log"
"io"
"os"
"time"
)
// 将flv文件通过rtmp协议推送至rtmp服务器
//rtmp推流客户端输入是本地flv文件文件推送完毕后可循环推送rtmp push流并不断开
//
// -r 表示当文件推送完毕后是否循环推送rtmp push流并不断开
// -r 为1时表示当文件推送完毕后是否循环推送rtmp push流并不断开
//
// Usage:
// ./bin/flvfile2rtmppush -r 1 -i /tmp/test.flv -o rtmp://push.xxx.com/live/testttt
@ -23,13 +24,15 @@ func main() {
flvFileName, rtmpPushURL, isRecursive := parseFlag()
log.Info(bininfo.StringifySingleLine())
ps := rtmp.NewPushSession(rtmp.PushSessionTimeout{
ConnectTimeoutMS:3000,
PushTimeoutMS:5000,
WriteAVTimeoutMS:10000,
ConnectTimeoutMS: 3000,
PushTimeoutMS: 5000,
WriteAVTimeoutMS: 10000,
})
err = ps.Push(rtmpPushURL)
errors.PanicIfErrorOccur(err)
log.FatalIfErrorNotNil(err)
log.Infof("push succ. url=%s", rtmpPushURL)
var totalBaseTS uint32
@ -43,11 +46,11 @@ func main() {
var ffr httpflv.FlvFileReader
err = ffr.Open(flvFileName)
errors.PanicIfErrorOccur(err)
log.FatalIfErrorNotNil(err)
log.Infof("open succ. filename=%s", flvFileName)
flvHeader, err := ffr.ReadFlvHeader()
errors.PanicIfErrorOccur(err)
log.FatalIfErrorNotNil(err)
log.Infof("read flv header succ. %v", flvHeader)
hasReadThisBaseTS = false
@ -58,7 +61,7 @@ func main() {
log.Info("EOF")
break
}
errors.PanicIfErrorOccur(err)
log.FatalIfErrorNotNil(err)
// TODO chef: 转换代码放入lal某个包中
var h rtmp.Header
@ -81,7 +84,7 @@ func main() {
//log.Debugf("CHEFERASEME write metadata.")
chunks := rtmp.Message2Chunks(tag.Raw[11:11+h.MsgLen], &h, rtmp.LocalChunkSize)
err = ps.TmpWrite(chunks)
errors.PanicIfErrorOccur(err)
log.FatalIfErrorNotNil(err)
} else {
// noop
}
@ -114,7 +117,7 @@ func main() {
time.Sleep(time.Duration(diff) * time.Millisecond)
//log.Debug("send")
err = ps.TmpWrite(chunks)
errors.PanicIfErrorOccur(err)
log.FatalIfErrorNotNil(err)
prevTS = h.Timestamp
}
@ -128,10 +131,15 @@ func main() {
}
func parseFlag() (string, string, bool) {
v := flag.Bool("v", false, "show bin info")
i := flag.String("i", "", "specify flv file")
o := flag.String("o", "", "specify rtmp push url")
r := flag.Bool("r", false, "recursive push if reach end of file")
flag.Parse()
if *v {
_, _ = fmt.Fprint(os.Stderr, bininfo.StringifyMultiLine())
os.Exit(1)
}
if *i == "" || *o == "" {
flag.Usage()
os.Exit(1)

@ -32,7 +32,7 @@ func parseFlag() string {
cf := flag.String("c", "", "specify conf file")
flag.Parse()
if *binInfoFlag {
fmt.Fprint(os.Stderr, bininfo.StringifyMultiLine())
_, _ = fmt.Fprint(os.Stderr, bininfo.StringifyMultiLine())
os.Exit(1)
}
if *cf == "" {

@ -19,9 +19,9 @@ func main() {
url := parseFlag()
var obs Obs
session := rtmp.NewPullSession(obs, rtmp.PullSessionTimeout{
ConnectTimeoutMS:3000,
PullTimeoutMS:5000,
ReadAVTimeoutMS:10000,
ConnectTimeoutMS: 3000,
PullTimeoutMS: 5000,
ReadAVTimeoutMS: 10000,
})
err := session.Pull(url)
errors.PanicIfErrorOccur(err)

@ -3,7 +3,6 @@
set -x
ROOT_DIR=`pwd`
echo ${ROOT_DIR}/bin
if [ ! -d ${ROOT_DIR}/bin ]; then
mkdir bin
@ -15,17 +14,18 @@ GitStatus=`git status -s`
BuildTime=`date +'%Y.%m.%d.%H%M%S'`
BuildGoVersion=`go version`
cd ${ROOT_DIR}/app/lal && \
go build -ldflags " \
LDFlags=" \
-X 'github.com/q191201771/nezha/pkg/bininfo.GitCommitLog=${GitCommitLog}' \
-X 'github.com/q191201771/nezha/pkg/bininfo.GitStatus=${GitStatus}' \
-X 'github.com/q191201771/nezha/pkg/bininfo.BuildTime=${BuildTime}' \
-X 'github.com/q191201771/nezha/pkg/bininfo.BuildGoVersion=${BuildGoVersion}' \
" -o ${ROOT_DIR}/bin/lal
"
cd ${ROOT_DIR}/app/flvfile2es && go build -o ${ROOT_DIR}/bin/flvfile2es
cd ${ROOT_DIR}/app/lal && go build -ldflags "$LDFlags" -o ${ROOT_DIR}/bin/lal
cd ${ROOT_DIR}/app/flvfile2rtmppush && go build -ldflags "$LDFlags" -o ${ROOT_DIR}/bin/flvfile2rtmppush
cd ${ROOT_DIR}/app/flvfile2rtmppush && go build -o ${ROOT_DIR}/bin/flvfile2rtmppush
cd ${ROOT_DIR}/app/flvfile2es && go build -o ${ROOT_DIR}/bin/flvfile2es
cd ${ROOT_DIR}/app/httpflvpull && go build -o ${ROOT_DIR}/bin/httpflvpull

@ -2,36 +2,6 @@
set -x
ROOT_DIR=`pwd`
echo ${ROOT_DIR}/bin
if [ ! -d ${ROOT_DIR}/bin ]; then
mkdir bin
fi
#GitCommitID=`git log --pretty=format:'%h' -n 1`
GitCommitLog=`git log --pretty=oneline -n 1`
GitStatus=`git status -s`
BuildTime=`date +'%Y.%m.%d.%H%M%S'`
BuildGoVersion=`go version`
cd ${ROOT_DIR}/app/lal && \
GOOS=linux GOARCH=amd64 go build -ldflags " \
-X 'github.com/q191201771/nezha/pkg/bininfo.GitCommitLog=${GitCommitLog}' \
-X 'github.com/q191201771/nezha/pkg/bininfo.GitStatus=${GitStatus}' \
-X 'github.com/q191201771/nezha/pkg/bininfo.BuildTime=${BuildTime}' \
-X 'github.com/q191201771/nezha/pkg/bininfo.BuildGoVersion=${BuildGoVersion}' \
" -o ${ROOT_DIR}/bin/lal.linux
cd ${ROOT_DIR}/app/flvfile2es && GOOS=linux GOARCH=amd64 go build -o ${ROOT_DIR}/bin/flvfile2es
cd ${ROOT_DIR}/app/flvfile2rtmppush && GOOS=linux GOARCH=amd64 go build -o ${ROOT_DIR}/bin/flvfile2rtmppush.linux
cd ${ROOT_DIR}/app/httpflvpull && GOOS=linux GOARCH=amd64 go build -o ${ROOT_DIR}/bin/httpflvpull
cd ${ROOT_DIR}/app/modflvfile && GOOS=linux GOARCH=amd64 go build -o ${ROOT_DIR}/bin/modflvfile
cd ${ROOT_DIR}/app/rtmppull && GOOS=linux GOARCH=amd64 go build -o ${ROOT_DIR}/bin/rtmppull
${ROOT_DIR}/bin/lal -v
ls -lrt ${ROOT_DIR}/bin
export GOOS=linux
export GOARCH=amd64
sh build.sh

@ -2,4 +2,4 @@ module github.com/q191201771/lal
go 1.12
require github.com/q191201771/nezha v0.0.1
require github.com/q191201771/nezha v0.0.2-0.20190904074707-20fd1445a085

@ -1,2 +1,2 @@
github.com/q191201771/nezha v0.0.1 h1:WVHhbw98eYrGBcznuErr1hGeNzBeoxHh5hNRErc6ofY=
github.com/q191201771/nezha v0.0.1/go.mod h1:Rd4R+bJRemlSUnz7KHmSX6ZQlsHLBjT7wlzuLeOia/M=
github.com/q191201771/nezha v0.0.2-0.20190904074707-20fd1445a085 h1:S6/SulRptcCXgV6hbbWGgqiKmMLf7iXHjT6Qomj5qdk=
github.com/q191201771/nezha v0.0.2-0.20190904074707-20fd1445a085/go.mod h1:Rd4R+bJRemlSUnz7KHmSX6ZQlsHLBjT7wlzuLeOia/M=

@ -5,7 +5,6 @@ package rtmp
// 将message切割成chunk
import (
"github.com/q191201771/nezha/pkg/log"
"github.com/q191201771/nezha/pkg/bele"
)
@ -84,7 +83,7 @@ func calcHeader(header *Header, prevHeader *Header) []byte {
// 设置扩展时间戳
if timestamp > maxTimestampInMessageHeader {
log.Debugf("CHEFERASEME %+v %+v %d %d", header, prevHeader, timestamp, index)
//log.Debugf("CHEFERASEME %+v %+v %d %d", header, prevHeader, timestamp, index)
bele.BEPutUint32(out[index:], timestamp)
index += 4
}

@ -168,7 +168,7 @@ func (s *ClientSession) doMsg(stream *Stream) error {
}
func (s *ClientSession) doAck(stream *Stream) error {
seqNum := bele.BEUint32(stream.msg.buf[stream.msg.b: stream.msg.e])
seqNum := bele.BEUint32(stream.msg.buf[stream.msg.b:stream.msg.e])
log.Infof("-----> Acknowledgement. [%s] ignore. sequence number=%d.", s.UniqueKey, seqNum)
return nil
}

@ -91,7 +91,7 @@ func (group *Group) DelSubSession(session *ServerSession) {
func (group *Group) Pull(addr string, connectTimeout int64) {
// TODO chef: config me,
group.pullSession = NewPullSession(group, PullSessionTimeout{
ConnectTimeoutMS:int(connectTimeout),
ConnectTimeoutMS: int(connectTimeout),
})
defer func() {

@ -23,7 +23,7 @@ const (
TypeidVideo = 9
TypeidDataMessageAMF0 = 18 // meta
typeidSetChunkSize = 1
typeidAck = 3
typeidAck = 3
typeidUserControl = 4
typeidWinAckSize = 5
typeidBandwidth = 6

Loading…
Cancel
Save