pause/resume gstreamer stream when video stream stops/starts

This commit is contained in:
thiccaxe
2023-09-04 15:12:55 -07:00
parent dc52c04ed0
commit 660a2dc378
5 changed files with 41 additions and 1 deletions

View File

@@ -52,6 +52,9 @@ void video_renderer_init (logger_t *logger, const char *server_name, videoflip_t
const bool *video_sync);
void video_renderer_start ();
void video_renderer_stop ();
void video_renderer_pause ();
void video_renderer_resume ();
bool video_renderer_is_paused();
void video_renderer_render_buffer (unsigned char* data, int *data_len, int *nal_count, uint64_t *ntp_time);
void video_renderer_flush ();
unsigned int video_renderer_listen(void *loop);

View File

@@ -221,6 +221,25 @@ void video_renderer_init(logger_t *render_logger, const char *server_name, vide
}
}
void video_renderer_pause() {
logger_log(logger, LOGGER_DEBUG, "video renderer paused");
gst_element_set_state(renderer->pipeline, GST_STATE_PAUSED);
}
void video_renderer_resume() {
if (video_renderer_is_paused()) {
logger_log(logger, LOGGER_DEBUG, "video renderer resumed");
gst_element_set_state (renderer->pipeline, GST_STATE_PLAYING);
gst_video_pipeline_base_time = gst_element_get_base_time(renderer->appsrc);
}
}
bool video_renderer_is_paused() {
GstState state;
gst_element_get_state(renderer->pipeline, &state, NULL, 0);
return (state == GST_STATE_PAUSED);
}
void video_renderer_start() {
gst_element_set_state (renderer->pipeline, GST_STATE_PLAYING);
gst_video_pipeline_base_time = gst_element_get_base_time(renderer->appsrc);