You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.4 KiB
77 lines
1.4 KiB
package main |
|
|
|
import ( |
|
"io" |
|
"net" |
|
"net/http" |
|
|
|
icore "github.com/ipfs/interface-go-ipfs-core" |
|
log "github.com/sirupsen/logrus" |
|
"github.com/yutopp/go-rtmp" |
|
) |
|
|
|
var ipfs icore.CoreAPI |
|
|
|
func main() { |
|
resetDirectories() |
|
|
|
ipfsInstance, node, _ := createIPFSInstance() |
|
ipfs = *ipfsInstance |
|
|
|
createIPFSDirectory(ipfsInstance, "./hls") |
|
// touch("hls/stream.m3u8") |
|
|
|
go startIPFSNode(ipfs, node) |
|
go monitorVideoContent("./hls/", ipfsInstance) |
|
go startChatServer() |
|
|
|
startRTMPService() |
|
} |
|
|
|
func startChatServer() { |
|
// log.SetFlags(log.Lshortfile) |
|
|
|
// websocket server |
|
server := NewServer("/entry") |
|
go server.Listen() |
|
|
|
// static files |
|
http.Handle("/", http.FileServer(http.Dir("webroot"))) |
|
|
|
log.Fatal(http.ListenAndServe(":8080", nil)) |
|
} |
|
|
|
func startRTMPService() { |
|
tcpAddr, err := net.ResolveTCPAddr("tcp", ":1935") |
|
if err != nil { |
|
log.Panicf("Failed: %+v", err) |
|
} |
|
|
|
listener, err := net.ListenTCP("tcp", tcpAddr) |
|
if err != nil { |
|
log.Panicf("Failed: %+v", err) |
|
} |
|
|
|
srv := rtmp.NewServer(&rtmp.ServerConfig{ |
|
OnConnect: func(conn net.Conn) (io.ReadWriteCloser, *rtmp.ConnConfig) { |
|
l := log.StandardLogger() |
|
//l.SetLevel(logrus.DebugLevel) |
|
|
|
h := &Handler{} |
|
|
|
return conn, &rtmp.ConnConfig{ |
|
Handler: h, |
|
|
|
ControlState: rtmp.StreamControlStateConfig{ |
|
DefaultBandwidthWindowSize: 6 * 1024 * 1024 / 8, |
|
}, |
|
|
|
Logger: l, |
|
} |
|
}, |
|
}) |
|
if err := srv.Serve(listener); err != nil { |
|
log.Panicf("Failed: %+v", err) |
|
} |
|
|
|
}
|
|
|