mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-12-24 13:48:04 +08:00
58 lines
1.1 KiB
Go
58 lines
1.1 KiB
Go
package plugin_rtmp
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"net/url"
|
|
"time"
|
|
|
|
"m7s.live/v5"
|
|
)
|
|
|
|
type RTMPDevice struct {
|
|
m7s.DeviceTask
|
|
tcpAddr *net.TCPAddr
|
|
url *url.URL
|
|
}
|
|
|
|
func (d *RTMPDevice) Start() (err error) {
|
|
d.url, err = url.Parse(d.Device.URL)
|
|
if err != nil {
|
|
return
|
|
}
|
|
if ips, err := net.LookupIP(d.url.Hostname()); err != nil {
|
|
return err
|
|
} else if len(ips) == 0 {
|
|
return fmt.Errorf("no IP found for host: %s", d.url.Hostname())
|
|
} else {
|
|
d.tcpAddr, err = net.ResolveTCPAddr("tcp", net.JoinHostPort(ips[0].String(), d.url.Port()))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if d.tcpAddr.Port == 0 {
|
|
if d.url.Scheme == "rtmps" {
|
|
d.tcpAddr.Port = 443
|
|
} else {
|
|
d.tcpAddr.Port = 1935
|
|
}
|
|
}
|
|
}
|
|
return d.DeviceTask.Start()
|
|
}
|
|
|
|
func (d *RTMPDevice) GetTickInterval() time.Duration {
|
|
return time.Second * 5
|
|
}
|
|
|
|
func (d *RTMPDevice) Tick(any) {
|
|
startTime := time.Now()
|
|
conn, err := net.DialTCP("tcp", nil, d.tcpAddr)
|
|
if err != nil {
|
|
d.Device.ChangeStatus(m7s.DeviceStatusOffline)
|
|
return
|
|
}
|
|
conn.Close()
|
|
d.Device.RTT = time.Since(startTime)
|
|
d.Device.ChangeStatus(m7s.DeviceStatusOnline)
|
|
}
|