提交 5c27ab8d 编写于 作者: J jp9000

obs-output: Add ability to get congestion to rtmp output

上级 d8500b47
......@@ -91,6 +91,7 @@ struct rtmp_stream {
int64_t pframe_drop_threshold_usec;
int64_t pframe_min_drop_dts_usec;
int min_priority;
float congestion;
int64_t last_dts_usec;
......@@ -883,8 +884,11 @@ static void check_to_drop_frames(struct rtmp_stream *stream, bool pframes)
stream->pframe_drop_threshold_usec :
stream->drop_threshold_usec;
if (num_packets < 5)
if (num_packets < 5) {
if (!pframes)
stream->congestion = 0.0f;
return;
}
circlebuf_peek_front(&stream->packets, &first, sizeof(first));
......@@ -896,6 +900,11 @@ static void check_to_drop_frames(struct rtmp_stream *stream, bool pframes)
* sent is higher than threshold, drop frames */
buffer_duration_usec = stream->last_dts_usec - first.dts_usec;
if (!pframes) {
stream->congestion = (float)buffer_duration_usec /
(float)drop_threshold;
}
if (buffer_duration_usec > drop_threshold) {
debug("buffer_duration_usec: %" PRId64, buffer_duration_usec);
drop_frames(stream, name, priority, p_min_dts_usec);
......@@ -998,6 +1007,12 @@ static int rtmp_stream_dropped_frames(void *data)
return stream->dropped_frames;
}
static float rtmp_stream_congestion(void *data)
{
struct rtmp_stream *stream = data;
return stream->min_priority > 0 ? 1.0f : stream->congestion;
}
struct obs_output_info rtmp_output_info = {
.id = "rtmp_output",
.flags = OBS_OUTPUT_AV |
......@@ -1013,5 +1028,6 @@ struct obs_output_info rtmp_output_info = {
.get_defaults = rtmp_stream_defaults,
.get_properties = rtmp_stream_properties,
.get_total_bytes = rtmp_stream_total_bytes_sent,
.get_congestion = rtmp_stream_congestion,
.get_dropped_frames = rtmp_stream_dropped_frames
};
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册