MutexLock lock(&mutex);
assert(stream_index >= 0 && stream_index < ssize_t(streams.size()));
streams[stream_index]->http_header = http_header;
+
+ if (stream_header != streams[stream_index]->stream_header) {
+ // We cannot start at any of the older starting points anymore,
+ // since they'd get the wrong header for the stream (not to mention
+ // that a changed header probably means the stream restarted,
+ // which means any client starting on the old one would probably
+ // stop playing properly at the change point). Next block
+ // should be a suitable starting point (if not, something is
+ // pretty strange), so it will fill up again soon enough.
+ streams[stream_index]->suitable_starting_points.clear();
+ }
streams[stream_index]->stream_header = stream_header;
- // FIXME: We should reset last_suitable_starting_point at this point.
}
void Server::set_pacing_rate(int stream_index, uint32_t pacing_rate)
// words, we won't send any of the backlog, but we'll start
// sending immediately as we get the next keyframe block.
// This is postcondition #3.
+ Stream *stream = client->stream;
if (client->stream_pos == size_t(-2)) {
client->stream_pos = std::min<size_t>(
- client->stream->bytes_received - client->stream->backlog_size,
+ stream->bytes_received - stream->backlog_size,
0);
client->state = Client::SENDING_DATA;
} else {
- // client->stream_pos should be -1, but it might not be,
- // if we have clients from an older version.
- client->stream_pos = client->stream->bytes_received;
+ client->stream_pos = stream->bytes_received;
client->state = Client::WAITING_FOR_KEYFRAME;
}
- client->stream->put_client_to_sleep(client);
+ stream->put_client_to_sleep(client);
return;
}
case Client::WAITING_FOR_KEYFRAME: {