New upstream version 21.0.2+dfsg1

This commit is contained in:
Sebastian Ramacher 2018-02-19 20:54:37 +01:00
parent 1f1bbb3518
commit baafb6325b
706 changed files with 49633 additions and 5044 deletions

View file

@ -178,15 +178,17 @@ static void rtmp_stream_stop(void *data, uint64_t ts)
pthread_join(stream->connect_thread, NULL);
stream->stop_ts = ts / 1000ULL;
os_event_signal(stream->stop_event);
if (ts)
stream->shutdown_timeout_ts = ts +
(uint64_t)stream->max_shutdown_time_sec * 1000000000ULL;
if (active(stream)) {
os_event_signal(stream->stop_event);
if (stream->stop_ts == 0)
os_sem_post(stream->send_sem);
} else {
obs_output_signal_stop(stream->output, OBS_OUTPUT_SUCCESS);
}
}
@ -293,6 +295,8 @@ static void droptest_cap_data_rate(struct rtmp_stream *stream, size_t size)
static int socket_queue_data(RTMPSockBuf *sb, const char *data, int len, void *arg)
{
UNUSED_PARAMETER(sb);
struct rtmp_stream *stream = arg;
retry_send:
@ -345,7 +349,8 @@ static int send_packet(struct rtmp_stream *stream,
}
}
flv_packet_mux(packet, &data, &size, is_header);
flv_packet_mux(packet, is_header ? 0 : stream->start_dts_offset,
&data, &size, is_header);
#ifdef TEST_FRAMEDROPS
droptest_cap_data_rate(stream, size);
@ -656,6 +661,14 @@ static int init_send(struct rtmp_stream *stream)
obs_data_t *params = obs_encoder_get_settings(vencoder);
if (params) {
int bitrate = obs_data_get_int(params, "bitrate");
if (!bitrate) {
warn ("Video encoder didn't return a "
"valid bitrate, new network "
"code may function poorly. "
"Low latency mode disabled.");
stream->low_latency_mode = false;
bitrate = 10000;
}
total_bitrate += bitrate;
obs_data_release(params);
}
@ -666,6 +679,8 @@ static int init_send(struct rtmp_stream *stream)
obs_data_t *params = obs_encoder_get_settings(aencoder);
if (params) {
int bitrate = obs_data_get_int(params, "bitrate");
if (!bitrate)
bitrate = 160;
total_bitrate += bitrate;
obs_data_release(params);
}
@ -864,6 +879,7 @@ static bool init_connect(struct rtmp_stream *stream)
stream->total_bytes_sent = 0;
stream->dropped_frames = 0;
stream->min_priority = 0;
stream->got_first_video = false;
settings = obs_output_get_settings(stream->output);
dstr_copy(&stream->path, obs_service_get_url(service));
@ -951,8 +967,9 @@ static inline size_t num_buffered_packets(struct rtmp_stream *stream)
static void drop_frames(struct rtmp_stream *stream, const char *name,
int highest_priority, bool pframes)
{
UNUSED_PARAMETER(pframes);
struct circlebuf new_buf = {0};
uint64_t last_drop_dts_usec = 0;
int num_frames_dropped = 0;
#ifdef _DEBUG
@ -967,8 +984,6 @@ static void drop_frames(struct rtmp_stream *stream, const char *name,
struct encoder_packet packet;
circlebuf_pop_front(&stream->packets, &packet, sizeof(packet));
last_drop_dts_usec = packet.dts_usec;
/* do not drop audio data or video keyframes */
if (packet.type == OBS_ENCODER_AUDIO ||
packet.drop_priority >= highest_priority) {
@ -1078,10 +1093,17 @@ static void rtmp_stream_data(void *data, struct encoder_packet *packet)
if (disconnected(stream) || !active(stream))
return;
if (packet->type == OBS_ENCODER_VIDEO)
if (packet->type == OBS_ENCODER_VIDEO) {
if (!stream->got_first_video) {
stream->start_dts_offset =
get_ms_time(packet, packet->dts);
stream->got_first_video = true;
}
obs_parse_avc_packet(&new_packet, packet);
else
} else {
obs_encoder_packet_ref(&new_packet, packet);
}
pthread_mutex_lock(&stream->packets_mutex);
@ -1172,21 +1194,23 @@ static int rtmp_stream_connect_time(void *data)
}
struct obs_output_info rtmp_output_info = {
.id = "rtmp_output",
.flags = OBS_OUTPUT_AV |
OBS_OUTPUT_ENCODED |
OBS_OUTPUT_SERVICE |
OBS_OUTPUT_MULTI_TRACK,
.get_name = rtmp_stream_getname,
.create = rtmp_stream_create,
.destroy = rtmp_stream_destroy,
.start = rtmp_stream_start,
.stop = rtmp_stream_stop,
.encoded_packet = rtmp_stream_data,
.get_defaults = rtmp_stream_defaults,
.get_properties = rtmp_stream_properties,
.get_total_bytes = rtmp_stream_total_bytes_sent,
.get_congestion = rtmp_stream_congestion,
.get_connect_time_ms= rtmp_stream_connect_time,
.get_dropped_frames = rtmp_stream_dropped_frames
.id = "rtmp_output",
.flags = OBS_OUTPUT_AV |
OBS_OUTPUT_ENCODED |
OBS_OUTPUT_SERVICE |
OBS_OUTPUT_MULTI_TRACK,
.encoded_video_codecs = "h264",
.encoded_audio_codecs = "aac",
.get_name = rtmp_stream_getname,
.create = rtmp_stream_create,
.destroy = rtmp_stream_destroy,
.start = rtmp_stream_start,
.stop = rtmp_stream_stop,
.encoded_packet = rtmp_stream_data,
.get_defaults = rtmp_stream_defaults,
.get_properties = rtmp_stream_properties,
.get_total_bytes = rtmp_stream_total_bytes_sent,
.get_congestion = rtmp_stream_congestion,
.get_connect_time_ms = rtmp_stream_connect_time,
.get_dropped_frames = rtmp_stream_dropped_frames
};