- 接入go mod

- 接入docker
- 接入github action自动发布和测试
This commit is contained in:
吴浩麟
2019-10-25 15:37:33 +08:00
parent f0cf24ac2d
commit 74da8bec14
45 changed files with 251 additions and 134 deletions

27
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,27 @@
name: release
on:
release:
types: [published]
jobs:
goreleaser:
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Set up Go 1.13
uses: actions/setup-go@v1
with:
go-version: 1.13
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v1
- name: Get dependencies
run: go mod tidy
- name: Go release
uses: goreleaser/goreleaser-action@v1
- name: Docker release
uses: elgohr/Publish-Docker-Github-Action@master
with:
name: gwuhaolin/livego
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

22
.github/workflows/test.yml vendored Normal file
View File

@@ -0,0 +1,22 @@
name: Test
on: [push]
jobs:
test:
name: Build
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest]
steps:
- name: Set up Go 1.13
uses: actions/setup-go@v1
with:
go-version: 1.13
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v1
- name: Get dependencies
run: go mod tidy
- name: Test
run: go test ./...

16
.goreleaser.yml Normal file
View File

@@ -0,0 +1,16 @@
before:
hooks:
- go mod tidy
builds:
- binary: livego
id: livego
main: ./main.go
goos:
- windows
- darwin
- linux
- freebsd
goarch:
- amd64
- 386
- arm

9
.livego.json Normal file
View File

@@ -0,0 +1,9 @@
{
"server": [
{
"appname": "live",
"liveon": "on",
"hlson": "on"
}
]
}

19
Dockerfile Normal file
View File

@@ -0,0 +1,19 @@
FROM golang:latest as builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o livego ./
FROM alpine:latest
LABEL maintainer="gwuhaolin <gwuhaolin@gmail.com>"
ENV RTMP_PORT 1935
ENV HTTP_FLV_PORT 7001
ENV HLS_PORT 7002
ENV HTTP_OPERATION_PORT 8090
COPY --from=builder /app/livego .
EXPOSE ${RTMP_PORT}
EXPOSE ${HTTP_FLV_PORT}
EXPOSE ${HLS_PORT}
EXPOSE ${HTTP_OPERATION_PORT}
CMD ./livego

View File

@@ -5,23 +5,26 @@
- 支持常用的传输协议、文件格式、编码格式;
#### 支持的传输协议
- [x] RTMP
- [x] AMF
- [x] HLS
- [x] HTTP-FLV
- RTMP
- AMF
- HLS
- HTTP-FLV
#### 支持的容器格式
- [x] FLV
- [x] TS
- FLV
- TS
#### 支持的编码格式
- [x] H264
- [x] AAC
- [x] MP3
- H264
- AAC
- MP3
## 安装
直接下载编译好的[二进制文件](https://github.com/gwuhaolin/livego/releases)后,在命令行中执行。
#### 从 Docker 启动
执行`docker run -p 1935:1935 -p 7001:7001 -p 7002:7002 -d --name livego gwuhaolin/livego`启动
#### 从源码编译
1. 下载源码 `git clone https://github.com/gwuhaolin/livego.git`
2. 去 livego 目录中 执行 `go build`

View File

@@ -1,7 +1,9 @@
package av
import "io"
import "fmt"
import (
"fmt"
"io"
)
const (
TAG_AUDIO = 8

View File

@@ -1,7 +1,9 @@
package av
import "time"
import "sync"
import (
"sync"
"time"
)
type RWBaser struct {
lock sync.Mutex

View File

@@ -2,6 +2,7 @@ package flv
import (
"errors"
"github.com/gwuhaolin/livego/av"
)

View File

@@ -1,16 +1,17 @@
package flv
import (
"flag"
"fmt"
"log"
"os"
"strings"
"time"
"flag"
"os"
"log"
"fmt"
"github.com/gwuhaolin/livego/utils/uid"
"github.com/gwuhaolin/livego/protocol/amf"
"github.com/gwuhaolin/livego/av"
"github.com/gwuhaolin/livego/protocol/amf"
"github.com/gwuhaolin/livego/utils/pio"
"github.com/gwuhaolin/livego/utils/uid"
)
var (
@@ -137,6 +138,7 @@ func (writer *FLVWriter) Info() (ret av.Info) {
ret.Key = writer.app + "/" + writer.title
return
}
type FlvDvr struct{}
func (f *FlvDvr) GetWriter(info av.Info) av.WriteCloser {

View File

@@ -2,6 +2,7 @@ package flv
import (
"fmt"
"github.com/gwuhaolin/livego/av"
)

View File

@@ -2,6 +2,7 @@ package ts
import (
"io"
"github.com/gwuhaolin/livego/av"
)

View File

@@ -2,6 +2,7 @@ package ts
import (
"testing"
"github.com/gwuhaolin/livego/av"
"github.com/stretchr/testify/assert"
)

11
go.mod Normal file
View File

@@ -0,0 +1,11 @@
module github.com/gwuhaolin/livego
go 1.13
require (
github.com/kr/pretty v0.1.0 // indirect
github.com/orcaman/concurrent-map v0.0.0-20190826125027-8c72a8bb44f6
github.com/satori/go.uuid v1.2.0
github.com/stretchr/testify v1.4.0
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
)

View File

@@ -1,11 +0,0 @@
build:
binary: livego
goos:
- windows
- darwin
- linux
- freebsd
goarch:
- amd64
- 386
- arm

View File

@@ -1,10 +0,0 @@
{
"server": [
{
"appname":"live",
"liveon":"on",
"hlson":"on"
}
]
}

View File

@@ -2,14 +2,15 @@ package main
import (
"flag"
"log"
"net"
"time"
"github.com/gwuhaolin/livego/configure"
"github.com/gwuhaolin/livego/protocol/hls"
"github.com/gwuhaolin/livego/protocol/httpflv"
"github.com/gwuhaolin/livego/protocol/httpopera"
"github.com/gwuhaolin/livego/protocol/rtmp"
"log"
"net"
"time"
)
var (
@@ -18,7 +19,7 @@ var (
httpFlvAddr = flag.String("httpflv-addr", ":7001", "HTTP-FLV server listen address")
hlsAddr = flag.String("hls-addr", ":7002", "HLS server listen address")
operaAddr = flag.String("manage-addr", ":8090", "HTTP manage interface server listen address")
configfilename = flag.String("cfgfile", "livego.cfg", "live configure filename")
configfilename = flag.String("cfgfile", ".livego.json", "configure filename")
)
func init() {

View File

@@ -3,6 +3,7 @@ package aac
import (
"errors"
"io"
"github.com/gwuhaolin/livego/av"
)

View File

@@ -4,6 +4,7 @@ import (
"bytes"
"errors"
"testing"
"github.com/stretchr/testify/assert"
)

View File

@@ -3,10 +3,11 @@ package parser
import (
"errors"
"io"
"github.com/gwuhaolin/livego/parser/mp3"
"github.com/gwuhaolin/livego/parser/aac"
"github.com/gwuhaolin/livego/av"
"github.com/gwuhaolin/livego/parser/aac"
"github.com/gwuhaolin/livego/parser/h264"
"github.com/gwuhaolin/livego/parser/mp3"
)
var (

View File

@@ -3,13 +3,14 @@ package hls
import (
"errors"
"fmt"
"log"
"net"
"net/http"
"path"
"strconv"
"strings"
"time"
"log"
"github.com/gwuhaolin/livego/av"
"github.com/orcaman/concurrent-map"
)

View File

@@ -1,15 +1,16 @@
package hls
import (
"fmt"
"time"
"bytes"
"log"
"errors"
"github.com/gwuhaolin/livego/parser"
"fmt"
"log"
"time"
"github.com/gwuhaolin/livego/av"
"github.com/gwuhaolin/livego/container/flv"
"github.com/gwuhaolin/livego/container/ts"
"github.com/gwuhaolin/livego/parser"
)
const (

View File

@@ -2,12 +2,13 @@ package httpflv
import (
"encoding/json"
"github.com/gwuhaolin/livego/av"
"github.com/gwuhaolin/livego/protocol/rtmp"
"log"
"net"
"net/http"
"strings"
"github.com/gwuhaolin/livego/av"
"github.com/gwuhaolin/livego/protocol/rtmp"
)
type Server struct {

View File

@@ -1,15 +1,16 @@
package httpflv
import (
"time"
"errors"
"fmt"
"log"
"net/http"
"github.com/gwuhaolin/livego/utils/uid"
"github.com/gwuhaolin/livego/protocol/amf"
"time"
"github.com/gwuhaolin/livego/av"
"github.com/gwuhaolin/livego/protocol/amf"
"github.com/gwuhaolin/livego/utils/pio"
"github.com/gwuhaolin/livego/utils/uid"
)
const (

View File

@@ -3,13 +3,14 @@ package httpopera
import (
"encoding/json"
"fmt"
"github.com/gwuhaolin/livego/protocol/rtmp/rtmprelay"
"io"
"log"
"net"
"net/http"
"log"
"github.com/gwuhaolin/livego/av"
"github.com/gwuhaolin/livego/protocol/rtmp"
"github.com/gwuhaolin/livego/protocol/rtmp/rtmprelay"
)
type Response struct {

View File

@@ -2,6 +2,7 @@ package cache
import (
"flag"
"github.com/gwuhaolin/livego/av"
)

View File

@@ -2,6 +2,7 @@ package cache
import (
"errors"
"github.com/gwuhaolin/livego/av"
)

View File

@@ -4,8 +4,8 @@ import (
"bytes"
"log"
"github.com/gwuhaolin/livego/protocol/amf"
"github.com/gwuhaolin/livego/av"
"github.com/gwuhaolin/livego/protocol/amf"
)
const (

View File

@@ -4,8 +4,8 @@ import (
"bytes"
"testing"
"github.com/stretchr/testify/assert"
"github.com/gwuhaolin/livego/utils/pool"
"github.com/stretchr/testify/assert"
)
func TestChunkRead1(t *testing.T) {

View File

@@ -4,8 +4,9 @@ import (
"encoding/binary"
"net"
"time"
"github.com/gwuhaolin/livego/utils/pool"
"github.com/gwuhaolin/livego/utils/pio"
"github.com/gwuhaolin/livego/utils/pool"
)
const (

View File

@@ -10,9 +10,10 @@ import (
neturl "net/url"
"strings"
"github.com/gwuhaolin/livego/protocol/amf"
"github.com/gwuhaolin/livego/av"
"log"
"github.com/gwuhaolin/livego/av"
"github.com/gwuhaolin/livego/protocol/amf"
)
var (

View File

@@ -5,9 +5,10 @@ import (
"errors"
"io"
"github.com/gwuhaolin/livego/protocol/amf"
"github.com/gwuhaolin/livego/av"
"log"
"github.com/gwuhaolin/livego/av"
"github.com/gwuhaolin/livego/protocol/amf"
)
var (

View File

@@ -4,8 +4,9 @@ import (
"bytes"
"io"
"testing"
"github.com/stretchr/testify/assert"
"github.com/gwuhaolin/livego/utils/pool"
"github.com/stretchr/testify/assert"
)
func TestConnReadNormal(t *testing.T) {

View File

@@ -4,17 +4,18 @@ import (
"errors"
"flag"
"fmt"
"github.com/gwuhaolin/livego/av"
"github.com/gwuhaolin/livego/configure"
"github.com/gwuhaolin/livego/container/flv"
"github.com/gwuhaolin/livego/protocol/rtmp/core"
"github.com/gwuhaolin/livego/utils/uid"
"log"
"net"
"net/url"
"reflect"
"strings"
"time"
"github.com/gwuhaolin/livego/av"
"github.com/gwuhaolin/livego/configure"
"github.com/gwuhaolin/livego/container/flv"
"github.com/gwuhaolin/livego/protocol/rtmp/core"
"github.com/gwuhaolin/livego/utils/uid"
)
const (
@@ -286,7 +287,7 @@ func (v *VirWriter) Write(p *av.Packet) (err error) {
}
func (v *VirWriter) SendPacket() error {
Flush := reflect.ValueOf(v.conn).MethodByName("Flush");
Flush := reflect.ValueOf(v.conn).MethodByName("Flush")
var cs core.ChunkStream
for {
p, ok := <-v.packetQueue
@@ -315,7 +316,7 @@ func (v *VirWriter) SendPacket() error {
v.closed = true
return err
}
Flush.Call(nil);
Flush.Call(nil)
} else {
return errors.New("closed")
}

View File

@@ -4,10 +4,11 @@ import (
"bytes"
"errors"
"fmt"
"github.com/gwuhaolin/livego/protocol/amf"
"github.com/gwuhaolin/livego/protocol/rtmp/core"
"io"
"log"
"github.com/gwuhaolin/livego/protocol/amf"
"github.com/gwuhaolin/livego/protocol/rtmp/core"
)
var (

View File

@@ -3,11 +3,12 @@ package rtmprelay
import (
"errors"
"fmt"
"log"
"sync"
"github.com/gwuhaolin/livego/av"
"github.com/gwuhaolin/livego/configure"
"github.com/gwuhaolin/livego/protocol/rtmp/core"
"log"
"sync"
)
type StaticPush struct {

View File

@@ -2,13 +2,14 @@ package rtmp
import (
"errors"
"log"
"strings"
"time"
"github.com/gwuhaolin/livego/av"
"github.com/gwuhaolin/livego/protocol/rtmp/cache"
"github.com/gwuhaolin/livego/protocol/rtmp/rtmprelay"
"github.com/orcaman/concurrent-map"
"log"
"strings"
"time"
)
var (

View File

@@ -2,6 +2,7 @@ package queue
import (
"sync"
"github.com/gwuhaolin/livego/av"
)

View File

@@ -2,11 +2,12 @@ package uid
import (
"encoding/base64"
"github.com/satori/go.uuid"
)
func NewId() string {
id, _ := uuid.NewV4()
id := uuid.NewV4()
b64 := base64.URLEncoding.EncodeToString(id.Bytes()[:12])
return b64
}