Expose demand based audio and video reads on local stream handles

This commit is contained in:
evgeny committed 2026-10-13 22:30:47 +02:00
1 parent 866ca0923d
commit 9f37c54a3c
3 files changed
+18 -16

No files matched your search

+6 -5
View File
@@ -784,7 +784,7 @@ int stream_get_info(const struct STREAM_HANDLE *h, struct stream_info *info) {
}
/* Первый frontend создаёт индекс точной эпохи, остальные владельцы используют его без копии RS-кольца. */
int stream_media_enable(struct STREAM_HANDLE *h, int reader) {
int stream_media_enable(struct STREAM_HANDLE *h, unsigned tracks) {
if (!stream_handle_active(h)) { DEBUG_ERROR(DEBUG_CATEGORY_STREAM, "media enable: detached handle"); return STREAM_ERR_STATE; }
struct stream_session *s = h->session;
if (!s->media) {
@@ -796,8 +796,8 @@ int stream_media_enable(struct STREAM_HANDLE *h, int reader) {
s->media_seek = s->next_seq - 1; s->media_seeking = 1;
}
}
if (reader && !h->media_cursor) {
int result = stream_media_cursor_create(&h->media_cursor, s->media);
if (tracks && !h->media_cursor) {
int result = stream_media_cursor_create(&h->media_cursor, s->media, tracks);
if (result != STREAM_OK) return result;
}
session_media_schedule(s);
@@ -805,13 +805,14 @@ int stream_media_enable(struct STREAM_HANDLE *h, int reader) {
}
/* Чтение изменяет только локальный cursor; live ingest/READY/выдачи продолжают двигаться независимо. */
int stream_media_read(struct STREAM_HANDLE *h, int64_t position, int64_t lookahead, struct stream_media_packet *packet) {
int stream_media_read(struct STREAM_HANDLE *h, int64_t position, int64_t video_ahead, int64_t audio_ahead,
struct stream_media_packet *packet) {
if (!stream_handle_active(h) || !h->media_cursor) {
DEBUG_WARN(DEBUG_CATEGORY_STREAM, "media read: detached/unconfigured reader"); return STREAM_ERR_STATE;
}
if (h->session->media_failed) return STREAM_ERR_FORMAT;
if (h->session->media_seeking || h->session->media_next < h->session->next_seq) return STREAM_WAIT;
return stream_media_cursor_read(h->media_cursor, position, lookahead, packet);
return stream_media_cursor_read(h->media_cursor, position, video_ahead, audio_ahead, packet);
}
int stream_media_get_status(struct STREAM_HANDLE *h, struct stream_media_status *status) {
+4 -3
View File
@@ -88,11 +88,12 @@ int stream_handle_reason(const struct STREAM_HANDLE *handle);
int stream_get_info(const struct STREAM_HANDLE *handle, struct stream_info *info);
/* Медиаплеер использует тот же RS-buffer, но собственные позиции чтения.
* reader=0 включает только общий индекс (publisher), reader=1 создаёт cursor этого handle.
* tracks=0 включает только общий индекс; VIDEO или VIDEO|AUDIO создаёт cursor этого handle.
* Все вызовы — uasync. Заимствованный packet действует до следующего read/close.
* LIVE DATA/GAP/END callbacks описывают сетевой прогресс; конец отложенного просмотра получает media_read. */
int stream_media_enable(struct STREAM_HANDLE *handle, int reader);
int stream_media_read(struct STREAM_HANDLE *handle, int64_t position_us, int64_t lookahead_us, struct stream_media_packet *packet);
int stream_media_enable(struct STREAM_HANDLE *handle, unsigned tracks);
int stream_media_read(struct STREAM_HANDLE *handle, int64_t position_us, int64_t video_ahead_us, int64_t audio_ahead_us,
struct stream_media_packet *packet);
int stream_media_get_status(struct STREAM_HANDLE *handle, struct stream_media_status *status);
int stream_media_resync(struct STREAM_HANDLE *handle);