动态添加编码器时,Gstreamer 元素会阻塞很长时间
Gstreamer elements block for a long time when adding encoder dynamically
我正在创建一个应用程序,通过为请求的分辨率动态创建 ABR 阶梯来查看摄像头源。
以下是我的管道,它是静态的
gst-launch-1.0 hlssink2 name=ingest1 playlist-location=live/stream.m3u8 location=live/segment%d.ts max-files=10 target-duration=2 \
rtspsrc location="rtsp://myrtspcamurl:554/" name=rtspsrc0" \
rtspsrc0. ! rtph264depay ! tee name=t \
t. ! queue ! ingest1.video \
t. ! queue ! decodebin ! tee name=decode_t \
decode_t. ! queue ! videorate ! videoscale ! video/x-raw,framerate=2/1,width=240,height=240 ! videoconvert ! jpegenc ! multifilesink location=stills/stills%d.jpg \
decode_t. ! queue ! videoscale ! video/x-raw,width=640,height=360 ! openh264enc ! hlssink2 location=360/segment%d.ts playlist-location=360/stream.m3u8
我正在尝试以编程方式添加以下动态编码器管道,如下所示
decode_t. ! queue ! videoscale ! video/x-raw,width=854,height=480 ! openh264enc ! hlssink2 location=480/segment%d.ts playlist-location=480/stream.m3u8
为了添加此管道,我从 decode_t
发球台获取了一个新的 src pad 并设置了 BLOCK_DOWNSTREAM
。
一切正常。
我遇到的问题是:
当管道 运行ing 数小时摄取视频时,当我启动一个新的编码器管道时,它会阻塞另一个 360p 阶梯,直到这个新的 hlsink2(480p) 的段数达到相同的数字作为 360p.
因此,两个流的 stream.m3u8 在此之前都无法使用。它几乎看起来像是在尝试同步管道 运行 时间。
有解决办法吗?
我在 github -> https://github.com/ggovindan/abr_ladder
中也有此的工作版本
非常感谢任何帮助!!
每个 HLS 输出箱中的 videorate
默认情况下总是从 运行 时间 0 开始输出。如果你这样做
videorate.set_property("skip-to-first", true);
在 create_encoder_bin()
那么这应该按预期运行。
我正在创建一个应用程序,通过为请求的分辨率动态创建 ABR 阶梯来查看摄像头源。 以下是我的管道,它是静态的
gst-launch-1.0 hlssink2 name=ingest1 playlist-location=live/stream.m3u8 location=live/segment%d.ts max-files=10 target-duration=2 \
rtspsrc location="rtsp://myrtspcamurl:554/" name=rtspsrc0" \
rtspsrc0. ! rtph264depay ! tee name=t \
t. ! queue ! ingest1.video \
t. ! queue ! decodebin ! tee name=decode_t \
decode_t. ! queue ! videorate ! videoscale ! video/x-raw,framerate=2/1,width=240,height=240 ! videoconvert ! jpegenc ! multifilesink location=stills/stills%d.jpg \
decode_t. ! queue ! videoscale ! video/x-raw,width=640,height=360 ! openh264enc ! hlssink2 location=360/segment%d.ts playlist-location=360/stream.m3u8
我正在尝试以编程方式添加以下动态编码器管道,如下所示
decode_t. ! queue ! videoscale ! video/x-raw,width=854,height=480 ! openh264enc ! hlssink2 location=480/segment%d.ts playlist-location=480/stream.m3u8
为了添加此管道,我从 decode_t
发球台获取了一个新的 src pad 并设置了 BLOCK_DOWNSTREAM
。
一切正常。
我遇到的问题是:
当管道 运行ing 数小时摄取视频时,当我启动一个新的编码器管道时,它会阻塞另一个 360p 阶梯,直到这个新的 hlsink2(480p) 的段数达到相同的数字作为 360p.
因此,两个流的 stream.m3u8 在此之前都无法使用。它几乎看起来像是在尝试同步管道 运行 时间。
有解决办法吗? 我在 github -> https://github.com/ggovindan/abr_ladder
中也有此的工作版本非常感谢任何帮助!!
每个 HLS 输出箱中的 videorate
默认情况下总是从 运行 时间 0 开始输出。如果你这样做
videorate.set_property("skip-to-first", true);
在 create_encoder_bin()
那么这应该按预期运行。