LAL v0.32.0发布,更好的支持纯视频流

Go语言流媒体开源项目 LAL 今天发布了v0.32.0版本。距离上个版本刚好一个月时间,LAL 依然保持着高效迭代的状态。

LAL 项目地址:https://github.com/q191201771/lal

挑三个比较重要的修改简单介绍一下:

▌ 一,自动叠加静音音频

这个是为了更好的支持 纯视频流 ,解决很多播放器播放纯视频的直播流时,可能出现首帧打开时间特别慢、延迟大的问题。

详情我单独写了一篇文档: 《lalserver 自动叠加静音音频》

▌ 二,支持RTMPS,RTSPS

基于TLS/SSL对RTMP和RTSP协议进行加密,带来更高的安全性。

RTMPS和RTSPS可以通过 lalserver 的配置文件开启,比如RTMPS对应的配置:

  "rtmp": {
    //. 是否开启rtmp服务的监听
    //  注意,配置文件中控制各协议类型的enable开关都应该按需打开,避免造成不必要的协议转换的开销
    "enable": true,

    //. RTMP服务监听的端口,客户端向lalserver推拉流都是这个地址//. RTMP服务监听的端口,客户端向lalserver推拉流都是这个地址
    "addr": ":1935",

    //. 是否开启rtmps服务的监听
    //  注意,rtmp和rtmps可以任意开启一个或全部打开或全部关闭
    "rtmps_enable": true,

    //. RTMPS服务监听的端口地址
    "rtmps_addr": ":4935",

    //. RTMPS的本地cert文件 
    "rtmps_cert_file": "./conf/cert.pem",

    //. RTMPS的本地key文件
    "rtmps_key_file": "./conf/key.pem",
    ...
  },

提示,以上内容来源 《lalserver配置文件说明》 ,打开源文档可以获得更友好的阅读格式。

▌ 三,更好的支持更多的RTSP摄像头

比如:

  • rtp协议栈支持解析header中的padding和csrc
  • 修复aac rtp type不是标准值导致无法合帧的问题。提高兼容性
  • 修复rtsp auth可能失败的bug

以上处理都是对社区真实反馈的响应。

▌ 更多修改

还有一些修改不逐个介绍了,大致如下:

  • [feat] demo: pullhttpflv拉取http-flv时可以存储为flv文件
  • [opt] 二次开发: 当DelCustomizePubSession后,调用被删除对象的FeedAvPacket方法将返回错误
  • [opt] 二次开发: 支持直接使用json字符串作为配置内容初始化ILalServer
  • [opt] 兼容性优化。转ts时,如果调整时间戳失败则使用调整前的时间戳。
  • [opt] 兼容性优化。当rtmps和rtsps加载签名文件失败时,只打印日志而不退出lalserver
  • [fix] http-api: 修复sub http-flv remote_addr字段没有值的bug
  • [log] 打印rtsp信令。丰富多处错误日志,比如转hls异常
  • [doc] 新增文档:重要概念 https://pengrl.com/lal/#/concept

以上内容摘取自 《lal CHANGELOG版本日志》 ,你可以通过源文档获取更详细的内容。

进一步了解lal

本文完,祝你今天开心。

yoko, 202211

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的示例代码,用于将 GB28181 视频转换为 WebSocket-FLV 格式并发送到客户端: ```go package main import ( "fmt" "net" "github.com/mengzhuo/joy4/format/flv/flvio" "github.com/mengzhuo/joy4/format/ts" "github.com/notedit/lal/pkg/avc" "github.com/notedit/lal/pkg/base" "github.com/notedit/lal/pkg/remux" "github.com/notedit/lal/pkg/rtmp" "github.com/notedit/lal/pkg/webrtc" ) func main() { // 创建 GB28181 视频监听器 listener, err := net.Listen("tcp", "0.0.0.0:8000") if err != nil { fmt.Println("Error listening:", err.Error()) return } defer listener.Close() // 设置 WebSocket-FLV 的 URL url := "ws://localhost:8080" // 创建 WebSocket-FLV 客户端 client, err := webrtc.NewWebSocketFLVClient(url) if err != nil { fmt.Println("Error creating WebSocket-FLV client:", err.Error()) return } defer client.Close() // 循环接收 GB28181 视频并转换为 WebSocket-FLV 格式发送给客户端 for { // 等待 GB28181 视频连接 conn, err := listener.Accept() if err != nil { fmt.Println("Error accepting:", err.Error()) continue } // 创建 GB28181 视频解码器 dec := ts.NewDecoder(conn) // 创建 WebSocket-FLV 视频编码器 enc := remux.NewMuxer(base.FLV) // 监听 GB28181 视频并转换为 WebSocket-FLV 格式发送给客户端 for { // 读取 GB28181 视频数据 pkt, err := dec.ReadPacket() if err != nil { fmt.Println("Error reading packet:", err.Error()) break } // 解码 GB28181 视频数据 frame, err := avc.ParseAVCFrame(pkt.Data) if err != nil { fmt.Println("Error parsing frame:", err.Error()) continue } // 将解码后的数据转换为 WebSocket-FLV 格式 flvTag := flvio.NewTag() flvTag.Timestamp = uint32(pkt.Time / 1000) flvTag.Type = flvio.TAG_TYPE_VIDEO flvTag.Data = frame.Data enc.WriteTag(flvTag) // 发送转换后的数据给客户端 client.WritePacket(flvTag) } // 关闭 GB28181 视频连接 conn.Close() } } ``` 这段代码使用了 Golang 的 lal 框架和 joy4 库,实现了 GB28181 视频与 WebSocket-FLV 格式的转换。具体实现步骤包括创建 GB28181 视频监听器和 WebSocket-FLV 客户端,循环接收 GB28181 视频并解码,将解码后的数据转换为 WebSocket-FLV 格式并发送给客户端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值