一、问题描述
ffmpeg-3.1.1开始,为了控制udp码流发送稳定性,加入了bitrate参数。bitrate参数在ffmpeg官网释义如下:
bitrate=bitrate
If set to nonzero, the output will have the specified constant bitrate if the input has enough packets to sustain it.
其实现方式是,根据UDP包大小与用户设置的bitrate值,规划每个UDP包发送的时刻,从而实现数据的均匀发送,达到平稳码流的目的。FFMPEG中原始实现代码如下:
static void *circular_buffer_task_tx( void *_URLContext)
{
URLContext *h = _URLContext;
UDPContext *s = h->priv_data;
int old_cancelstate;
int64_t target_timestamp = av_gettime_relative(); //目标发送时间
int64_t start_timestamp = av_gettime_relative(); //开始发送时间
int64_t sent_bits = 0;
int64_t burst_interval = s->bitrate ? (s->burst_bits * 1000000 / s->bitrate) : 0; //发送间隔
int64_t max_delay = s->bitrate ? ((int64_t)h->max_packet_size * 8