mirror of
https://github.com/aler9/gortsplib
synced 2025-09-27 03:25:52 +08:00

this fixes most errors "found no interface that is multicast-capable and can communicate with IP".
48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
// Package multicast contains multicast connections.
|
|
package multicast
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
)
|
|
|
|
// Conn is a Multicast connection.
|
|
type Conn interface {
|
|
net.PacketConn
|
|
SetReadBuffer(int) error
|
|
}
|
|
|
|
// InterfaceForSource returns a multicast-capable interface that can communicate with given IP.
|
|
//
|
|
// Deprecated: not used anymore.
|
|
func InterfaceForSource(ip net.IP) (*net.Interface, error) {
|
|
if ip.Equal(net.ParseIP("127.0.0.1")) {
|
|
return nil, fmt.Errorf("IP 127.0.0.1 can't be used as source of a multicast stream. Use the LAN IP of your PC")
|
|
}
|
|
|
|
intfs, err := net.Interfaces()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for _, intf := range intfs {
|
|
if (intf.Flags & net.FlagMulticast) == 0 {
|
|
continue
|
|
}
|
|
|
|
var addrs []net.Addr
|
|
addrs, err = intf.Addrs()
|
|
if err == nil {
|
|
for _, addr := range addrs {
|
|
var ipnet *net.IPNet
|
|
_, ipnet, err = net.ParseCIDR(addr.String())
|
|
if err == nil && ipnet.Contains(ip) {
|
|
return &intf, nil
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return nil, fmt.Errorf("found no interface that is multicast-capable and can communicate with IP %v", ip)
|
|
}
|