該項目被認為是穩定的,目前沒有計劃進行重大功能開發。但是,歡迎提出拉取請求和問題:將在時間允許的情況下提供支援/維護。
這是 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 )
}
}