该项目被认为是稳定的,目前没有计划进行重大功能开发。但是,欢迎提出拉取请求和问题:将在时间允许的情况下提供支持/维护。
这是 golang 的 sACN 实现。它基于 ESTA 的 E1.31 协议。可以在此处找到副本。
这绝不是一个完整的实施,但可能在未来。如果您想查看完整的 DMX 包,请参阅 OLA 项目。
godoc.org 上也有一些文档。该项目支持 Go 1.11 中引入的 Go 模块。
go get github.com/Hundemeier/go-sacn/sacn
接收 sACN 数据包的最简单方法是使用sacn.NewReceiverSocket
。
有关最新信息,请访问 godoc.org 网站并获取此存储库。
您可以通过receiver.Stop()
停止接收器上的数据包接收。请注意,停止接收并关闭所有通道最多可能需要 2.5 秒。如果你已经停止过一次接收器,你可以通过receiver.Start()
重新启动。
要传输 DMX 数据,您必须初始化Transmitter
对象。这处理所有协议特定操作(当前不是全部)。如果您想发送数据,您可以激活宇宙。然后您可以使用 512 字节数组的通道通过网络传输它们。
有两种不同类型的接收方寻址:单播和多播。使用多播时,请注意您必须在某些操作系统(例如 Windows)上提供绑定地址。您可以同时使用这两个地址,也可以使用任意数量的单播地址。要设置是否应使用多播,请调用transmitter.SetMulticast(<universe>, <bool>)
。您可以通过transmitter.SetDestinations(<universe>, <[]string>)
将多个单播目标设置为切片。请注意,任何现有目的地都将被覆盖。如果要附加目标,可以使用transmitter.Destination(<universe>)
,它返回所使用的 net.UDPAddr 对象的深层副本。
GoDoc 示例:
发射器示例:
package main
import (
"log"
"math/rand"
"time"
"github.com/Hundemeier/go-sacn/sacn"
)
func main () {
//instead of "" you could provide an ip-address that the socket should bind to
trans , err := sacn . NewTransmitter ( "" , [ 16 ] byte { 1 , 2 , 3 }, "test" )
if err != nil {
log . Fatal ( err )
}
//activates the first universe
ch , err := trans . Activate ( 1 )
if err != nil {
log . Fatal ( err )
}
//deactivate the channel on exit
defer close ( ch )
//set a unicast destination, and/or use multicast
trans . SetMulticast ( 1 , true ) //this specific setup will not multicast on windows,
//because no bind address was provided
//set some example ip-addresses
trans . SetDestinations ( 1 , [] string { "192.168.1.13" , "192.168.1.1" })
//send some random data for 10 seconds
for i := 0 ; i < 20 ; i ++ {
ch <- [ 512 ] byte { byte ( rand . Int ()), byte ( i & 0xFF )}
time . Sleep ( 500 * time . Millisecond )
}
}