GithubHelp home page GithubHelp logo

gwuhaolin / livego Goto Github PK

View Code? Open in Web Editor NEW
9.5K 232.0 2.0K 2.55 MB

live video streaming server in golang

License: MIT License

Go 99.50% Dockerfile 0.21% Makefile 0.29%
livestream golang video flv flash rtmp hls h264

livego's Introduction

中文

Test Release

Simple and efficient live broadcast server:

  • Very simple to install and use;
  • Pure Golang, high performance, and cross-platform;
  • Supports commonly used transmission protocols, file formats, and encoding formats;

Supported transport protocols

  • RTMP
  • AMF
  • HLS
  • HTTP-FLV

Supported container formats

  • FLV
  • TS

Supported encoding formats

  • H264
  • AAC
  • MP3

Installation

After directly downloading the compiled binary file, execute it on the command line.

Boot from Docker

Run docker run -p 1935:1935 -p 7001:7001 -p 7002:7002 -p 8090:8090 -d gwuhaolin/livego to start

Compile from source

  1. Download the source code git clone https://github.com/gwuhaolin/livego.git
  2. Go to the livego directory and execute go build or make build

Use

  1. Start the service: execute the livego binary file or make run to start the livego service;
  2. Get a channelkey(used for push the video stream) from http://localhost:8090/control/get?room=movie and copy data like your channelkey.
  3. Upstream push: Push the video stream to rtmp://localhost:1935/{appname}/{channelkey} through the RTMP protocol(default appname is live), for example, use ffmpeg -re -i demo.flv -c copy -f flv rtmp://localhost:1935/{appname}/{channelkey} push(download demo flv);
  4. Downstream playback: The following three playback protocols are supported, and the playback address is as follows:
    • RTMP:rtmp://localhost:1935/{appname}/movie
    • FLV:http://127.0.0.1:7001/{appname}/movie.flv
    • HLS:http://127.0.0.1:7002/{appname}/movie.m3u8
  5. Use hls via https: generate ssl certificate(server.key, server.crt files), place them in directory with executable file, change "use_hls_https" option in livego.yaml to true (false by default)

all options:

./livego  -h
Usage of ./livego:
      --api_addr string       HTTP manage interface server listen address (default ":8090")
      --config_file string    configure filename (default "livego.yaml")
      --flv_dir string        output flv file at flvDir/APP/KEY_TIME.flv (default "tmp")
      --gop_num int           gop num (default 1)
      --hls_addr string       HLS server listen address (default ":7002")
      --hls_keep_after_end    Maintains the HLS after the stream ends
      --httpflv_addr string   HTTP-FLV server listen address (default ":7001")
      --level string          Log level (default "info")
      --read_timeout int      read time out (default 10)
      --rtmp_addr string      RTMP server listen address

Interested in Golang? Please see Golang Chinese Learning Materials Summary

livego's People

Contributors

berrycol avatar dgksk8life avatar dkingalpha avatar dudebing99 avatar essgeeeich avatar fzdy1914 avatar gnurub avatar gwuhaolin avatar ipv4sec avatar jaesung9507 avatar junboli-ray avatar krisnova avatar mask-pp avatar matthewgao avatar runner365 avatar sjqzhang avatar smart-servant avatar ssimuss avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

livego's Issues

multiple-value uuid.NewV4() in single-value context

go install
# github.com/gwuhaolin/livego/utils/uid
utils/uid/uuid.go:9:18: multiple-value uuid.NewV4() in single-value context

我自己的临时修复方案:

diff --git a/utils/uid/uuid.go b/utils/uid/uuid.go
index b44f53b..7593aba 100644
--- a/utils/uid/uuid.go
+++ b/utils/uid/uuid.go
@@ -6,7 +6,7 @@ import (
 )

 func NewId() string {
-       id := uuid.NewV4()
+       id, _ := uuid.NewV4()
        b64 := base64.URLEncoding.EncodeToString(id.Bytes()[:12])
        return b64
 }

延时越来越高

经过我的测试。发现打开的时候最多就1s的延时,然后就越来越高了。跟时间成正比。开2个小时的直播的时候可以延时到10s了。有谁试过么。。发错地方了。应该发flv.js的。。不知道怎么删除。作者忽略下

新手请教...怎么使用? 前端

livego我编译成功并运行了, 我通过ffmpeg xxxx -f flv rtmp://xxxxx向livego推流
但是请问, 怎么写, 我写了rtmp://xxxxx:端口号, 好几个都没效果...
能不能给点详细的使用说明.
非常感谢!!!

rtmp拉流声音发送变化

在 使用 livego 进行 rtmp 推流时, 发现 rtmp 拉流的 声音不是原来的声音,声音被改变了

Read timeout on connection

Case:
Rtmp Client connect to server, but server doesn't have any stream on it.

s := core.NewConnClient()
s.Start("rtmp://exampleurl......", "play")
s.Read() <- no time out here

In this case client connect can be open whole time

无法播放HTTP FLV的流

使用Nginx配合SRS推流可以在浏览器网络日志中看到已经获取到流了,可是在video上没有播出来,是不是我推流服务器配置有问题

关于性能问题,求助

你好,首先多谢贡献这么好的rtmp server开源。
近期我用SRS_bench对livego做性能测试,测试的设备是阿里16核的服务器。
并发publish 300路rtmp流到livego, CPU占用率比较高。
其中一个原因是内部的报文传递,都直接用的内存copy,而不是应用,导致cpu比较高。
我对大部分的接口进行了修改:
type WriteCloser interface {
Closer
Alive
CalcTime
Write(Packet) error------>Write(*Packet) error
}

type VirWriter struct {
Uid string
closed bool
av.RWBaser
conn StreamReadWriteCloser
packetQueue chan av.Packet------>packetQueue chan *av.Packet
}
等等,就不贴所有代码了,主要就是用引用传递,而不是每次都做copy。
修改后cpu占用率降下来不少。

但是目前在300路rtmp publish并发的情况下,CPU占用率还是比较高,50%左右。
定位了一下,主要cpu消耗较多的是下面这个部分:
func (s *Stream) TransStart() {
.......
for {
......
err := s.r.Read(&p)
......
//Start: 从这里开始的gop cache的处理,cpu消耗非常大!,如果注释掉这部分,性能和SRS rtmp服务器性能差不多
s.cache.Write(p)

	for item := range s.ws.IterBuffered() {
		v := item.Val.(*PackWriterCloser)
		if !v.init {
			if err = s.cache.Send(v.w); err != nil {
				log.Printf("[%s] send cache packet error: %v, remove", v.w.Info(), err)
				s.ws.Remove(item.Key)
				continue
			}
			v.init = true
		} else {
			new_packet := p
			if err = v.w.Write(&new_packet); err != nil {
				log.Printf("[%s] write packet error: %v, remove", v.w.Info(), err)
				s.ws.Remove(item.Key)
			}
		}
                    //End: 到这里结束
	}

希望能帮助看看gop cache这部分怎么优化,如果方便,是否能qq交流。这是我的邮箱: [email protected]

flv 格式有什么要求么

推送了一个flv 文件 然后报了一堆错 错误信息如下:

2018/10/12 16:01:43 source.go:141: no support video codec
2018/10/12 16:01:43 source.go:141: no support audio codec
2018/10/12 16:01:43 stream.go:207: [<key: live/sample, URL: rtmp://localhost:1935/live/sample, UID: 3Ktpgw51Tc6vyR0Z, Inter: false>] publisher closed
2018/10/12 16:01:43 source.go:170: hls source closed: <key: live/sample, URL: rtmp://localhost:1935/live/sample, UID: 3Ktpgw51Tc6vyR0Z, Inter: true>
2018/10/12 16:01:43 stream.go:216: [<key: live/sample, URL: rtmp://localhost:1935/live/sample, UID: 3Ktpgw51Tc6vyR0Z, Inter: true>] player closed and remove
2018/10/12 16:01:43 source.go:112: [<key: live/sample, URL: rtmp://localhost:1935/live/sample, UID: 3Ktpgw51Tc6vyR0Z, Inter: true>] hls sender stop
2018/10/12 16:01:43 source.go:59: send packet error: closed

推送的flv 信息如下:
Output #0, flv, to 'rtmp://localhost:1935/live/sample':
Metadata:
hasKeyframes : true
hasVideo : true
canSeekToEnd : true
datasize : 2903756
lasttimestamp : 25
audiosize : 416240
hasAudio : true
audiodelay : 0
videosize : 2485656
metadatacreator : inlet media FLVTool2 v1.0.6 - http://www.inlet-media.de/flvtool2
lastkeyframetimestamp: 25
hasMetadata : true
hasCuePoints : false
encoder : Lavf56.40.101
Stream #0:0: Video: vp6f ([4][0][0][0] / 0x0004), yuv420p, 500x300, q=2-31, 804 kb/s, 25 fps, 25 tbr, 1k tbn, 1k tbc
Stream #0:1: Audio: mp3 ([2][0][0][0] / 0x0002), 44100 Hz, stereo, 131 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[flv @ 0x1354580] Failed to update header with correct duration.ate= 920.1kbits/s
[flv @ 0x1354580] Failed to update header with correct filesize.
frame= 631 fps= 25 q=-1.0 Lsize= 2841kB time=00:00:25.28 bitrate= 920.3kbits/s
video:2419kB audio:395kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.927317%

关于建立开发文档

首先实在感谢up无私地制作了这个开源项目,让rtmp和go这两个视频后端完美融合。
但是不得不承认,这个开源项目在性能和可控性上有所欠缺。
所以某虽不才,但愿二次开发此项目,希望能尽自己的绵薄之力。
所以希望up如果可能的话,可以写一个开发文档,便于我的二次开发,或者私密我一下联系方式,找个时间大家聊一下。
实属冒昧,如有叨扰,万分歉意,祝好!

livego/protocol/rtmp/cache/cache.go文件能不能帮我说明一下

最近在看你的源代码,写的很好,就是注释太少,好多地方看不懂,能不能帮我解答一下问题:
文件:livego/protocol/rtmp/cache/cache.go
行28:func (cache *Cache) Write(p av.Packet) {
行48:if vh.IsSeq() {//这个是不是指关键帧的时候执行cache.videoSeq.Write(&p)
行58:cache.gop.Write(&p)
这个什么情况下执行
gop 对象是指什么普通帧吗

RMTP

ERROR MESSAGE ON BROWSER
flv: Unsupported codec in video

数据竞争

go run -race livego.go 出现多处WARNING: DATA RACE,因为是初学者,所以感觉无从下手!

ffmpeg 音频推流到livego失败

使用ffmpeg进行推流

  • ffmpeg -re -i audio\3.mp3 -acodec copy -vcodec copy -vn -f flv -y rtmp://localhost:1935/live/movie
  • 问题: 出现下面的提示
    image

ts分片时长在哪里设置呢?

livego/protocol/hls/cache.go maxTSCacheNum可以设置m3u8中的ts数量
livego/protocol/hls/hls.go duration = 3000,ts分片时长16.6s

视频采集用的obs

panic: invalid memory addresss

这次是真的了。。。推了2个流到livego ,前端是http + flv.js
1.不知道为啥出来的比较慢。
2.打开2个的时候第二个死活出不来,再打开就报了一个panic:runtime error:invalid memory address or nil pointer dereference
然后程序崩溃

HandshakeServer err

直接用控制台ffmpeg推送是好的。写代码起进程启动ffmpeg推送就报handleConn HandshakeServer err:rtmp:handshake version= 80 invalid。。请问何解

BUG报告,pool.go

livego/utils/pool/pool.go

const maxpoolsize = 500 * 1024

func (pool *Pool) Get(size int) []byte {
if maxpoolsize-pool.pos < size {
pool.pos = 0
pool.buf = make([]byte, maxpoolsize)
}
b := pool.buf[pool.pos: pool.pos+size]
pool.pos += size
return b
}
当此函数的size 参数大于maxpoolsize 时,出现BUG挂机了。
代码修改如下
package pool

type Pool struct {
pos int
buf []byte
max int
}

const maxpoolsize = 500 * 1024

func (pool *Pool) Get(size int) []byte {
if (pool.pos+size)>pool.max{//长度过长
pool.pos = 0
if size>maxpoolsize{
pool.max= size
}else{
pool.max= maxpoolsize
}
pool.buf = make([]byte, pool.max)
}
b := pool.buf[pool.pos : pool.pos+size]
pool.pos += size
return b
}

func NewPool() *Pool {
return &Pool{
pos:0,
max:maxpoolsize,
buf: make([]byte, maxpoolsize),
}
}

另有一个问题,这个maxpoolsize 大小是谁决定的RTMP报文最大好像只有65535为什么会越界呢?想不明白

发现一个小问题,怀疑是个bug。贴出来,作者麻烦看下哇 谢谢啦

conn.go文件

func (conn *Conn) Read(c *ChunkStream) error {
        h, _ := conn.rw.ReadUintBE(1)
	for {

		// if err != nil {
		// 	log.Println("read from conn error: ", err)
		// 	return err
		// }
		format := h >> 6
		csid := h & 0x3f
		cs, ok := conn.chunks[csid]
		if !ok {
			cs = ChunkStream{}
			conn.chunks[csid] = cs
		}
		cs.tmpFromat = format
		cs.CSID = csid
		err := cs.readChunk(conn.rw, conn.remoteChunkSize, conn.pool)
		if err != nil {
			return err
		}
		conn.chunks[csid] = cs
		if cs.full() {
			*c = cs
			break
		}
	}

	conn.handleControlMsg(c)

	conn.ack(c.Length)

	return nil
}

如果基本头base header不是一个字节,是不是应该把代码修改为:

func (conn *Conn) Read(c *ChunkStream) error {
	for {
		h, _ := conn.rw.ReadUintBE(1)
		// if err != nil {
		// 	log.Println("read from conn error: ", err)
		// 	return err
		// }
		format := h >> 6
		csid := h & 0x3f
		cs, ok := conn.chunks[csid]
		if !ok {
			cs = ChunkStream{}
			conn.chunks[csid] = cs
		}
		cs.tmpFromat = format
		cs.CSID = csid
		err := cs.readChunk(conn.rw, conn.remoteChunkSize, conn.pool)
		if err != nil {
			return err
		}

		if cs.CSID != csid {
			delete(conn.chunks, csid)
		}

		conn.chunks[cs.CSID] = cs

		if cs.full() {
			*c = cs
			break
		}
	}

	conn.handleControlMsg(c)

	conn.ack(c.Length)

	return nil
}

崩溃、http flv延时几十秒才播放

在win10 64位上使用,32位、64位的livego 均出现同样情况

使用一下命令推流:
ffmpeg -f dshow -s 640x480 -r 25 -i video="ManyCam Virtual Webcam" -preset ultrafast -vcodec libx264 -tune zerolatency -vb 700k -an -f flv rtmp://127.0.0.1/live/reflv

VLC打开http://127.0.0.1:7001/live/reflv.flv

遇到两个问题:
1、VLC一直黑屏,30秒左右之后才有画面,画面也是延时30秒
2、过一段时间livego就崩溃退出了:
2017/09/26 01:50:45 main.go:106: start livego, version 0.0.4
2017/09/26 01:50:45 main.go:40: HLS listen On :7002
2017/09/26 01:50:45 main.go:75: HTTP-FLV listen On :7001
2017/09/26 01:50:45 main.go:58: RTMP Listen On :1935
2017/09/26 01:50:46 server.go:92: url: /live/reflv.flv path: live/reflv paths: [live reflv]
2017/09/26 01:50:52 rtmp.go:88: new client, connect remote: 127.0.0.1:33544 local: 127.0.0.1:1935
2017/09/26 01:50:52 conn_server.go:280: handle publish req done
2017/09/26 01:50:52 rtmp.go:109: new publisher: <key: live/reflv, URL: rtmp://127.0.0.1/live/reflv, UID: mc9-KrQRQK-RKQ5e, Inter: false>
2017/09/26 01:50:52 hls.go:61: new hls source
2017/09/26 01:50:52 source.go:117: [<key: live/reflv, URL: rtmp://127.0.0.1/live/reflv, UID: mc9-KrQRQK-RKQ5e, Inter: true>] hls sender start
2017/09/26 01:51:14 server.go:92: url: /live/reflv.flv path: live/reflv paths: [live reflv]
2017/09/26 01:52:05 writer.go:159: http flv closed
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x20 pc=0x53768f]

goroutine 37129 [running]:
bufio.(*Writer).Flush(0xc042112440, 0xc04281cb07, 0x3ea)
/usr/local/Cellar/go/1.8.3/libexec/src/bufio/bufio.go:566 +0x5f
bufio.(*Writer).Write(0xc042112440, 0xc04281cb07, 0x31c1, 0x764f9, 0xb, 0x0, 0x0)
/usr/local/Cellar/go/1.8.3/libexec/src/bufio/bufio.go:602 +0xe6
net/http.(*response).write(0xc0420d4000, 0x31c1, 0xc04281cb07, 0x31c1, 0x764f9, 0x0, 0x0, 0xb, 0x0, 0x0)
/usr/local/Cellar/go/1.8.3/libexec/src/net/http/server.go:1525 +0x157
net/http.(*response).Write(0xc0420d4000, 0xc04281cb07, 0x31c1, 0x764f9, 0xb, 0x0, 0x0)
/usr/local/Cellar/go/1.8.3/libexec/src/net/http/server.go:1495 +0x6b
github.com/gwuhaolin/livego/protocol/httpflv.(*FLVWriter).SendPacket(0xc0420c8240, 0x0, 0x0)
/Users/halwu/go/src/github.com/gwuhaolin/livego/protocol/httpflv/writer.go:134 +0x213
github.com/gwuhaolin/livego/protocol/httpflv.NewFLVWriter.func1(0xc0420c8240)
/Users/halwu/go/src/github.com/gwuhaolin/livego/protocol/httpflv/writer.go:47 +0x36
created by github.com/gwuhaolin/livego/protocol/httpflv.NewFLVWriter
/Users/halwu/go/src/github.com/gwuhaolin/livego/protocol/httpflv/writer.go:52 +0x38e

Windows下用ffmpeg推流失败, 求帮忙

说明

环境: Windows10

由于结合flv.js使用的demo, 只给出了macos使用ffmpeg推流的方法, 在windows下-f avfoundation会报错。
去ffmpeg官网查看windows的相关命令, -f dshow和-f gdigrab -i desktop, 其中dshow本机运行时也是会报错。

命令行尝试如下:

  • 尝试录屏+推流

ffmpeg -f gdigrab -i desktop -vcodec libx264 -preset ultrafast -acodec libfaac -f flv rtmp://loc alhost/live/test

livego偶尔会提示,2018/06/17 17:19:57 writer.go:49: SendPacket error: closed

  • 尝试obs工具

成功, flv.js也能看到本机画面。

  • 尝试直接推流

ffmpeg -re -i output.flv -c copy -f flv rtmp://localhost/live/test

虽然ffmpeg没有报错, 但是livego报错了, 提示不支持的格式。

2018/06/17 17:11:09 source.go:141: no support video codec
2018/06/17 17:11:09 source.go:141: no support video codec
2018/06/17 17:11:09 source.go:141: no support video codec
2018/06/17 17:11:09 source.go:141: no support video codec
2018/06/17 17:11:09 source.go:141: no support video codec
2018/06/17 17:11:09 source.go:141: no support video codec
2018/06/17 17:11:09 source.go:141: no support video codec
2018/06/17 17:11:09 source.go:141: no support video codec
2018/06/17 17:11:09 source.go:141: no support video codec
2018/06/17 17:11:09 source.go:141: no support video codec
2018/06/17 17:11:09 source.go:141: no support video codec
2018/06/17 17:11:09 source.go:141: no support video codec
2018/06/17 17:11:09 source.go:141: no support video codec```


求帮助···会否是视频分辨率大小问题

还有其他问题:

```2018/06/17 17:24:23 rtmp.go:292: rtmp read packet panic:  runtime error: slice bounds out of range
2018/06/17 17:24:23 rtmp.go:292: rtmp read packet panic:  runtime error: slice bounds out of range
2018/06/17 17:24:23 rtmp.go:292: rtmp read packet panic:  runtime error: slice bounds out of range
2018/06/17 17:24:23 rtmp.go:292: rtmp read packet panic:  runtime error: slice bounds out of range
2018/06/17 17:24:23 rtmp.go:292: rtmp read packet panic:  runtime error: slice bounds out of range
2018/06/17 17:24:23 rtmp.go:292: rtmp read packet panic:  runtime error: slice bounds out of range
2018/06/17 17:24:23 rtmp.go:292: rtmp read packet panic:  runtime error: slice bounds out of range
2018/06/17 17:24:23 rtmp.go:292: rtmp read packet panic:  runtime error: slice bounds out of range
2018/06/17 17:24:23 rtmp.go:292: rtmp read packet panic:  runtime error: slice bounds out of range
2018/06/17 17:24:23 rtmp.go:292: rtmp read packet panic:  runtime error: slice bounds out of range
2018/06/17 17:24:23 rtmp.go:292: rtmp read packet panic:  runtime error: slice bounds out of range
2018/06/17 17:24:23 rtmp.go:292: rtmp read packet panic:  runtime error: slice bounds out of range
2018/06/17 17:24:23 rtmp.go:292: rtmp read packet panic:  runtime error: slice bounds out of range
2018/06/17 17:24:23 rtmp.go:292: rtmp read packet panic:  runtime error: slice bounds out of range
2018/06/17 17:24:23 rtmp.go:292: rtmp read packet panic:  runtime error: slice bounds out of range
2018/06/17 17:24:23 rtmp.go:292: rtmp read packet panic:  runtime error: slice bounds out of range
2018/06/17 17:24:23 rtmp.go:292: rtmp read packet panic:  runtime error: slice bounds out of range
2018/06/17 17:24:23 stream.go:207: [<key: live/test, URL: rtmp://localhost:1935/live/test, UID: UCzDyfaHSN6s_Ozj, Inter: false>] publisher closed
2018/06/17 17:24:23 source.go:170: hls source closed:  <key: live/test, URL: rtmp://localhost:1935/live/test, UID: UCzDyfaHSN6s_Ozj, Inter: true>
2018/06/17 17:24:23 stream.go:216: [<key: live/test, URL: rtmp://localhost:1935/live/test, UID: UCzDyfaHSN6s_Ozj, Inter: true>] player closed and remove
2018/06/17 17:24:23 source.go:112: [<key: live/test, URL: rtmp://localhost:1935/live/test, UID: UCzDyfaHSN6s_Ozj, Inter: true>] hls sender stop
2018/06/17 17:24:23 source.go:59: send packet error:  closed
2018/06/17 17:24:34 hls.go:85: check stop and remove:  <key: live/test, URL: rtmp://localhost:1935/live/test, UID: UCzDyfaHSN6s_Ozj, Inter: true>```

flv格式调试成功,mp3调试失败

首先感谢up主的努力,然后我用您的项目调试了,发现flv格式调试成功,但是mp3格式不成功。
命令行报错如下:
2017/11/02 14:49:15 hls.go:85: check stop and remove: <key: live/movie, URL: rtmp://localhost:1935/live/movie, UID: 01gSMWpaRGWS8-fM, Inter: true>
2017/11/02 14:49:15 rtmp.go:436: publisher <key: live/movie, URL: rtmp://localhost:1935/live/movie, UID: 01gSMWpaRGWS8-fM, Inter: false> closed: read timeout

请问能否提供低延时的推流方法?

使用rtmp观看本机的流,延时大概都要5秒左右,请问有什么方法优化呢?我用的推流命令如下:
ffmpeg -f dshow -s 640x480 -r 25 -i video="ManyCam Virtual Webcam" -preset ultrafast -vcodec libx264 -tune zerolatency -vb 700k -g 4 -an -f flv rtmp://127.0.0.1/live/reflv

两个播放端同时播放卡顿的问题

你好! 我也用go写了一个rtmp服务器(https://github.com/calabashdad/seal) 推流播放基本功能都没问题,但是两个播放端同时播放时,会出现很卡顿的问题,分发时是将推流端推上来的msg压入到播放端的channel中,播放端循环去取msg,我看了下您写的这块逻辑,也是这么处理的,但是我的就卡,您的就很流畅,一定有什么地方是我没注意到的,困扰很久能否帮忙解惑下? 谢谢

CheckAppName error

启动livego服务后,用obs推流,控制台提示 rtmp.go:118: CheckAppName err: application name=%s is not configured,随后obs断开连接。

obs推流设置:
服务器:rtmp://localhost:1935/live/movie
流密钥:test

go env:
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\MingjianW\AppData\Local\go-build
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=D:\GOPATH
set GOPROXY=
set GORACE=
set GOROOT=D:\Go
set GOTMPDIR=
set GOTOOLDIR=D:\Go\pkg\tool\windows_amd64
set GCCGO=gccgo
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\MingjianW\AppData\Local\Temp\go-build976966182=/tmp/go-build -gno-record-gcc-switches

怎么运行livego服务呀?

安装了最新版本的go,然后download zip.之后go build livego.go。不知道哪错了,没运行成功。下面是报错信息:
kvA44H.png

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.