首页 > 其他分享 >LAL v0.35.4发布,OBS支持RTMP H265推流,我跟了

LAL v0.35.4发布,OBS支持RTMP H265推流,我跟了

时间:2023-04-18 20:48:22浏览次数:49  
标签:LAL v0.35 H265 fix RTMP enhanced OBS

Go语言流媒体开源项目 LAL 今天发布了v0.35.4版本。

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

老规矩,简单介绍一下:

▦ 一. OBS支持RTMP H265推流

新出的标准,一般被称为enhanced RTMP,OBS新版(29.1+版本,点我去下载安装包)已经实现可以使用,LAL也做了相应的适配,换言之,你可以使用OBS推送H265的RTMP流给LAL了。

Tips: 使用H265的好处是相较于H264,占用更低的码率却拥有更高的图像质量。

值得注意的几点细节:

  1. LAL转换为其他封装协议(比如RTSP、HLS)后,输出的协议依然是标准协议,这点和之前没啥区别。
  2. LAL输出是RTMP/FLV时,依然保持enhanced RTMP格式,目前适配了enhanced RTMP的播放器只有mpegts.js,后续ffmpeg和VLC等播放器应该也会很快跟上支持。
  3. enhanced RTMP和之前金山云搞的HEVC over RTMP(就是codecid=12那个,国内大部分CDN产商都支持了)是两套东西,LAL两种格式都支持了,目前的策略是进来的RTMP/FLV是啥格式,出去的RTMP/FLV就是啥格式,后续可能会考虑转换(比如通过配置或url参数等)。

关于enhanced RTMP协议实现细节、OBS对应的使用方法可以看看我们的这篇文章: 《enhanced RTMP》

▦ 二. G711A/G711U

上个版本支持G711音频编码格式时留了个待完成的尾巴,RTSP转RTMP只有视频没有声音,这个版本支持了。

G711的整体情况我们正在整理中: https://www.yuque.com/pengrl/public/psxbp37r3yqopnxx

▦ 三. RTSP TCP/UDP 切换

一个优化: 有的RTSP源不支持TCP传输音视频数据,会在SETUP信令阶段给对端回复status code 461,用于表明自身不支持TCP,新版本的LAL收到461后会尝试切换UDP SETUP。反之UDP切TCP也是一样的道理。

▦ 更多

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

  • [opt] mpegts根据编码格式打包patpmt(提高纯视频流的兼容性)
  • [opt] HTTP-API: 支持跨域
  • [fix] rtmp: 解析amf strict array
  • [fix] rtmp转mpegts处理时间戳错误,导致有b帧时ffplay播放hls报错
  • [fix] GetSamplingFrequency missing 24000
  • [fix] simplifing logic to enable fragment_duration_ms on configuration to be under thousands (but not below hundreds)
  • [fix] 解决CustomizePubSessionContext使用dumpFile空指针导致崩溃的问题
  • [test] unit test for base.DumpFile

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

▦ 开发者

感谢参与这个版本的开源贡献者:yoko, ZSC714725, joaop, sanenchen, yang heng01~, penglh, LiH0820

▦ 进一步了解lal

微信扫码加我好友(进微信群):

wechat

本文完,祝你今天开心。

yoko, 202304

标签:LAL,v0.35,H265,fix,RTMP,enhanced,OBS
From: https://www.cnblogs.com/notokoy/p/17331013.html

相关文章

  • flask信号、flask-script、sqlalchemy介绍和快速使用
    昨日内容回顾#1导出项目依赖pipreqs#2函数和方法的区别#3local对象-并发编程中的一个对象,它可以保证多线程并发访问数据安全-本质原理是:不同的线程,操作的是自己的数据-不支持协程#4自己定义local,支持线程和协程#注意点一:try:......
  • flask的sqlalchemy快速插入数据、scoped_session线程安全、基本的增删查改、一对多、
    今日内容sqlalchemy快速插入数据scoped_session线程安全基本的增删改查一对多多对多连表查询1sqlalchemy快速插入数据#sqlalchemy是什么ORM框架,跟其他web框架没有必然联系,可以独立使用#安装,快速使用,执行原生sql#创建表和删除表-不能创建......
  • flask-sqlalchemy使用、flask-migrate使用、flask项目演示
    昨日内容回顾#1sqlalchemy创建表:Base=declarative_base()-只能创建和删除-不能创建数据库-不能修改表#2快速插入数据-借助于session对象fromsqlalchemy.ormimportsessionmakerSession=sessionmaker(bind=engine)session......
  • docker01 flask-sqlalchemy flask-migrate使用 flask项目演示 docker介绍与安装
    今日内容详细目录今日内容详细1flask-sqlalchemy使用2flask-migrate使用3flask项目演示4docker介绍4.1什么是虚拟化4.2docker是什么4.3容器与虚拟机比较4.4Docker概念5docker安装1flask-sqlalchemy使用#集成到flask中,直接使用sqlalchemy,看代码#有个第三方flask-sq......
  • flask使用sqlalchemy
    flask使用sqlalchemyflask-sqlalchemy集成方案借助第三方模块flask-sqlalchemy,可以将sqlalchemy快速的集成到flask项目中。pipinstallflask_sqlalchemyfromflask_sqlalchemyimportSQLAlchemydb=SQLAlchemy()#产生一个SQLAlchemy对象#将db注册到app中db.init......
  • flask-sqlalchemy,flask-migrate
    flask-sqlalchemy使用集成到flask中,直接使用sqlalchemy,有个第三方flask-sqlalchemy,可以快速的集成到flask中使用flaks-sqlalchemy集成#集成到flask中,直接使用sqlalchemy,看代码#有个第三方flask-sqlalchemy,帮助咱们快速的集成到flask中 #使用flask-sqlalchemy集成 1......
  • flask-sqlalchemy使用,flask-migrate使用,flask项目演示
    目录flask-sqlalchemy使用,flask-migrate使用,flask项目演示今日内容详细1flask-sqlalchemy使用2flask-migrate使用3flask项目演示flask-sqlalchemy使用,flask-migrate使用,flask项目演示今日内容详细1flask-sqlalchemy使用#集成到flask中直接使用sqlalchemy#有个第三方fl......
  • sqlalchemy快速插入数据,scoped_session线程安全,加载类上的装饰器,基本增删改查,django中
    今日内容sqlalchemy快速插入数据sqlalchemy是什么orm框架,跟其他web框架没有必然联系,可以独立使用安装,快速使用,执行原生sql创建表和删除表不能创建数据库不能修改字段(增加,删除)使用orm插入第一步:生成engine对象engine=create_engine("mysql+pymysql://[email protected].......
  • flask框架06 sqlalchemy使用 scoped_session线程安全 一对多 多对多 增删改查
    今日内容详细目录今日内容详细1sqlalchemy快速插入数据2scoped_session线程安全2.1基本使用2.2加在类上的装饰器3基本增删查改3.1基本增删查改和高级查询3.2原生sql3.3django中执行原生sql4一对多4.1表模型4.2新增和基于对象的查询5多对多5.1表模型5.2增加和基于......
  • flask最后 类装饰器定义、flask-sqlalchemy使用、flask-mmigrate使用、flask项目演
    类装饰器1装饰类的装饰器:加在类上的装饰器2类作为装饰器来用:#类作为装饰器来用:(主要用__init__和__call__进行进行功能添加)classWrapper():def__init__(self,func):self.func=funcdef__call__(self,*args,**kwargs):......