Dieses Projekt gilt als stabil und es ist derzeit keine wesentliche Funktionsentwicklung geplant. Pull-Anfragen und Probleme sind jedoch willkommen: Support/Wartung wird bereitgestellt, sofern die Zeit es erlaubt.
Dies ist eine sACN-Implementierung für Golang. Es basiert auf dem E1.31-Protokoll der ESTA. Eine Kopie finden Sie hier.
Dies ist noch keineswegs eine vollständige Implementierung, könnte aber in der Zukunft der Fall sein. Wenn Sie ein vollständiges DMX-Paket sehen möchten, sehen Sie sich das OLA-Projekt an.
Es gibt auch einige Dokumentation auf godoc.org. Dieses Projekt unterstützt Go-Module, die in Go 1.11 eingeführt wurden.
go get github.com/Hundemeier/go-sacn/sacn
Der einfachste Weg, sACN-Pakete zu empfangen, ist die Verwendung sacn.NewReceiverSocket
.
Aktuelle Informationen finden Sie auf der Website godoc.org mit diesem Repo.
Sie können den Empfang von Paketen auf einem Receiver über receiver.Stop()
stoppen. Bitte beachten Sie, dass es bis zu 2,5 Sekunden dauern kann, bis der Empfang beendet und alle Kanäle geschlossen werden. Wenn Sie einen Receiver einmal gestoppt haben, können Sie ihn über receiver.Start()
neu starten.
Um DMX-Daten zu übertragen, müssen Sie ein Transmitter
initialisieren. Dies verarbeitet alle protokollspezifischen Aktionen (derzeit nicht alle). Sie können Universen aktivieren, wenn Sie Daten versenden möchten. Anschließend können Sie einen Kanal für 512-Byte-Arrays verwenden, um diese über das Netzwerk zu übertragen.
Es gibt zwei verschiedene Arten der Adressierung des Empfängers: Unicast und Multicast. Beachten Sie bei der Verwendung von Multicast, dass Sie auf einigen Betriebssystemen (z. B. Windows) eine Bind-Adresse angeben müssen. Sie können beide gleichzeitig und beliebig viele Unicast-Adressen nutzen. Um festzulegen, ob Multicast verwendet werden soll, rufen Sie transmitter.SetMulticast(<universe>, <bool>)
auf. Sie können über transmitter.SetDestinations(<universe>, <[]string>)
mehrere Unicast-Ziele als Slice festlegen. Beachten Sie, dass alle vorhandenen Ziele überschrieben werden. Wenn Sie ein Ziel anhängen möchten, können Sie transmitter.Destination(<universe>)
verwenden, das eine tiefe Kopie der verwendeten net.UDPAddr-Objekte zurückgibt.
GoDoc-Beispiele:
Beispiel eines Senders:
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 )
}
}