在今天的IP网络环境中,SIP无处不在。因为历史原因,绝大部分的SIP协议栈说是基于C语言开发。C语言开发的场景仍然占据目前主流应用场景,并且学习曲线仍然比较高。但是现在,基于Go开发的SIP协议库现在横空出世,部署便捷,高效,集成Pion WebRTC是其主要优势。
SIPGO是一个用于在 GO 语言中编写高速 SIP 服务的库。 它配备了针对快速解析优化的 SIP 协议栈(RFC 3261|RFC3581|RFC6026)。

基于sipgo的库:
- diago github.com/emiago/diago:包含媒体协议栈的完整 VOIP 库/框架
- sipgox github.com/emiago/sipgox:用于快速构建 SIP 电话或 SIP 辅助工具(建议切换至 Diago)
工具/服务:
- github.com/emiago/diagox 用于 SIP/RTP 扩展的简单入口/出口和注册器
- github.com/emiago/gophone 用于便捷测试的命令行软电话
示例:
- 有状态代理示例/proxysip
- 带身份验证的注册示例/register
- 使用sipgox的RTP回声示例/dialog
UAS/UAC构建:
使用UA的服务器或客户端句柄,用户可以构建接收和发送或请求。
ua, _ := sipgo.NewUA() // Build user agent
srv, _ := sipgo.NewServer(ua) // Creating server handle for ua
client, _ := sipgo.NewClient(ua) // Creating client handle for ua
srv.OnInvite(inviteHandler)
srv.OnAck(ackHandler)
srv.OnBye(byeHandler)
// For registrars
// srv.OnRegister(registerHandler)
ctx, _ := signal.NotifyContext(ctx, os.Interrupt)
go srv.ListenAndServe(ctx, "udp", "127.0.0.1:5060")
go srv.ListenAndServe(ctx, "tcp", "127.0.0.1:5061")
go srv.ListenAndServe(ctx, "ws", "127.0.0.1:5080")
<-ctx.Done()
项目地址:
https://github.com/emiago/sipgo?tab=readme-ov-file
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。