🔥 Golang live stream lib/client/server. support RTMP/RTSP/HLS/HTTP[S]-FLV/HTTP-TS, H264/H265/AAC, relay, cluster, record, HTTP API/Notify, GOP cache. 官方文档见 https://pengrl.com/lal

Overview

Live And Live




lal是一个开源GoLang直播流媒体网络传输项目,包含三个主要组成部分:

  • lalserver:流媒体转发服务器。类似于nginx-rtmp-module等应用,但支持更多的协议,提供更丰富的功能。lalserver简介
  • demo:一些小应用,比如推、拉流客户端,压测工具,流分析工具,调度示例程序等。类似于ffmpeg、ffprobe等应用。Demo简介
  • pkg:流媒体协议库。类似于ffmpeg的libavformat等库。

lal源码package架构图:

lal源码package架构图

lalserver特性图:

lalserver特性图

了解更多请访问:

联系作者:

  • email:[email protected]
  • 微信:q191201771
  • QQ:191201771
  • 微信群: 加我微信好友后,告诉我拉你进群
  • QQ群: 1090510973
Comments
  • rtmp推流大小分辨率超过平时常规大小宽度 HLS切片不能正常工作?

    rtmp推流大小分辨率超过平时常规大小宽度 HLS切片不能正常工作?

    因为需要测试一些拼接后的视频推流,视频分辨率大小非常规大小,推流后 切片HLS和其它的都工作不正常 Server : NGINX RTMP (github.com/arut/nginx-rtmp-module) displayWidth : 4096 displayHeight : 2048 fps : 0 profile : level : encoder : Lavf58.45.100 Stream #0:0: Video: h264 ([7][0][0][0] / 0x0007), yuv420p(progressive), 4096x2048 [SAR 1:1 DAR 2 :1], q=2-31, 1999 kb/s, 7.50 fps, 15 tbr, 1k tbn, 1k tbc

    推流4096 X 2048大小后 hls切片 flv等 都不能正常工作,自动切片识别为1920*1088的视频大小,图像也无内容了 其它的flv也是

    #Bug *Solved 
    opened by sboy2000 11
  • Unble push stream to Wowza RTMP Server with authencation

    Unble push stream to Wowza RTMP Server with authencation

    Hi all, I am trying push rtmp to wowza with user and password but i cann't work. without password, it still works normally

    My command format: pullrtsp2pushrtmp.go -i rtsp://root:@xxx.196:8555/live1s2.sdp -o rtmp://xxx:1935/hung/mystream -t 0

    image

    Plz help me Tks u

    *PR accepted #Feature 
    opened by hungnt1 10
  • RTSP拉流时,如果缺少sprop-parameter-sets字段,则拉流失败

    RTSP拉流时,如果缺少sprop-parameter-sets字段,则拉流失败

    拉取海康威视NVR 回看流时,因为缺少sprop-parameter-sets字段,导致拉流失败。

    程序读到的Describe返回如下:

    2021/05/20 17:59:05.485378 DEBUG [RTSPPULL1] > write OPTIONS. - client_command_session.go:530
    2021/05/20 17:59:05.529151 DEBUG [RTSPPULL1] < read response. version=RTSP/1.0, code=200, reason=OK, headers=map[CSeq:2 Date:Thu, 20 May 2021 09:59:05 GMT Public:OPTIONS, DESCRIBE, SETUP, PLAY, TEARDOWN, PAUSE, SET_PARAMETER, GET_PARAMETER], body= - client_command_session.go:548
    2021/05/20 17:59:05.529264 DEBUG [RTSPPULL1] > write DESCRIBE. - client_command_session.go:530
    2021/05/20 17:59:05.589633 DEBUG [RTSPPULL1] < read response. version=RTSP/1.0, code=200, reason=OK, headers=map[CSeq:3 Content-Length:605 Content-Type:application/sdp Date:Thu, 20 May 2021 09:59:05 GMT], body=v=0
    o=- 1109162014219182 0 IN IP4 0.0.0.0
    s=HIK Media Server V3.4.106
    i=HIK Media Server Session Description : standard
    e=NONE
    c=IN IP4 0.0.0.0
    t=0 0
    a=control:*
    b=AS:4106
    a=range:clock=20210520T063812Z-20210520T064816Z
    m=video 0 RTP/AVP 96
    i=Video Media
    a=rtpmap:96 H264/90000
    a=fmtp:96 profile-level-id=4D0014;packetization-mode=0
    a=control:trackID=video
    b=AS:4096
    m=audio 0 RTP/AVP 98
    i=Audio Media
    a=rtpmap:98 G7221/16000
    a=control:trackID=audio
    b=AS:10
    a=Media_header:MEDIAINFO=494D4B48020100000400000121720110803E0000803E000000000000000000000000000000000000;
    a=appversion:1.0
     - client_command_session.go:548
    
    

    使用wireshark抓包也验证了这个情况

    #Bug *Solved #Feature 
    opened by asdfsx 10
  • hevc 265 problem audio rtsp and block image and not support rtmp and flv server

    hevc 265 problem audio rtsp and block image and not support rtmp and flv server

    hi

    hevc 265 problem audio rtsp and block image and not support rtmp and flv server

    error not support ac3 : ffmpeg -i input -c:v copy -c:a copy -f rtsp rtsp://host:port/id


    good run : ffmpeg -i input -c:v copy -c:a aac -f rtsp rtsp://host:port/id

    ffmpeg : image hevc frezzz and not audio ac3 @ 0x55c229397c40] expacc 126 is out-of-range.26 bitrate=N/A speed=1.04x
    [ac3 @ 0x55c229397c40] error decoding the audio block

    app lal : 2021/05/04 14:47:31.353880 ERROR invalid position. pos=0 - rtp_unpacker_avc_hevc.go:190 2021/05/04 14:47:31.353950 ERROR invalid position. pos=0 - rtp_unpacker_avc_hevc.go:190 2021/05/04 14:47:31.354015 ERROR invalid position. pos=0 - rtp_unpacker_avc_hevc.go:190

    #Bug *Waiting reply *Timeout 
    opened by goliveok 10
  • 推送H265的rtsp流接收的时候 会产生大量一直发报错

    推送H265的rtsp流接收的时候 会产生大量一直发报错

    在推送H265格式的rtsp流接收的时候 会产生大量一直发报错 推送的ffmpeg -re -i h265.mp4 -c:v copy -c:a copy -f rtsp rtsp://127.0.0.1:5544/live/test 使用的是修改版本的ffmpeg 就是对rtmp也支持H265的 就是共同定义id为12的。 测试使用rtmp推h265失败,PS:可以考虑后期兼容支持 RTMP H265 目前使用rtsp推送的h265 后 log不停每秒产生大量ERROR:

    2022/04/07 00:42:25.170983 ERROR invalid position. pos=0 - rtp_unpacker_avc_hevc.go:192 2022/04/07 00:42:25.171985 ERROR invalid position. pos=0 - rtp_unpacker_avc_hevc.go:192 2022/04/07 00:42:25.191038 ERROR invalid position. pos=0 - rtp_unpacker_avc_hevc.go:192 2022/04/07 00:42:25.191038 ERROR invalid position. pos=0 - rtp_unpacker_avc_hevc.go:192 2022/04/07 00:42:25.192039 ERROR invalid position. pos=0 - rtp_unpacker_avc_hevc.go:192 2022/04/07 00:42:25.193041 ERROR invalid position. pos=0 - rtp_unpacker_avc_hevc.go:192 2022/04/07 00:42:25.194044 ERROR invalid position. pos=0 - rtp_unpacker_avc_hevc.go:192 2022/04/07 00:42:25.194044 ERROR invalid position. pos=0 - rtp_unpacker_avc_hevc.go:192 2022/04/07 00:42:25.195046 ERROR invalid position. pos=0 - rtp_unpacker_avc_hevc.go:192 2022/04/07 00:42:25.196049 ERROR invalid position. pos=0 - rtp_unpacker_avc_hevc.go:192

    测试环境是windows

    #Bug *Solved 
    opened by sboy2000 9
  • [接口] /api/ctrl/start_pull 如何使用?

    [接口] /api/ctrl/start_pull 如何使用?

    頻道地址:佛教2,rtmp://hk2.hwadzan.com/liveedge/amtb

    測試播放:ffplay rtmp://hk2.hwadzan.com/liveedge/amtb

    1. 指令: curl -H "Content-Type:application/json" -X POST -d '{"protocol": "rtmp", "addr":"hk2.hwadzan.com", "app_name":"liveedge", "stream_name":"amtb"}' http://127.0.0.1:8083/api/ctrl/start_pull

    錯誤訊息: lalserver.go

    2021/11/26 18:54:06.805791 DEBUG group size=0 - server_manager.go:244
    2021/11/26 18:54:36.801188 DEBUG group size=0 - server_manager.go:244
    2021/11/26 18:54:37.140985  INFO http api start pull. req info={Protocol:rtmp Addr:hk2.hwadzan.com AppName:liveedge StreamName:amtb UrlParam:} - http_api.go:115
    2021/11/26 18:54:37.141042  WARN group not exist, ignore start pull. streamName=amtb - server_manager.go:327
    2021/11/26 18:55:06.801238 DEBUG group size=0 - server_manager.go:244
    
    1. 靜態設定: lalserver.conf.json "relay_pull": { "enable": false, "addr": "" },

    可以給個範例或是說明以上兩個怎麼使用嗎?

    不太懂這邊的流程和指令應該怎麼下。謝謝

    我的理解是 1. 指令要拉取遠端流,卻去判斷 group 是否存在? 這不是很奇怪嗎

    #Bug *Solved 
    opened by opo2000tw 9
  • pub接入自定义流 数据帧部分与接入相机流不一致

    pub接入自定义流 数据帧部分与接入相机流不一致

    首先感谢大佬的项目👍👍👍

    需求

    基于lal库做自己的应用,通过自定义流,接入lalserver服务,以rtsp的形式提供给第三方使用。

    版本

    v0.30.1

    实现

    自定义二次开发参考 customize_lalserver.go已实现。

    差异

    自定义流与接入相机流后,第三方应用从lalserver拉取rtsp的时候,数据帧中的sps和pps有区别。

    • 直接接入相机流(RTSP H264),sdp回调有sps和pps,数据帧也有完整sps和pps。

    • 自定义接入流时,sdp回调中有sps和pps,数据帧中没有sps和pps。

    影响

    会给第三方应用(比如录像)带来额外的工作量

    image

    解决方式

    自己做了个简单处理,在判断是关键帧时,关键处追加了sps和pps信息。

    spps := append(r.sps[:], append(avc.NaluStartCode4, r.pps...)...)
    nal = append(spps, append(avc.NaluStartCode4, nal...)...)
    r.clearVideoSeqHeader()
    

    https://github.com/q191201771/lal/blob/82f092128f584aedb7bf2b2e02acdbc9e0416b68/pkg/remux/avpacket2rtmp.go#L197

    *PR accepted #Opt 
    opened by fallowu 8
  • 无法转发带token验证的rtsp链接的疑问

    无法转发带token验证的rtsp链接的疑问

    首先感谢作者的开源和帮助

    1. 我用ffmpeg 进行了普通rtsp推流,lal能够正常转发和转流。
    2. 对于一台nvr的 rtsp://xxxxxxx?token=12345, lal不能正常转发

    我想问一下,请问代码里面对于 第二种 使用场景目前有支持吗,如果有支持的话,我再检查下

    如果没有支持的话,可以告诉我一下在哪里改吗,我可以自己改了再PR给本项目

    谢谢

    #Bug #Question *Waiting reply *Timeout 
    opened by skanger 8
  • pullrtmp2pushrtmp 转推地址部分平台无法解析

    pullrtmp2pushrtmp 转推地址部分平台无法解析

    视频号推流地址(无法转推) rtmp://111583.livepush.myqcloud.com/trtc_1400439699/live_2078417772407243576?txSecret=a406ad944287c4a54bfeff63d4b8bea7&txTime=626785A5 B站地址(无法转推) rtmp://live-push.bilivideo.com/live-bvc/?streamname=live_520152711_16309405&key=b35c1c447e10134e5e4ef9de161e1235&schedule=rtmp&pflag=1

    快手地址(可以转推) rtmp://open-push.voip.yximgs.com/gifshow/kwai_actL_ol_act_9452380093_strL_origin?sign=62971bf6-f52fdaf4e7c3c77e51264cfa9b1b94b7&ks_fix_ts

    lal自己地址(可以转推) rtmp://127.0.0.1/live/test220

    *Solved #Question 
    opened by talway 6
  • crash issues

    crash issues

    2022/03/17 10:12:32.695575 ^[[22;31mERROR ^[[0m[RTMP2MPEGTS16] invalid audio message length. len=2 - rtmp2mpegts.go:281
    2022/03/17 10:12:33.639745 ^[[22;31mERROR ^[[0m[RTMP2MPEGTS17] invalid audio message length. len=2 - rtmp2mpegts.go:281
    2022/03/17 10:12:35.158588 ^[[22;31mERROR ^[[0m[RTMP2MPEGTS18] invalid audio message length. len=2 - rtmp2mpegts.go:281
    2022/03/17 10:12:35.651467 ^[[22;31mERROR ^[[0m[RTMP2MPEGTS19] invalid audio message length. len=2 - rtmp2mpegts.go:281
    2022/03/17 10:12:35.742931 ^[[22;31mERROR ^[[0m[RTMP2MPEGTS20] invalid audio message length. len=2 - rtmp2mpegts.go:281
    2022/03/17 10:12:37.159199 ^[[22;31mERROR ^[[0m[RTMP2MPEGTS21] invalid audio message length. len=2 - rtmp2mpegts.go:281
    2022/03/17 10:12:37.254519 ^[[22;31mERROR ^[[0m[RTMP2MPEGTS22] invalid audio message length. len=2 - rtmp2mpegts.go:281
    2022/03/17 10:12:43.073283 ^[[22;31mERROR ^[[0m[RTMP2MPEGTS23] invalid audio message length. len=2 - rtmp2mpegts.go:281
    2022/03/17 10:12:45.847994 ^[[22;31mERROR ^[[0m[RTMP2MPEGTS21] invalid video message length. header={Csid:6 MsgLen:5 MsgTypeId:9 MsgStreamId:1 TimestampAbs:8680}, payload=00000000  17 02 0>
     - rtmp2mpegts.go:148
    2022/03/17 10:12:49.777507 ^[[22;31mERROR ^[[0m[RTMP2MPEGTS24] invalid audio message length. len=2 - rtmp2mpegts.go:281
    
    
    #Bug #Question 
    opened by testermania 6
  • RTSP 1080视频花屏

    RTSP 1080视频花屏

    测试环境

    • 测试版本:lal_v0.19.1_linux,默认配置

    出现问题

    • RTSP over udp 推流1080p视频: ffmpeg -re -stream_loop -1 -i "bbb_sunflower_1080p_30fps_normal.mp4" -an -vcodec copy -f rtsp rtsp://localhost:5544/live/test110
    • ffplay播放rtsp,看几秒钟后兔子出洞后花屏,每次重新播放花屏的时间和位置都一样。
    • 转rtmp播放或者改为rtsp over tcp推流均没有问题
    • RTSP over udp 推流小码流文件(source.200kbps.768x320.flv)没有这个问题

    测试资源

    • bbb_sunflower_1080p_30fps_normal.mp4 国外
    • bbb_sunflower_1080p_30fps_normal.mp4 国内
    #Bug *Answered 
    opened by ChungTak 6
  • 关于文档中命名PushSession, PullSession, PubSession, SubSession的疑问

    关于文档中命名PushSession, PullSession, PubSession, SubSession的疑问

    官方文档中提到:

    A连接B,A向B发送数据:
    
    A | --connect--> | B
      | --av data--> |
    上面这种情况:
    
    A属于ClientSession+OutSession,我们称之为PushSession
    B属于ServerSession+InSession,我们称之为PubSession
    另一种情况,A连接B,B向A发送数据:
    
    A | --connect--> | B
      | <--av data-- |
    上面这种情况:
    
    A属于ClientSession+InSession,我们称之为PullSession
    B属于ServerSession+OutSession,我们称之为SubSession
    

    ========================================

    我的疑问是: ServerSession+InSession,为什么叫PubSession? Publish不应该是发布出去,out的方向吗?

    ServerSession+OutSession,为什么叫SubSession? Subscribe是订阅别人的消息,in的方向

    我对PullSession和PushSession的理解没有问题,但是PubSession和SubSession我理解和文档是相反的

    #Question *In process 
    opened by coolmian 4
  • Save video livestream after finish

    Save video livestream after finish

    i want save video livestream after finish to cloud storage, I wil open service down hls link and push to S3. Is there a better and more optimal way than what I'm planning to do? Thank you so much ?

    #Question 
    opened by Nghiait123456 1
  • After API post server not store changes

    After API post server not store changes

    Describe how to replicate the issue:

    • enable API in config
    • start the server
    • change something with API or add new start_relay_pull
    • restart the server result: config file not changed, old config loaded @q191201771
    #Question *In process 
    opened by huycxview 7
  • 自定义推流情况下 hls和flv首屏播放和延迟时间相差30+秒

    自定义推流情况下 hls和flv首屏播放和延迟时间相差30+秒

    流程: 1 jt1078推流 2 rtsp拉流 rtsp://49.234.235.7:5544/test 3 使用2的拉流去推流 start_relay_pull接口 stream_name=test110 auto_stop_pull_after_no_out_ms=15000000 4 使用3的test110拉流 http://49.234.235.7:8080/hls/test110.m3u8

    问题: 1 这几个流我都打开了 然后发现hls的打开延迟30+秒 并且和flv或rtsp流的也是差30+秒 2 是因为什么处理异常吗 导致session.FeedAvPacket处理较慢或者卡着了 1662103958302

    1662104402229

           const (
    		customizePubStreamName = "test"
    	)
    	session, err := lals.AddCustomizePubSession(customizePubStreamName)
    	nazalog.Assert(nil, err)
    	session.WithOption(func(option *base.AvPacketStreamOption) {
    		option.VideoFormat = base.AvPacketStreamVideoFormatAnnexb
    	})
    	oldData := map[jt1078.DataType][]byte{}
    	videoPacketCh := make(chan protocol.Message, 10)
    	go func() {
    		var (
    			once          sync.Once
    			startTs       int64
    			startRealTime time.Time
    		)
    		for v := range videoPacketCh {
    			once.Do(func() {
    				startTs = v.Timestamp
    				startRealTime = time.Now()
    			})
    			diffTs := v.Timestamp - startTs
    			diffReal := time.Now().Sub(startRealTime).Milliseconds()
    			fmt.Println(fmt.Sprintf("[%s] [%s] len[%d] timestamp[%d] [%d] [%d] ts-[%d] rl-[%d]",
    				v.DataType.String(), v.SubPackageType.String(), len(v.Data), v.Timestamp,
    				v.LastIFrameInterval, v.LastFrameInterval, diffTs, diffReal))
    			if diffTs > diffReal {
    				time.Sleep(time.Duration(diffTs-diffReal) * time.Millisecond)
    				if diffTs > diffReal+50 && v.DataType == jt1078.DataTypeI0000 {
    					startTs = v.Timestamp
    					startRealTime = time.Now()
    				}
    			}
    			packet := base.AvPacket{
    				PayloadType: base.AvPacketPtAvc,
    				Timestamp:   v.Timestamp,
    				Payload:     v.Data,
    			}
    			session.FeedAvPacket(packet)
    		}
    	}()
    
    	for {
    		msg := <-testMsg
    		isComplete := false
    		switch msg.SubPackageType {
    		case jt1078.SubPackageTypeAtomic0000:
    			oldData[msg.DataType] = msg.Data
    			isComplete = true
    		case jt1078.SubPackageTypeFirst0001:
    			oldData[msg.DataType] = nil
    			oldData[msg.DataType] = msg.Data
    		case jt1078.SubPackageTypeLast0010:
    			oldData[msg.DataType] = append(oldData[msg.DataType], msg.Data...)
    			isComplete = true
    		case jt1078.SubPackageTypeMiddle0011:
    			oldData[msg.DataType] = append(oldData[msg.DataType], msg.Data...)
    		default:
    		}
    		if !isComplete {
    			continue
    		}
    		msg.Data = oldData[msg.DataType]
    		select {
    		case videoPacketCh <- msg:
    		default:
    			fmt.Println("数据处理中 本次数据抛弃", time.Now())
    			panic(any("123"))
    		}
    	}
    }
    
    #Question 
    opened by cuteLittleDevil 4
Releases(v0.32.0)
  • v0.32.0(Nov 10, 2022)

    v0.32.0 (2022-11-10)

    • [feat] 自动叠加静音音频。所有协议、所有类型的输入流都已支持,文档见: https://pengrl.com/lal/#/dummy_audio
    • [feat] 支持rtmps、rtsps(server端)
    • [feat] rtp: 支持解析rtp header中的padding和csrc
    • [feat] demo: pullhttpflv拉取http-flv时可以存储为flv文件
    • [opt] 二次开发: 当DelCustomizePubSession后,调用被删除对象的FeedAvPacket方法将返回错误
    • [opt] 二次开发: 支持直接使用json字符串作为配置内容初始化ILalServer
    • [opt] 兼容性优化。转ts时,如果调整时间戳失败则使用调整前的时间戳。
    • [opt] 兼容性优化。当rtmps和rtsps加载签名文件失败时,只打印日志而不退出lalserver
    • [fix] rtsp: 修复aac rtp type不是标准值导致无法合帧的问题。提高兼容性
    • [fix] http-api: 修复sub http-flv remote_addr字段没有值的bug
    • [fix] rtsp: 修复auth可能失败的bug
    • [log] 打印rtsp信令。丰富多处错误日志,比如转hls异常
    • [doc] 新增文档:重要概念 https://pengrl.com/lal/#/concept
    Source code(tar.gz)
    Source code(zip)
    lal_v0.32.0_arm32.zip(5.28 MB)
    lal_v0.32.0_arm64.zip(5.10 MB)
    lal_v0.32.0_linux.zip(5.48 MB)
    lal_v0.32.0_macos_arm64.zip(5.17 MB)
    lal_v0.32.0_macos.zip(5.39 MB)
    lal_v0.32.0_windows.zip(5.51 MB)
  • v0.31.1(Oct 7, 2022)

    v0.31.1 (2022-10-07)

    • [feat] HTTP-API增加start_rtp_pub接口,用于支持GB28181的ps流
    • [feat] 向外暴露IAuthentication,用于定制化鉴权
    • [feat] 向外暴露ModConfigGroupCreator,支持为特定的Group独立配置
    • [opt] rtsp: 允许rtsp先拉再推,也即没有输入流时,可以先创建rtsp SubSession
    • [feat] rtp: unpacker支持hevc ap格式
    • [fix] rtmp: 优化metadata @SetDataFrame的处理,解决flv录制文件用ffmpeg查看fps不准的问题 #201
    • [fix] rtmp: 修复PubSession发送publish信令中字段错误导致推流至youtube失败的问题 #199
    • [perf] rtmp: PullSession支持配置是否复用接收message时的内存块
    • [opt] rtmp: ClientSession推流兼容vhou url格式
    • [opt] rtmp: add float64 support to amf0::WriteObject
    • [opt] rtsp: PullSession在setup阶段如果对端没有回复server port,依然尝试继续拉流,增强兼容性
    • [fix] rtsp: server端没有收到前面的信令直接收到PLAY信令,主动关闭连接,避免崩溃
    • [fix] rtsp: 解析sdp中MPEG4-GENERIC大小写导致aac音频无法正常合帧的问题
    • [fix] hls: 修复hls鉴权时streamName取值错误导致无法正常鉴权的问题
    • [fix] hls: 修复流名称中包含-中划线时hls异常的问题
    • [opt] mpegts: rtmp2mpegts的时间戳重打从0开始,兼容时间戳太大时vlc播放不了的问题
    • [opt] remux: 新增RtspRemuxerAddSpsPps2KeyFrameFlag参数,用于强制在关键帧数据包前加sps、pps。目的是增强兼容性。
    • [opt] remux: Rtmp2AvPacketRemuxer可携带自定义参数
    • [fix] remux: avpacket2rtmp nal以00 00 01开头时崩溃,丢弃aud
    • [refactor] rtprtcp: 重构RtpPacketList
    • [chore] 构建windows可执行文件时增加.exe后缀
    • [opt] HTTP-API和Notify: bitrate重命名为bitrate_kbits
    • [opt] HTTP-API和Notify: StatGroup增加AppName字段
    • [opt] HTTP-Notify: session相关的回调增加ReadBytesSum和WroteBytesSum字段
    Source code(tar.gz)
    Source code(zip)
    lal_v0.31.1_arm32.zip(5.10 MB)
    lal_v0.31.1_arm64.zip(4.97 MB)
    lal_v0.31.1_linux.zip(5.31 MB)
    lal_v0.31.1_macos_arm64.zip(5.04 MB)
    lal_v0.31.1_macos.zip(5.22 MB)
    lal_v0.31.1_windows.zip(5.25 MB)
  • v0.30.1(Jun 15, 2022)

    v0.30.1 (2022-06-15)

    • [feat] HTTP-API:新增start/stop_relay_pull接口,支持rtmp和rtsp,支持设置超时时间,自动关闭,重试次数,rtsp类型等参数
    • [feat] HTTP-API:kick_session接口支持踢掉pub/sub/pull类型的session
    • [feat] HTTP-Notify:增加on_relay_pull_start和on_relay_pull_stop回调
    • [feat] HTTP-Notify:增加hls生成ts文件的事件回调
    • [feat] rtmp: client端支持rtmps加密传输
    • [feat] rtmp: client端支持adobe auth验证
    • [feat] rtsp: server端支持basic/digest auth验证
    • [feat] lalserver: 运行参数-p可设置当前工作路径
    • [feat] package gb28181: 大体完成ps协议解析
    • [feat] 新增remux.Rtmp2AvPacketRemuxer,方便和ffmpeg库协作
    • [fix] rtsp: 修复url path路径不存在时,url解析失败的问题
    • [fix] rtmp: 解析amf, object中嵌套object导致崩溃
    • [fix] rtmp: ChunkComposer的error日志中的对象写错导致崩溃
    • [fix] 修复rtmp转ts时,265判断错误
    • [fix] lalserver: 修复竞态条件下接收rtsp流崩溃的bug
    • [fix] lalserver: relay push判空错误导致崩溃
    • [chore] release发版时,增加arm32, arm64, macos arm对应的二进制文件
    • [refactor] 新增package h2645
    • [refactor] 将所有session的ISessionStat的实现聚合到BasicSessionStat
    • [refactor] rename HttpSubSession -> BasicHttpSubSession
    • [refactor] HTTP-API: 所有事件都包含的公共字段聚合到EventCommonInfo中
    • [opt] aac: 补全AscContext.samplingFrequencyIndex采样率的取值
    • [log] 访问非法HTTP-API路径时打印警告日志
    Source code(tar.gz)
    Source code(zip)
    lal_v0.30.1_arm32.zip(4.66 MB)
    lal_v0.30.1_arm64.zip(4.65 MB)
    lal_v0.30.1_linux.zip(4.98 MB)
    lal_v0.30.1_macos_arm64.zip(4.76 MB)
    lal_v0.30.1_macos.zip(4.90 MB)
    lal_v0.30.1_windows.zip(4.95 MB)
  • v0.29.1(May 3, 2022)

    v0.29.1 (2022-05-03)

    • [feat] lalserver: 支持集成第三方协议的输入流 https://pengrl.com/#/customize_pub
    • [feat] rtmp: pull session增加ack应答,提高兼容性
    • [opt] rtsp: lalserver增加配置项rtsp->out_wait_key_frame_flag,用于控制发送rtsp数据时,是否等待关键帧再发送
    • [opt] 增强健壮性,检查rtmp消息长度有效性
    • [fix] 增强兼容性,rtmp转mpegts时,使用nalu中的sps和pps
    • [fix] lalserver鉴权: 修复rtmp拉流鉴权的问题
    • [fix] 解析H265类型不够全面,导致推流失败 #140
    • [fix] lalserver录制: 是否创建mpegts录制根目录由mpegts录制开关控制
    • [fix] demo: dispatch调度程序检测保活时间单位错误
    • [perf] mpegts: 加大内存预分配大小
    Source code(tar.gz)
    Source code(zip)
    lal_v0.29.1_linux.zip(4.90 MB)
    lal_v0.29.1_macos.zip(4.81 MB)
    lal_v0.29.1_windows.zip(4.86 MB)
  • v0.28.0(Mar 27, 2022)

    v0.28.0 (2022-03-27)

    • [feat] httpts: 支持gop缓冲,提高秒开 #129
    • [opt] hls: 增加delete_threshold配置,用于配置过期TS文件的保存时间 #120
    • [opt] rtsp sub 改为异步发送
    • [opt] lalserver: relay push增加超时检查,增加带宽统计
    • [opt] lalserver: relay pull的rtmp流也转换为rtsp
    • [opt] lalserver: rtsp sub也支持触发relay pull
    • [fix] aac: 支持22050采样频率,修复该频率下转rtsp失败的问题
    • [fix] avc: 增强兼容性,处理单个seq header中存在多个sps的情况 #135
    • [fix] mpegts: 修复单音频场景,有一帧音频重复的问题
    • [fix] rtsp: Basic auth的base64编码
    • [fix] rtsp: 增强容错性,修复rtmp输入流没有seq header时,rtmp转rtsp内崩溃的问题
    • [fix] lalserver: 优雅关闭pprof和http server
    • [perf] mpegts: 优化转换mpegts的性能
    • [refactor] 将转换mpegts的代码从package hls独立出来,移动到package remux中
    • [refactor] lalserver: 大幅重构logic.Group,为支持插件化做准备
    • [log] 支持独立设置单个pkg的日志配置 #62
    • [log] rtmp和rtsp收包时添加trace级别日志 #63
    • [log] rtmp: 优化定位问题的日志 #135
    • [test] innertest增加单音频,单视频,httpts sub的测试
    Source code(tar.gz)
    Source code(zip)
    lal_v0.28.0_linux.zip(4.89 MB)
    lal_v0.28.0_macos.zip(4.80 MB)
    lal_v0.28.0_windows.zip(4.86 MB)
  • v0.27.1(Jan 23, 2022)

    v0.27.1 (2022-01-23)

    • [feat] 新增simple auth鉴权功能,见文档: https://pengrl.com/lal/#/auth
    • [feat] httpflv: PullSession支持https,支持302跳转
    • [feat] rtmp: client类型的session新增方法用于配置WriteBuf和ReadBuf大小,以及WriteChanSize
    • [opt] rtmp: 收到ping request回应ping response
    • [fix] rtmp: 增强兼容性,当收到的rtmp message中aac seq header payload长度为0时忽略,避免崩溃 #116
    • [fix] rtmp: 增强兼容性,当收到的rtmp message中的payload长度为0时忽略 #112
    • [opt] rtsp: 增强兼容性,处理rtsp信令中header存在没有转义的\r\n的情况
    • [fix] rtsp: 增强兼容性,修复读取http返回header解析失败的bug #110
    • [opt] https: 增强兼容性,服务初始化失败时打印错误日志而不是退出程序
    • [opt] avc: 增强兼容性,分隔avcc格式的nal时,如果存在长度为0的nal则忽略
    • [fix] sdp: 增强兼容性,fmtp内发生换行时做兼容性处理
    • [fix] httpflv: 修复httpflv多级路径下无法播放的问题
    • [opt] 整理完所有error返回值,error信息更友好
    • [log] 通过配置文件控制group调试日志
    • [log] rtsp: client信令增加错误日志
    • [fix] 修复logic.Option.NotifyHandler首字母小写外部无法设置的问题
    • [refactor] 将logic包中的DummyAudioFilter, GopCache, LazyRtmpChunkDivider, LazyRtmpMsg2FlvTag移入remux中
    • [refactor] rtmp: base.Buffer移入naza中
    • [chore] CI: 迁移到github action,已支持linux,macos平台,Go1.14和Go1.17,每次push代码和每周定时触发,并自动提交docker hub镜像
    • [chore] 修复go vet signal unbound channel的警告
    • [test] 提高测试覆盖,目前lal测试覆盖超过60%,文档中增加测试覆盖率徽章
    • [test] innertest增加m3u8文件检测,增加http api
    • [test] 测试各session的ISessionUrlContext接口
    • [test] 修复base/url_test.go中的测试用例
    Source code(tar.gz)
    Source code(zip)
    lal_v0.27.1_windows.zip(5.69 MB)
    lal_v0.27.1_macos.zip(5.70 MB)
    lal_v0.27.1_linux.zip(5.78 MB)
  • v0.26.0(Oct 24, 2021)

    • [perf] rtmp合并发送功能使用writev实现
    • [feat] 兼容性: 运行时动态检查所有配置项是否存在
    • [refactor] 可定制性: logic: 抽象出ILalServer接口;业务方可在自身代码中创建server,选择是否获取notify通知,以及使用api控制server
    • [refactor] 兼容性: 两个不太标准的sdp格式(a=fmtp的前面或后面有多余的分号)
    • [refactor] 兼容性: aac解析失败日志; 输入的rtp包格式错误; 输入的rtmp包格式错误; hls中分割nalu增加日志; base.HttpServerManager增加日志
    • [refactor] 兼容性: 再增加一个配置文件默认搜索地址
    • [refactor] 可读性: logic: ServerManager和Config不再作为全局变量使用;去除entry.go中间层;iface_impl.go移入innertest中;signal_xxx.go移入base中
    • [refactor] 易用性: demo/pullrtsp2pushrtsp: 抽象出RtspTunnel结构体,一个对象对应一个转推任务
    • [refactor] logic: 新增GroupManager,管理所有Group
    • [chore] 配置文件中httpflv和httpts的url_pattern初始值改为没有限制
    • [chore] 使用github actions做CI(替换掉之前的travisCI)
    • [chore] 修复build.sh在linux下获取git tag信息失败报错的问题;去掉单元测试时不必要的错误日志
    • [chore] 增加docker运行脚本run_docker.sh
    Source code(tar.gz)
    Source code(zip)
    lal_v0.26.0_linux.zip(5.75 MB)
    lal_v0.26.0_macos.zip(5.66 MB)
    lal_v0.26.0_windows.zip(5.66 MB)
  • v0.25.0(Aug 28, 2021)

    v0.25.0 (2021-08-28)

    • [feat] 为rtmp pub推流添加静音AAC音频(可动态检测是否需要添加;配置文件中可开启或关闭这个功能)
    • [feat] 优化和统一所有client类型session的使用方式:session由于内部或对端原因导致关闭,外部不再需要显式调用Dispose函数释放资源
    • [feat] 增强兼容性:rtsp digest auth时,如果缺少algorithm字段,回复时该字段默认设置为MD5
    • [refactor] package avc: 重新实现sps的解析
    • [refactor] 新增函数remux.FlvTag2RtmpChunks()
    • [refactor] 增强健壮性:package rtmp: 对端协议错误时,主动关闭对端连接而不是主动panic
    • [refactor] 整理logic/group的代码
    • [refactor] httpflv.Sub和httpts.Sub显式调用base.HttpSubSession的函数
    • [fix] rtsp信令打包中部分字段缺少空格
    • [chore] 增强易用性:修改配置文件中的默认配置:hls、flv、mpegts的文件输出地址由绝对路径/tmp修改为相对路径./lal_record
    Source code(tar.gz)
    Source code(zip)
    lal_v0.25.0_linux.zip(4.80 MB)
    lal_v0.25.0_macos.zip(4.72 MB)
    lal_v0.25.0_windows.zip(4.77 MB)
  • v0.24.0(Jul 31, 2021)

    v0.24.0 (2021-07-31)

    • [feat] lalserver支持用rtsp sub协议拉取rtmp的pub推流 (#97)
    • [feat] 新增demo pullrtmp2pushrtsp,可以从远端拉取rtmp流并使用rtsp转推出去 (#96)
    • [feat] package rtprtcp: 支持h264,h265,aac rtp打包 (#83)
    • [feat] package sdp: 支持sdp打包 (#82)
    • [fix] 确保rtsp sub拉流从关键帧开始发送数据,避免因此引起的花屏
    • [fix] rtsp: 提高兼容性。兼容rtsp auth同时存在Digest和Basic两种字段的情况
    • [fix] rtsp: 提高兼容性。兼容rtsp摄像头的sdp中包含aac,但是没有config字段(后续也没有aac rtp包)的情况
    • [fix] rtmp: 提高兼容性。兼容rtmp client session处理对端回复两次publish或play信令的情况
    • [fix] rtmp: 提高兼容性。修复没有解析amf object中null类型数据导致和其他rtmp开源服务无法建连的问题 (#102)
    • [fix] rtmp: 信令打包参考本地chunk size
    • [fix] rtsp: 修复rtsp sub session没有正常释放导致协程泄漏的问题
    • [fix] 修复lalserver arm32编译失败的问题 (#92)
    • [fix] 修复lalserver http服务全部配置为不使用时崩溃的问题 (#58)
    • [fix] 修复hls.Muxer没有设置回调会导致崩溃的问题 (#101)
    • [fix] 修复demo calcrtmpdelay码率计算大了5倍的问题 (#58)
    • [refactor] package httpflv: 新增FlvFilePump,可循环匀速读取flv文件
    • [refactor] package aac: 增加adts, asc, seqheader间的转换代码;重构了整个包
    • [refactor] package avc: 部分函数提供复用传入参数内存和新申请内存两种实现
    • [refactor] demo benchrtmpconnect: 关闭日志,超时时长改为30秒,优化建连时长小于1毫秒的展示 (#58)
    • [chore] 增加Dockerfile (#91)
    Source code(tar.gz)
    Source code(zip)
    lal_v0.24.0_windows.zip(5.63 MB)
    lal_v0.24.0_linux.zip(5.72 MB)
    lal_v0.24.0_macos.zip(5.63 MB)
  • v0.23.0(Jun 6, 2021)

    v0.23.0 (2021-06-06)

    • [feat] HTTP端口复用:HTTP-FLV, HTTP-TS, HLS可使用相同的监听端口。HTTPS也支持端口复用 #64
    • [feat] HTTPS:HTTP-FLV,HTTP-TS,HLS都支持HTTPS。WebSocket-FLV,WebSocket-TS都支持WebSockets #76
    • [feat] 配置HTTP流的URL路径: HTTP-FLV,HTTP-TS,HLS的URL路由路径可以在配置文件中配置 #77
    • [feat] RTMP支持合并发送 #84
    • [refactor] 重构整个项目的命名风格 #87
    • [fix] RTMP GOP缓存设置为0时,可能花屏 #86
    • [feat] 支持海康威视NVR、大华IPC的RTSP流(SDP不包含SPS、PPS等数据,而是通过RTP包发送) #74 #85
    • [feat] 配置灵活易用话。增加default_http。HTTP-FLV,HTTP-TS,HLS可以独立配置监听地址相关的项,也可以使用公共的default_http
    • [feat] HLS默认提供两种播放URL地址 #64
    • [refactor] package hls: 将HTTP URL路径格式,文件存储路径格式,文件命名格式,映射关系抽象出来,业务方可在外层实现IPathSolver接口做定制 #77
    • [feat] 增加几个默认的配置文件加载路径
    • [feat] package rtprtcp: 增加用于将H264 Nalu包切割成RTP包的代码 #83
    • [refactor] package avc: 增加拆分AnndexB和AVCC Nalu包的代码 #79
    • [refactor] 重构httpflv.SubSession和httpts.SubSession的重复代码
    Source code(tar.gz)
    Source code(zip)
    lal_v0.23.0_windows.zip(5.59 MB)
    lal_v0.23.0_macos.zip(5.60 MB)
    lal_v0.23.0_linux.zip(5.69 MB)
  • v0.22.0(May 3, 2021)

    v0.22.0 (2021-05-03)

    • [feat] 录制新增支持:flv和mpegts文件。 录制支持列表见: https://pengrl.com/lal/#/LALServer (#14)
    • [feat] h265新增支持: hls拉流,hls录制;http-ts拉流,mpegts录制。h265支持列表见: https://pengrl.com/lal/#/LALServer (#65)
    • [feat] 拉流新增支持:websocket-flv,websocket-ts。拉流协议支持列表见: https://pengrl.com/lal/#/LALServer
    • [feat] hls: 支持内存切片。 (#50)
    • [fix] rtmp ClientSession握手,c2的发送时机,由收到s0s1s2改为收到s0s1就发送,解决握手失败的case。 (#42)
    • [fix] rtsp h265: 转rtmp时处理错误导致无法播放
    • [fix] rtsp h265: ffmpeg向lalserver推送rtsp h265报错。 (#55)
    • [test] travis ci: 自动化单元测试os增加osx, windows, arch增加arm64, ppc64le, s390x。 (#59)
    • [feat] rtmp ClientSession支持配置使用简单握手,复杂握手 (#68)
    Source code(tar.gz)
    Source code(zip)
    lal_v0.22.0_linux.zip(5.67 MB)
    lal_v0.22.0_macos.zip(5.58 MB)
    lal_v0.22.0_windows.zip(5.57 MB)
  • v0.21.0(Apr 11, 2021)

    v0.21.0 (2021-04-11)

    • [feat] package rtmp: 支持Aggregate Message
    • [feat] lalserver: 新增配置项hls.cleanup_mode,支持三种清理hls文件的模式,具体说明见 https://pengrl.com/lal/#/ConfigBrief
    • [feat] package rtsp: 支持aac fragment格式(一个音频帧被拆分成多个rtp包),之前这种aac格式可能导致崩溃
    • [doc] 新增文章《rtmp中的各种ID》,见 https://pengrl.com/lal/#/RTMPID
    • [doc] 新增文章《rtmp handshake握手之简单模式和复杂模式》,见 https://pengrl.com/lal/#/RTMPHandshake
    • [fix] rtsp推流时,rtp包时间戳翻转导致的错误(比如长时间推流后hls一直强制切片)
    • [fix] lalserver的group中,rtsp sub超时时,锁重入导致服务器异常阻塞不响应
    • [fix] 修复mipsle架构下rtsp崩溃
    • [fix] 修复lalserver中(rtsp.BaseInSession以及logic.Group)的一些竞态读写,https://github.com/q191201771/lal/issues/47
    • [fix] demo: 两个拉httpflv流的demo,main函数退出前忘记等待拉流结束
    • [refactor] package rtprtcp: 重构一些函数名
    • [refactor] package rtprtcp: 重构rtp unpacker,业务方可以使用默认的container,protocol策略,也可以自己实现特定的协议解析组包策略
    • [refactor] lalserver: 整理配置文件加载与日志初始化部分的代码
    • [doc] 启用英文版本README.md作为github首页文档展示
    • [doc] lalserver: 新增配置项conf_version,用于表示配置文件的版本号
    • [doc] lalserver: 启动时日志中增加lal logo
    Source code(tar.gz)
    Source code(zip)
    lal_v0.21.0_linux.zip(5.62 MB)
    lal_v0.21.0_macos.zip(5.55 MB)
    lal_v0.21.0_windows.zip(5.54 MB)
  • v0.20.0(Apr 1, 2021)

    v0.20.0 (2021-03-21)

    • [feat] 新增app/demo/calcrtmpdelay,可用于测量rtmp服务器的转发延时,拉流支持rtmp/httpflv
    • [feat] app/demo/pushrtmp 做压测时,修改为完全并行的模式
    • [fix] 修复32位arm环境使用rtsp崩溃
    • [refactor] 统一各Session接口
    • [refactor] 使用新的unique id生成器,提高性能
    • [doc] 新增文档 ffplay播放rtsp花屏 https://pengrl.com/lal/#/RTSPFFPlayBlur
    Source code(tar.gz)
    Source code(zip)
    lal_v0.20.0_windows.zip(5.52 MB)
    lal_v0.20.0_macos.zip(5.53 MB)
    lal_v0.20.0_linux.zip(5.61 MB)
  • v0.19.1(Feb 1, 2021)

  • v0.19.0(Jan 24, 2021)

    v0.19.0 (2021-01-24)

    • [feat] demo,新增app/demo/pullrtsp2pushrtsp,可拉取rtsp流,并使用rtsp转推出去
    • [feat] demo,新增/app/demo/pullrtmp2pushrtmp,从远端服务器拉取RTMP流,并使用RTMP转推出去,支持1对n转推
    • [feat] lalserver,运行参数中没指定配置文件时,尝试从几个常见位置读取
    • [feat] windows平台下,执行程序缺少运行参数时,等待用户键入回车再退出程序,避免用户双击打开程序时程序闪退,看不到提示信息
    • [feat] rtsp,支持auth basic验证
    • [feat] rtsp,实现PushSession
    • [feat] rtsp,所有Session类型都支持auth,interleaved
    • [fix] rtsp,只有输入流中的音频和视频格式都支持时才使用queue,避免只有音频或视频时造成延迟增加
    • [fix] rtsp,输入流只有单路音频或视频时,接收对象设置错误导致崩溃
    • [fix] rtsp,client session的所有信令都处理401 auth
    • [fix] rtsp,in session使用rtp over tcp时,收到sr回复rr
    • [fix] rtsp,setup信令header中的transport字段区分record和play,record时添加mode=record
    • [fix] avc,整体解析sps数据失败时,只解析最基础部分
    • [refactor] rtsp,重构部分逻辑,聚合至sdp.LogicContext中
    • [refactor] rtsp,新增ClientCommandSession,将PushSession和PullSession中共用的信令部分抽离出来
    • [refactor] rtsp,新增BaseOutSession,将PushSession和SubSession中共用的发送数据部分抽离出来
    • [refactor] rtsp,整理所有session,包含生命周期,ISessionStat、IURLContext、Interleaved收发等函数,整理debug日志
    • [doc] 启动lal官方文档页: https://pengrl.com/lal
    • [doc] 新增文档《rtmp url,以及vhost》: http://pengrl.com/lal/#/RTMPURLVhost
    • [chore] Go最低版本要求从1.9上升到1.13
    Source code(tar.gz)
    Source code(zip)
    lal_v0.19.0_macos.zip(5.51 MB)
    lal_v0.19.0_windows.zip(5.50 MB)
    lal_v0.19.0_linux.zip(5.59 MB)
  • v0.18.0(Dec 27, 2020)

    v0.18.0 (2020-12-27)

    • [feat] 实现rtsp pull session
    • [feat] demo,增加/app/demo/pullrtsp2pushrtmp,可拉取rtsp流,并使用rtmp转推出去
    • [feat] demo,增加/app/demo/pullrtsp,可拉取rtsp流,存储为flv文件
    • [feat] rtsp interleaved(rtp over tcp)模式。pub, sub, pull都已支持
    • [feat] rtsp,pull支持auth digest验证
    • [feat] rtsp,pull支持定时发送GET_PARAMETER rtsp message进行保活(对端支持的情况下)
    • [feat] rtsp,输入流音频不是AAC格式时,保证视频流可正常remux成其他封装协议
    • [feat] rtsp,pull开始时发送dummy rtp/rtcp数据,保证对端能成功发送数据至本地
    • [feat] rtsp,修改rtsp.AVPacketQueue的行为:当音频或者视频数量队列满了后,直接出队而不是丢弃
    • [feat] logic,rtsp pub转发给rtsp sub
    • [feat] logic,rtsp pub转发给relay rtmp push
    • [feat] remux,新增package,用于处理协议转封装
    • [refactor] 重构所有client session解析url的地方
    • [refactor] 所有session实现ISessionStat接口,用于计算、获取bitrate等流相关的信息
    • [refactor] 所有session实现ISessionURLContext接口,用于获取流url相关的信息
    • [refactor] rtmp/httpflv/rtsp,统一所有PullSession:超时形式;Pull和Wait函数
    • [fix] rtsp,将以下包返回给上层:rtsp pub h265, single rtp packet, VPS, SPS, PPS, SEI
    • [fix] sdp,修复解析及使用sdp错误的一些case
    • [fix] aac,正确处理大于2字节的AudioSpecificConfig
    • [fix] avc,尝试解析scaling matrix

    https://github.com/q191201771/lal/blob/master/CHANGELOG.md

    Source code(tar.gz)
    Source code(zip)
    lal_v0.18.0_linux.zip(5.57 MB)
    lal_v0.18.0_macos.zip(5.50 MB)
    lal_v0.18.0_windows.zip(5.49 MB)
  • v0.17.0(Nov 21, 2020)

    v0.17.0 (2020-11-21)

    • [feat] 增加HTTP Notify事件回调功能,见 https://pengrl.com/p/20101
    • [feat] 增加/app/demo/dispatch示例程序,用于演示如何结合HTTP Notify加HTTP API构架一个lalserver集群
    • [feat] 配置文件中增加配置项,支持配置是否清除过期流的HLS文件
    • [feat] lalserver的session增加存活检查,10秒没有数据会主动断开连接
    • [feat] lalserver的group没有sub拉流时,停止对应的pull回源
    • [feat] HTTP API,增加/api/ctrl/start_pull接口,可向lalserver发送命令,主动触发pull回源拉流
    • [feat] HTTP API,增加接口/api/ctrl/kick_out_session接口,可向lalserver发送命令,主动踢掉指定的session
    • [feat] HTTP API /api/stat/lal_info 中增加server_id字段
    • [feat] HTTP API,group结构体中增加pull结构体,包含了回源拉流的信息
    • [fix] 配置文件静态relay push转推方式中,push rtmp url透传pub rtmp url的参数
    • [chore] 增加gen_tag.sh,用于打tag

    https://github.com/q191201771/lal/blob/master/CHANGELOG.md

    Source code(tar.gz)
    Source code(zip)
    lal_v0.17.0_linux.zip(5.58 MB)
    lal_v0.17.0_macos.zip(5.58 MB)
    lal_v0.17.0_windows.zip(5.43 MB)
  • v0.16.0(Oct 23, 2020)

    • [feat] rtsp pub h265(lal支持接收rtsp h265视频格式的推流)
    • [feat] 增加HTTP API接口,用于获取服务的一些信息,具体见: https://pengrl.com/p/20100/
    • [fix] 修复部分使用adobe flash player作为rtmp拉流客户端,拉流失败的问题
    • [fix] 修复接收rtsp pub推流时,流只有视频(没有音频)流处理的问题

    https://github.com/q191201771/lal/blob/master/CHANGELOG.md

    Source code(tar.gz)
    Source code(zip)
    lal_v0.16.0_linux.zip(5.50 MB)
    lal_v0.16.0_macos.zip(5.50 MB)
    lal_v0.16.0_windows.zip(5.34 MB)
  • v0.15.1(Sep 19, 2020)

    v0.15.1 and v0.15.0

    • [feat] 支持HTTP-TS sub长连接拉流
    • [feat] 支持HTTPS-FLV
    • [feat] 支持跨域请求:HTTP-FLV sub, HTTP-TS sub, HLS这几个HTTP类型的拉流
    • [feat] 支持HLS录制与回放(在原有HLS直播的基础之上)
    • [fix] 修复rtsp pub无法接收IPv6 RTP数据的问题
    • [fix] 修复windows平台编译失败的问题(单元测试package innertest中使用syscall.Kill导致)
    • [feat] demo pullrtmp2hls: 新增demo,从远端服务器拉取rtmp流,存储为本地hls文件
    • [feat] 新增package alpha/stun,学习stun协议
    • [feat] 部分rtsp pub支持h265的代码,未完全完成
    Source code(tar.gz)
    Source code(zip)
    lal_v0.15.1_linux.zip(5.45 MB)
    lal_v0.15.1_macos.zip(5.46 MB)
    lal_v0.15.1_windows.zip(5.30 MB)
  • v0.14.0(Aug 23, 2020)

    • [feat] lalserver实现rtsp pub功能。支持接收rtsp(rtp/rtcp)推流,转换为rtmp,httpflv,hls格式供拉流使用
    • [feat] hls.Muxer释放时,向m3u8文件写入#EXT-X-ENDLIST
    • [refactor] 新增package sdp,rtprtcp
    • [refactor] 新增package base,整理lal项目中各package的依赖关系
    • [refactor] 新增package mpegts,将部分package hls中代码抽离出来
    • [refactor] 重写package aac
    • [feat] 在各协议的标准字段中写入lal版本信息
    • [fix] group Dispose主动释放所有内部资源,与中继转推回调回来的消息,做同步处理,避免崩溃
    • [fix] package avc: 修复解析sps中PicOrderCntType为2无法解析的bug
    • [refactor] 重命名app/demo中的一些程序名
    • [feat] package rtmp: 增加BuildMetadata函数
    • [test] 使用wontcry30s.flv作为单元测试用的音视频文件
    • [chore] 使用Makefile管理build, test
    • [doc] 增加文档: https://pengrl.com/p/20080/
    • [log] 整理所有session的日志

    CHANGELOG.md

    Source code(tar.gz)
    Source code(zip)
    lal_v0.14.0_linux.zip(5.43 MB)
    lal_v0.14.0_macos.zip(5.43 MB)
    lal_v0.14.0_windows.zip(5.27 MB)
  • v0.13.0(Jul 18, 2020)

    • [feat] package httpflv: pull拉流时,携带url参数
    • [feat] package avc: 提供一些AVCC转AnnexB相关的代码。学习解析SPS、PPS内部的字段
    • [fix] package rtmp: 打包rtmp chunk时扩展时间戳的格式。避免时间戳过大后,发送给vlc的数据无法播放。
    • [fix] package hls: 写ts视频数据时,流中没有spspps导致崩溃
    • [fix] package logic: 修复重复创建group.RunLoop协程的bug
    • [perf] package logic: 广播数据时,内存块不做拷贝
    • [perf] package hls: 切片188字节buffer复用一块内存
    • [refactor] package hls: 使用package avc
    • [refactor] 所有回调函数的命名格式,从CB后缀改为On前缀
    • [refactor] 整理日志
    • [style] Nalu更改为NALU
    • [doc] 增加PR规范
    • [test] innertest中对hls生成的m3u8和ts文件做md5验证
    • [chore] 下载单元测试用的test.flv失败,本地文件大小为0时,去备用地址下载

    CHANGELOG.md

    Source code(tar.gz)
    Source code(zip)
    lal_v0.13.0_linux.zip(5.36 MB)
    lal_v0.13.0_macos.zip(5.35 MB)
    lal_v0.13.0_windows.zip(5.20 MB)
  • v0.12.0(Jun 20, 2020)

  • v0.11.0(Jun 13, 2020)

    • [feat] lalserver增加中继转推(relay push)功能,可将接收到的推流(pub)转推(push)到其他rtmp类型的服务器,支持1对n的转推
    • [feat] package rtmp: 新增函数amf0::ReadArray,用于解析amf array数据
    • [refactor] rtmp/client_push_session增加当前会话连接状态
    • [fix] demo/analyseflv: 修复解析metadata的bug
    • [perf] httpflv协议关闭时,不做httpflv的GOP缓存
    • [refactor] logic中的配置变更为全局变量
    • [refactor] lal/demo移动到lal/app/demo
    • [refactor] 日志整理

    版本日志见 https://github.com/q191201771/lal/blob/master/CHANGELOG.md

    Source code(tar.gz)
    Source code(zip)
    lal_v0.11.0_linux.zip(5.34 MB)
    lal_v0.11.0_macos.zip(5.34 MB)
    lal_v0.11.0_windows.zip(5.19 MB)
  • v0.10.0(Jun 6, 2020)

    • [refactor] app/lals重命名为app/lalserver,避免描述时容易和lal造成混淆
    • [refactor] 将app/lalserver的大部分逻辑代码移入pkg/logic中
    • [test] 将所有package的Server、Session等内容的实例测试收缩至package innertest中,多个package都可以共用它做单元测试
    • [refactor] lalserver配置中增加显式enable字段,用于开启关闭特定协议
    • [refactor] 各package的Server对象增加独立的Listen函数,使得绑定监听端口失败时上层可以第一时间感知
    • [feat] demo/analyseflv,增加I帧间隔检查,增加metadata分析
    • [fix] package avc: 修复函数CalcSliceType解析I、P、B帧类型的bug
    • [fix] package hls: 检查输入的rtmp message是否完整,避免非法数据造成崩溃
    • [perf] gop缓存使用环形队列替换FIFO动态切片队列
    • [refactor] package aac: 函数ADTS::PutAACSequenceHeader检查输入切片长度
    • [refactor] package aac: 删除函数CaptureAAC

    版本日志见 https://github.com/q191201771/lal/blob/master/CHANGELOG.md

    Source code(tar.gz)
    Source code(zip)
    lal_v0.10.0_linux.zip(5.31 MB)
    lal_v0.10.0_macos.zip(5.31 MB)
    lal_v0.10.0_windows.zip(5.15 MB)
  • v0.9.0(May 30, 2020)

    • [feat] 新增HLS直播功能
    • [fix] 接收rtmp数据时,同一个message的多个chunk混合使用fmt1,2时,可能出现时间戳多加的情况
    • [refactor] 将app目录下除lals的其他应用移入demo目录下
    • [fix] 修改rtmp简单握手,修复macOS ffmpeg 4.2.2向lals推rtmp流时的握手警告

    版本日志见 https://github.com/q191201771/lal/blob/master/CHANGELOG.md

    Source code(tar.gz)
    Source code(zip)
    lal_v0.9.0_linux.zip(5.30 MB)
    lal_v0.9.0_macos.zip(5.30 MB)
    lal_v0.9.0_windows.zip(5.15 MB)
  • v0.8.1(May 1, 2020)

Owner
yoko
c++, Go, network, system, audio&video.
yoko
Parse and generate m3u8 playlists for Apple HTTP Live Streaming (HLS) in Golang (ported from gem https://github.com/sethdeckard/m3u8)

go-m3u8 Golang package for m3u8 (ported m3u8 gem https://github.com/sethdeckard/m3u8) go-m3u8 provides easy generation and parsing of m3u8 playlists d

Tan Quang Ngo 102 Nov 19, 2022
RTSP 1.0 client and server library for the Go programming language

RTSP 1.0 client and server library for the Go programming language

Alessandro Ros 327 Nov 30, 2022
golang library for mux and demux file containers such as mpeg-ts,mpeg-ps,flv

gomedia mpeg-ts,mpeg-ps,flv muxer/demuxer mpeg-ts muxer mpeg-ts demuxer mpeg-ps muxer mpeg-ps demuxer flv muxer flv demuxer mpeg-ps will be done in th

yaping 104 Dec 1, 2022
Take control over your live stream video by running it yourself. Streaming + chat out of the box.

Take control over your content and stream it yourself. Explore the docs » View Demo · Use Our Server for Testing · FAQ · Report Bug Table of Contents

Owncast 6.7k Dec 1, 2022
Parser and generator of M3U8-playlists for Apple HLS. Library for Go language. :cinema:

M3U8 This is the most complete opensource library for parsing and generating of M3U8 playlists used in HTTP Live Streaming (Apple HLS) for internet vi

Alexander I.Grafov 979 Nov 27, 2022
hls converter.

hlsconv hls converter. 外部依赖 ffmpeg: 4.2.1 使用方式 linix/macos # 转换单个文件 bin/hlsconv -i video/in.mp4 -o outvideo/ # 批量转换文件 bin/hlsconv -i video/ -o outvide

f(x)->KT 0 Jan 15, 2022
live video streaming server in golang

中文 Simple and efficient live broadcast server: Very simple to install and use; Pure Golang, high performance, and cross-platform; Supports commonly us

浩麟 8.5k Dec 2, 2022
live streaming server in golang

中文 Simple and efficient live broadcast server: Very simple to install and use; Pure Golang, high performance, and cross-platform; Supports commonly us

BigSillyBear 27 Nov 10, 2022
Live on-demand transcoding in go using ffmpeg. Also with NVIDIA GPU hardware acceleration.

Go live HTTP on-demand transcoding Transcoding is expensive and resource consuming operation on CPU and GPU. For big companies with thousands of custo

Miroslav Šedivý 108 Nov 20, 2022
A live streaming tool more suitable for non-graphical servers

KPlayer KPlayer可以帮助你快速的在服务器上进行视频资源的循环直播推流。

null 150 Dec 2, 2022
Stream video from ffmpeg to webrtc

ffmpeg-to-webrtc demonstrates how to send video from ffmpeg to your browser using pion.

Artur Shellunts 870 Nov 24, 2022
A tool to stream videos📺 directly into VLC media player just by its name from terminal.

PeerWatch A tool to stream videos directly into the VLC media player. Download Download the tool from here: Windows Linux win-x64 linux-x64 Building Y

Ab 0 Feb 12, 2022
Personal video streaming server.

tube This is a Golang project to build a self hosted "tube"-style video player for watching your own video collection over HTTP or hosting your own ch

davy wybiral 236 Nov 25, 2022
Go4vl is Go library for working with the Video for Linux API (V4L2) natively, without any C bindings.

go4vl A Go library for working with the Video for Linux user API (V4L2). Gov4l hides all the complexities of working with V4L2 and exposes idiomatic G

Vladimir Vivien 130 Nov 28, 2022
Golang bindings for FFmpeg

goav Golang binding for FFmpeg A comprehensive binding to the ffmpeg video/audio manipulation library. Usage import "github.com/giorgisio/goav/avforma

H. Giorgis 1.9k Nov 19, 2022
golang library to read and write various subtitle formats

libgosubs Golang library to read and write subtitles in the following formats Advanced SubStation Alpha v4 SRT TTML v1.0 - This is based on the spec p

Wargarblgarbl 20 Sep 27, 2022
Video converter with golang

Requirements Debian-like system (ubuntu, mint, etc...) with apt package manager Golang >1.15 Command tool make (use sudo apt install make -y to instal

Anaxita 2 Sep 10, 2022
ffmpeg core for golang

go-ffmpeg-core ffmpeg core for golang 基于ffmpeg命令封装简单功能,因此运行环境需事先安装有ffmpeg命令。 ffmpeg官方下载地址: http://ffmpeg.org/download.html 1. 剥离视频文件的音频/视频 package mai

Resynz 0 Nov 26, 2021
golang function that download a video from youtube, and convert it to a mp3 file using ffmpeg

echedwnmp3 echedwnmp3 is a function that download a video from youtube, and convert it to a mp3 file using ffmpeg example package main import(echedwn

pai 4 Dec 7, 2021