Este proyecto se considera estable y actualmente no está previsto ningún desarrollo significativo de funciones. Sin embargo, las solicitudes de extracción y los problemas son bienvenidos: se proporcionará soporte/mantenimiento según lo permita el tiempo.
Esta es una implementación de sACN para golang. Se basa en el protocolo E1.31 del ESTA. Puede encontrar una copia aquí.
De ninguna manera se trata de una implementación completa todavía, pero puede que lo sea en el futuro. Si desea ver un paquete DMX completo, consulte el proyecto OLA.
También hay documentación en godoc.org. Este proyecto es compatible con los módulos Go introducidos en Go 1.11.
go get github.com/Hundemeier/go-sacn/sacn
La forma más sencilla de recibir paquetes sACN es utilizar sacn.NewReceiverSocket
.
Para obtener información actualizada, visite el sitio web godoc.org con este repositorio.
Puede detener la recepción de paquetes en un receptor mediante receiver.Stop()
. Tenga en cuenta que pueden ser necesarios hasta 2,5 segundos para detener la recepción y cerrar todos los canales. Si detuvo un receptor una vez, puede reiniciarlo mediante receiver.Start()
.
Para transmitir datos DMX, debe inicializar un objeto Transmitter
. Esto maneja todas las acciones específicas del protocolo (actualmente no todas). Puedes activar universos, si deseas enviar datos. Luego puede utilizar un canal para matrices de 512 bytes para transmitirlas a través de la red.
Hay dos tipos diferentes de direccionamiento al receptor: unidifusión y multidifusión. Cuando utilice multidifusión, tenga en cuenta que debe proporcionar una dirección de enlace en algunos sistemas operativos (por ejemplo, Windows). Puede utilizar ambas al mismo tiempo y cualquier número de direcciones de unidifusión. Para establecer si se debe utilizar la multidifusión, llame a transmitter.SetMulticast(<universe>, <bool>)
. Puede configurar múltiples destinos de unidifusión como segmento a través de transmitter.SetDestinations(<universe>, <[]string>)
. Tenga en cuenta que se sobrescribirán todos los destinos existentes. Si desea agregar un destino, puede usar transmitter.Destination(<universe>)
que devuelve una copia profunda de los objetos net.UDPAddr usados.
Ejemplos de GoDoc:
Ejemplo de transmisor:
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 )
}
}