RTMP source: apply read and write timeouts to connection initialization

This commit is contained in:
aler9 2021-04-24 20:47:43 +02:00
parent a1a56ff203
commit faf8d24dff
4 changed files with 181 additions and 150 deletions

View file

@ -1,18 +1,44 @@
package rtmp
import (
"bufio"
"context"
"net"
"net/url"
"github.com/notedit/rtmp/format/rtmp"
)
// Dial connects to a server in reading mode.
func Dial(address string) (*Conn, error) {
rconn, nconn, err := rtmp.NewClient().Dial(address, rtmp.PrepareReading)
// DialContext connects to a server in reading mode.
func DialContext(ctx context.Context, address string) (*Conn, error) {
// https://github.com/aler9/rtmp/blob/master/format/rtmp/client.go#L74
u, err := url.Parse(address)
if err != nil {
return nil, err
}
host := rtmp.UrlGetHost(u)
var d net.Dialer
nconn, err := d.DialContext(ctx, "tcp", host)
if err != nil {
return nil, err
}
rw := &bufio.ReadWriter{
Reader: bufio.NewReaderSize(nconn, 4096),
Writer: bufio.NewWriterSize(nconn, 4096),
}
rconn := rtmp.NewConn(rw)
rconn.URL = u
return &Conn{
rconn: rconn,
nconn: nconn,
}, nil
}
// ClientHandshake performs the handshake of a client-side connection.
func (c *Conn) ClientHandshake() error {
return c.rconn.Prepare(rtmp.StageGotPublishOrPlayCommand, rtmp.PrepareReading)
}