diff --git a/serverconf_test.go b/serverconf_test.go index 2a1e28ba..9df4ef96 100644 --- a/serverconf_test.go +++ b/serverconf_test.go @@ -294,11 +294,13 @@ func TestServerPublishReadTCP(t *testing.T) { case "gstreamer": cnt1, err := newContainer("gstreamer", "publish", []string{ - "filesrc location=emptyvideo.ts ! tsdemux ! queue ! video/x-h264 ! h264parse config-interval=1 ! rtspclientsink " + + "filesrc location=emptyvideo.ts ! tsdemux ! video/x-h264 ! rtspclientsink " + "location=" + proto + "://127.0.0.1:8554/teststream protocols=tcp tls-validation-flags=0 latency=0 timeout=0 rtx-time=0", }) require.NoError(t, err) defer cnt1.close() + + time.Sleep(1 * time.Second) } time.Sleep(1 * time.Second) diff --git a/serverconn.go b/serverconn.go index 712febf8..b54abd59 100644 --- a/serverconn.go +++ b/serverconn.go @@ -195,6 +195,15 @@ func (sc *ServerConn) backgroundRead(handlers ServerConnReadHandlers, done chan }, fmt.Errorf("transport header: %s", err) } + // workaround to prevent a bug in rtspclientsink + // that makes impossible for the client to receive the response + // and send frames. + // this was causing problems during unit tests. + if ua, ok := req.Header["User-Agent"]; ok && len(ua) == 1 && + strings.HasPrefix(ua[0], "GStreamer") { + time.Sleep(1 * time.Second) + } + return handlers.OnSetup(req, th) } diff --git a/testimages/gstreamer/Dockerfile b/testimages/gstreamer/Dockerfile index 7fe8be39..3d813c16 100644 --- a/testimages/gstreamer/Dockerfile +++ b/testimages/gstreamer/Dockerfile @@ -1,5 +1,5 @@ ###################################### -FROM ubuntu:20.04 AS exitafterframe +FROM ubuntu:20.04 AS build RUN apt update && apt install -y --no-install-recommends \ pkg-config \ @@ -36,7 +36,7 @@ RUN apt update && apt install -y --no-install-recommends \ gstreamer1.0-libav \ && rm -rf /var/lib/apt/lists/* -COPY --from=exitafterframe /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libexitafterframe.so /usr/lib/x86_64-linux-gnu/gstreamer-1.0/ +COPY --from=build /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libexitafterframe.so /usr/lib/x86_64-linux-gnu/gstreamer-1.0/ COPY emptyvideo.ts /