이 프로젝트는 안정적인 것으로 간주되며 현재 중요한 기능 개발이 계획되어 있지 않습니다. 그러나 끌어오기 요청 및 문제는 환영합니다. 시간이 허락하는 한 지원/유지보수가 제공됩니다.
이것은 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>)
을 통해 여러 유니캐스트 대상을 슬라이스로 설정할 수 있습니다. 기존 대상을 덮어쓰게 됩니다. 대상을 추가하려면 사용된 net.UDPAddr 개체의 전체 복사본을 반환하는 transmitter.Destination(<universe>)
사용할 수 있습니다.
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 )
}
}