我正在开发一个RTSP服务器,它应该模拟一个活动源,同时从一个文件流式传输数据。限制gstreamer管道吞吐量来模拟活动源
我现在已经大多基于gst-rtsp-server例如test-readme.c,只有下列管道:
gst_rtsp_media_factory_set_launch(factory, "("
"filesrc location=stream.mkv ! matroskademux name=demuxer "
"demuxer. ! queue ! rtph264pay name=pay0 pt=96 "
"demuxer. ! queue ! rtpmp4gpay name=pay1 pt=97 "
")");
这工作得非常好,但有一个问题:当RTSP客户端(使用RTSP/TCP交织传输)无法接收数据,则整个管道将锁定,直到客户端再次准备好,然后在原始位置恢复而不会跳转。
由于我想模拟无法无限缓冲视频的直播节目源,因此在这种情况下所需的行为是继续播放该文件,因此当客户端阻塞5秒钟时,它将失去5秒的录制时间。我试图通过限制队列大小并将它们设置为泄漏(通过将它们设置为queue max-size-bytes=1000000 max-size-time=1000000000 leaky=upstream
,它应该提供〜1秒的视频缓冲区,但不再有)来实现此目的。这并没有完全按照我所希望的那样工作:源和分流器填满队列,然后在0.1秒内完全清空。
我想我需要某种方法来限制队列之前的管道吞吐量,要么通过将分流器限制为实时解复用,要么寻找/制作gstreamer过滤器,以实现每秒1秒的实时数据。
你有任何提示如何做到这一点?