Этот проект считается стабильным, и в настоящее время не планируется никаких значительных изменений в его функциях. Тем не менее, запросы на включение и проблемы приветствуются: поддержка/обслуживание будет предоставляться, когда позволит время.
Это реализация SACN для golang. Он основан на протоколе E1.31 ESTA. Копию можно найти здесь.
Это еще не полная реализация, но может быть в будущем. Если вы хотите увидеть полный пакет DMX, см. проект OLA.
На godoc.org также есть некоторая документация. Этот проект поддерживает модули Go, представленные в Go 1.11.
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.UDPAdr.
Примеры 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 )
}
}