Add support RTMPS source
This commit is contained in:
+28
-4
@@ -1,6 +1,8 @@
|
||||
package rtmp
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"net"
|
||||
"net/url"
|
||||
"strings"
|
||||
@@ -15,16 +17,38 @@ func Dial(rawURL string) (core.Producer, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
host := u.Host
|
||||
if strings.IndexByte(host, ':') < 0 {
|
||||
host += ":1935"
|
||||
var hostname string // without port
|
||||
if i := strings.IndexByte(u.Host, ':'); i > 0 {
|
||||
hostname = u.Host[:i]
|
||||
} else {
|
||||
hostname = u.Host
|
||||
u.Host += ":1935"
|
||||
}
|
||||
|
||||
conn, err := net.DialTimeout("tcp", host, core.ConnDialTimeout)
|
||||
conn, err := net.DialTimeout("tcp", u.Host, core.ConnDialTimeout)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if u.Scheme != "rtmp" {
|
||||
var conf *tls.Config
|
||||
|
||||
switch {
|
||||
case u.Scheme == "rtmpx" || net.ParseIP(hostname) != nil:
|
||||
conf = &tls.Config{InsecureSkipVerify: true}
|
||||
case u.Scheme == "rtmps":
|
||||
conf = &tls.Config{ServerName: hostname}
|
||||
default:
|
||||
return nil, errors.New("unsupported scheme: " + u.Scheme)
|
||||
}
|
||||
|
||||
tlsConn := tls.Client(conn, conf)
|
||||
if err = tlsConn.Handshake(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
conn = tlsConn
|
||||
}
|
||||
|
||||
rd, err := NewReader(u, conn)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
Reference in New Issue
Block a user