gpt4 book ai didi

java - 限制 gstreamer 的 udpsink 的发送速率

转载 作者:行者123 更新时间:2023-11-29 09:01:31 26 4
gpt4 key购买 nike

如果我在发送数据时没有对其进行多路分解,有没有办法限制 gstreamer 的 udpsink?

我有一个管道需要发送未复用的流。

文件源码!发球台名称=t! tsdemux ! ffdec_h264 ! videosink t. udpsink

主要关注的是:filesrc ! udpsink

我看不出有什么方法可以通过 filesrc、queue 或 udpsink 选项来限制它。使用 sync 不起作用,因为我假设没有要同步的媒体流。因此,使用该管道的结果是数据尽可能快地通过 udpsink 馈送,这是接收 udpsrc 无法处理的。

我们已经尝试使用 appsrc 作为基本元素编写我们自己的 udpsink,使用这种数据包限制方案(在数据包发送方法中有一个 thread.sleep(throttleDelay);):

/**
* Update the delay to pause the packet sending thread.
* Calculated by dividing how many bytes (roughly) need to be sent <code>packMaxSize</code>
* by the target bytes/sec rate to get how many seconds are needed. Then multiplying to get
* time in milliseconds.
*/
private void updateThrottle() {
if (targetRate > 0)
{
throttleDelay = (long)((1000.0 * packetMaxSize) / (double)targetRate);
if (throttleDelay < 0) {
throttleDelay = 0;
}
} else {
throttleDelay = 0;
}
}

但是无论速度设置到什么程度,这似乎都不起作用。太慢了,一帧就通过了。太快了,一两个通过。在“正确”的速度 (500 kB/s) 下,帧以 0.5-2 FPS 的速度进入,但它已严重损坏。

这是在代码中解决这个问题的正确方法吗? gstreamer 有没有办法限制吞吐量?

最佳答案

您可能想要做的是使用 RTP 作为您的传输协议(protocol)。通过使用提供的 rtph264pay,您可以设置 MTU 大小,例如:

filesrc !  tsdemux ! tee name=t ! ffdec_h264 ! videosink t. rtph264pay mtu=1300 ! udpsink

应该成功。

关于java - 限制 gstreamer 的 udpsink 的发送速率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17149225/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com