Skip to content

Commit

Permalink
obs-output/rtmp,obs-x264: disable frame drops
Browse files Browse the repository at this point in the history
Adds toggle to disable frame dropping; instead of missing frames,
client will have frozen frames but will not lose anything unless the
buffering is extreme, in which case there can be an accelerated play
at client.
Frame dropping can be enabled or not along with adaptive bitrate. The
latter activates earlier than frame dropping.
  • Loading branch information
pkviet committed Nov 22, 2017
1 parent bea8a42 commit d49ef4d
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 1 deletion.
5 changes: 4 additions & 1 deletion plugins/obs-outputs/rtmp-stream.c
Original file line number Diff line number Diff line change
Expand Up @@ -961,12 +961,14 @@ static bool rtmp_stream_start(void *data)
stream->initial_bitrate = bitrate;
stream->dynamic_bitrate = bitrate;
stream->switch_variable_bitrate = obs_data_get_bool(params, "dynamic_variable_bitrate");
stream->disable_frame_drops = obs_data_get_bool(params, "disable_frame_drops");
obs_data_release(params);
}
else {
stream->initial_bitrate = 2500;
stream->dynamic_bitrate = 2500;
stream->switch_variable_bitrate = false;
stream->disable_frame_drops = false;
}
stream->last_adjustment_time = os_gettime_ns() / 1000000;
stream->last_congestion = 0;
Expand Down Expand Up @@ -1091,7 +1093,8 @@ static void check_to_drop_frames(struct rtmp_stream *stream, bool pframes)

if (buffer_duration_usec > drop_threshold) {
debug("buffer_duration_usec: %" PRId64, buffer_duration_usec);
drop_frames(stream, name, priority, pframes);
if (!stream->disable_frame_drops)
drop_frames(stream, name, priority, pframes);
}
}

Expand Down
1 change: 1 addition & 0 deletions plugins/obs-outputs/rtmp-stream.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ struct rtmp_stream {
float mean_congestion;
float congestion_array[CONGESTION_ARRAY_SIZE];
size_t congestion_counter;
bool disable_frame_drops;

RTMP rtmp;

Expand Down
3 changes: 3 additions & 0 deletions plugins/obs-x264/obs-x264.c
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ static void obs_x264_defaults(obs_data_t *settings)
obs_data_set_default_string(settings, "tune", "");
obs_data_set_default_string(settings, "x264opts", "");
obs_data_set_default_bool (settings, "dynamic_variable_bitrate", false);
obs_data_set_default_bool (settings, "disable_frame_drops", false);
obs_data_set_default_int (settings, "i_nal_hrd", X264_NAL_HRD_NONE);
}

Expand All @@ -132,6 +133,7 @@ static inline void add_strings(obs_property_t *list, const char *const *strings)
#define TEXT_NONE obs_module_text("None")
#define TEXT_X264_OPTS obs_module_text("EncoderOptions")
#define TEXT_DYN_BITRATE obs_module_text("Dynamic Variable Bitrate")
#define TEXT_DIS_DROP obs_module_text("Disable Frame Drops")

static bool use_bufsize_modified(obs_properties_t *ppts, obs_property_t *p,
obs_data_t *settings)
Expand Down Expand Up @@ -209,6 +211,7 @@ static obs_properties_t *obs_x264_props(void *unused)
obs_property_list_add_string(list, TEXT_NONE, "");
add_strings(list, x264_tune_names);
obs_properties_add_bool(props, "dynamic_variable_bitrate", TEXT_DYN_BITRATE);
obs_properties_add_bool(props, "disable_frame_drops", TEXT_DIS_DROP);

#ifdef ENABLE_VFR
obs_properties_add_bool(props, "vfr", TEXT_VFR);
Expand Down

0 comments on commit d49ef4d

Please sign in to comment.