AlexxIT/go2rtc · error

empty response on RTSP request

Error message

empty response on RTSP request

What it means

RTSP ReadResponse guard: the status line read from the server is an empty string. The server accepted the connection but sent a blank first line — typically a dead/closing connection, a keepalive artifact, or a non-RTSP responder; parsing cannot even begin.

Solutions

  1. Reconnect and resend the RTSP request; blank lines after socket close are common
  2. Verify the target actually speaks RTSP on that port
  3. Check for idle-timeout keepalives (OPTIONS/SETUP with GET_PARAMETER) to prevent server-side closes
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at pkg/tcp/textproto.go:51 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of AlexxIT/go2rtc@c245815e75 (2026-09-07). Data as JSON: /api/errors/0a0392ccf9c4de7f. Report an issue: GitHub.

Appendix: source

Thrown at pkg/tcp/textproto.go:51

		s += string(r.Body)
	}
	return s
}

func (r *Response) Write(w io.Writer) (err error) {
	_, err = w.Write([]byte(r.String()))
	return
}

func ReadResponse(r *bufio.Reader) (*Response, error) {
	tp := textproto.NewReader(r)

	line, err := tp.ReadLine()
	if err != nil {
		return nil, err
	}
	if line == "" {
		return nil, errors.New("empty response on RTSP request")
	}

	ss := strings.SplitN(line, " ", 3)
	if len(ss) != 3 {
		return nil, fmt.Errorf("malformed response: %s", line)
	}

	res := &Response{
		Status: ss[1] + " " + ss[2],
		Proto:  ss[0],
	}

	res.StatusCode, err = strconv.Atoi(ss[1])
	if err != nil {
		return nil, err
	}

	res.Header, err = tp.ReadMIMEHeader()

View on GitHub (pinned to c245815e75)