Go語言流媒體開源項目 [LAL](https://github.com/q191201771/lal) 今天發佈了v0.36.7版本。 > LAL 項目地址:https://github.com/q191201771/lal 老規矩,簡單介紹一下: ▦ Customize Sub,我有的都給你 這 ...
Go語言流媒體開源項目 LAL 今天發佈了v0.36.7版本。
LAL 項目地址:https://github.com/q191201771/lal
老規矩,簡單介紹一下:
▦ Customize Sub,我有的都給你
這是提供給用lalserver做二次開發的小伙伴們的一個重要的功能,業務方可以通過設置回調函數的方式獲取lalserver內部的流。
獲取到流有什麼用呢,拿lal的衍生項目lalmax來舉例,它基於lalserver的Customize Sub,為所有輸入lalserver中的流擴展了srt和webrtc播放的能力。
這裡也簡單介紹一下lalmax,它將會是lal整體版圖中的一個重要項目,它基於lalserver提供的二次開發介面,與第三方庫結合,支持更多的協議、實現更豐富的功能。
相應的,lal項目會持續保持自身無第三方依賴,高性能等特點。
lalmax項目地址: https://github.com/q191201771/lalmax
如果你想更好的理解Custmize Sub,可以先看看與Customize二次開發相關的另外兩篇文檔:
如果你想直接看代碼:
- lal中相應的API簽名: https://github.com/q191201771/lal/blob/master/pkg/logic/logic.go#L43
- lalmax使用示例: https://github.com/q191201771/lalmax/blob/master/main.go#L39
▦ rtmp相容性優化
- amf編碼中有兩個不包含有效內容、沒什麼實際卵用的格式叫Undefined和Unsupported,之前lal沒有解析,而現實中竟然真的有客戶端會用它。
- 相容publish信令中沒有pubType欄位的情況。是的,有的客戶端就是這麼任性,關鍵用的人還不少,不相容還不行,氣不氣。
- 處理音頻格式寫在metadata中,而非單獨seq header包的情況。
- Rtmp2AvPacketRemuxer增加參數用於指定是否需要丟棄SEI
▦ rtsp優化
- 支持處理時間戳翻滾的情況。也就是時間戳遞增到一個非常大的數後,重新回到一個小的數繼續遞增。
- package rtsp中新增加了一個配置變數BaseInSessionTimestampFilterFlag,用於決定rtsp合成的幀級別packet的時間戳是使用rtp中的時間戳,還是重置成從0開始。
▦ lalserver優化
- 將NotifyHandler回調非同步化到獨立協程中。目的是方便業務方在回調中自由的調用lalserver的其他API介面
- http api中的流信息中增加fps欄位
- 在業務方WithOnHookSession的情況下,停用auto stop relay pull功能
▦ bug修複
首先是一個比較嚴重的bug,會導致hls無法播放,這是在上個版本v0.35.4引入的,原因是轉ts時,pmt中的avc標誌筆誤寫錯了寫成aac了。。
然後是協議處理上的bug:
- rtp: 修複解析ext擴展數據的bug
- remux: Rtmp2AvPacketRemuxer多slice時append sps錯誤導致花屏
- rtmp2mpegts: 確保pts有值
- rtmp: 當ClientSession配置項WriteChanSize為0時,不必要開啟非同步發送
lalserver中釋放資源的bug:
播放不存在的rtsp流,超時沒有徹底釋放
其他一些小bug:
使用hls中的回調對象IMuxerObserver前,先檢查是否為nil
▦ 更多
還有一些修改不逐個介紹了,大致如下:
- [chore] all shell file go to script folder
- [chore] 所有腳本+x增加執行許可權,保證CI正常運行
- [chore] 修複macos平臺readlink沒有-f參數導致腳本執行失敗的問題
- [fix] webui: read null when no group
- [fix] connection: not working set ModWriteChanSize
- [fix] not working timout for RTMP server session
- [test] dump rtsp test support video
- [refactor] 整理所有跨域的代碼
- [refactor] 整理所有超時相關的代碼
- [refactor] hevc: 暴露hevc.Context中的所有欄位
- [refactor] avc: 暴露avc.Context中的Sps結構體欄位
以上內容摘取自 《lal CHANGELOG版本日誌》 ,你可以通過源文檔獲取更詳細的內容。
▦ 開發者
感謝參與這個版本的開源貢獻者:yoko(阿亮), ZSC714725(阿響), HustCoderHu(小虎), Jae-Sung Lee(阿韓)
▦ 進一步瞭解lal
微信掃碼加我好友(進微信群):
本文完,祝你今天開心。
yoko, 202307