New upstream version 21.0.2+dfsg1
This commit is contained in:
parent
1f1bbb3518
commit
baafb6325b
706 changed files with 49633 additions and 5044 deletions
|
|
@ -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
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue