mirror of
https://github.com/morgan9e/UxPlay
synced 2026-04-14 00:04:13 +09:00
store uri in renderer_s, don't stop main_loop if hls gstreamer error
This commit is contained in:
@@ -85,6 +85,7 @@ struct video_renderer_s {
|
|||||||
const char *codec;
|
const char *codec;
|
||||||
bool autovideo;
|
bool autovideo;
|
||||||
int id;
|
int id;
|
||||||
|
char *uri;
|
||||||
gboolean terminate;
|
gboolean terminate;
|
||||||
gint64 duration;
|
gint64 duration;
|
||||||
gint buffering_level;
|
gint buffering_level;
|
||||||
@@ -282,7 +283,10 @@ void video_renderer_init(logger_t *render_logger, const char *server_name, video
|
|||||||
renderer_type[i]->id = i;
|
renderer_type[i]->id = i;
|
||||||
renderer_type[i]->bus = NULL;
|
renderer_type[i]->bus = NULL;
|
||||||
renderer_type[i]->appsrc = NULL;
|
renderer_type[i]->appsrc = NULL;
|
||||||
|
renderer_type[i]->uri = NULL;
|
||||||
if (hls_video) {
|
if (hls_video) {
|
||||||
|
renderer_type[i]->uri = (char *) calloc(strlen(uri) + 1, sizeof(char));
|
||||||
|
memcpy(renderer_type[i]->uri, uri, strlen(uri));
|
||||||
/* use playbin3 to play HLS video: replace "playbin3" by "playbin" to use playbin2 */
|
/* use playbin3 to play HLS video: replace "playbin3" by "playbin" to use playbin2 */
|
||||||
switch (playbin_version) {
|
switch (playbin_version) {
|
||||||
case 2:
|
case 2:
|
||||||
@@ -475,12 +479,12 @@ void video_renderer_resume() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void video_renderer_start( void * opaque, const char * uri) {
|
void video_renderer_start( void * opaque) {
|
||||||
GstState state;
|
GstState state;
|
||||||
const gchar *state_name;
|
const gchar *state_name;
|
||||||
if (hls_video) {
|
if (hls_video) {
|
||||||
raop = (raop_t *) opaque;
|
raop = (raop_t *) opaque;
|
||||||
g_object_set (G_OBJECT (renderer->pipeline), "uri", uri, NULL);
|
g_object_set (G_OBJECT (renderer->pipeline), "uri", renderer->uri, NULL);
|
||||||
gst_element_set_state (renderer->pipeline, GST_STATE_PAUSED);
|
gst_element_set_state (renderer->pipeline, GST_STATE_PAUSED);
|
||||||
gst_element_get_state(renderer->pipeline, &state, NULL, 1000 * GST_MSECOND);
|
gst_element_get_state(renderer->pipeline, &state, NULL, 1000 * GST_MSECOND);
|
||||||
state_name = gst_element_state_get_name(state);
|
state_name = gst_element_state_get_name(state);
|
||||||
@@ -689,6 +693,9 @@ static void video_renderer_destroy_instance(video_renderer_t *renderer) {
|
|||||||
renderer->gst_window = NULL;
|
renderer->gst_window = NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (renderer->uri) {
|
||||||
|
free(renderer->uri);
|
||||||
|
}
|
||||||
free (renderer);
|
free (renderer);
|
||||||
renderer = NULL;
|
renderer = NULL;
|
||||||
logger_log(logger, LOGGER_DEBUG,"renderer destroyed\n");
|
logger_log(logger, LOGGER_DEBUG,"renderer destroyed\n");
|
||||||
@@ -857,10 +864,12 @@ static gboolean gstreamer_video_pipeline_bus_callback(GstBus *bus, GstMessage *m
|
|||||||
if (renderer_type[type]->appsrc) {
|
if (renderer_type[type]->appsrc) {
|
||||||
gst_app_src_end_of_stream (GST_APP_SRC(renderer_type[type]->appsrc));
|
gst_app_src_end_of_stream (GST_APP_SRC(renderer_type[type]->appsrc));
|
||||||
}
|
}
|
||||||
gst_bus_set_flushing(bus, TRUE);
|
if (!hls_video) {
|
||||||
gst_element_set_state (renderer_type[type]->pipeline, GST_STATE_READY);
|
gst_bus_set_flushing(bus, TRUE);
|
||||||
renderer_type[type]->terminate = TRUE;
|
gst_element_set_state (renderer_type[type]->pipeline, GST_STATE_READY);
|
||||||
g_main_loop_quit( (GMainLoop *) loop);
|
renderer_type[type]->terminate = TRUE;
|
||||||
|
g_main_loop_quit( (GMainLoop *) loop);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GST_MESSAGE_EOS:
|
case GST_MESSAGE_EOS:
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ typedef struct video_renderer_s video_renderer_t;
|
|||||||
const char *decoder, const char *converter, const char *videosink, const char *videosink_options,
|
const char *decoder, const char *converter, const char *videosink, const char *videosink_options,
|
||||||
bool initial_fullscreen, bool video_sync, bool h265_support, bool coverart_support,
|
bool initial_fullscreen, bool video_sync, bool h265_support, bool coverart_support,
|
||||||
guint playbin_version, const char *uri);
|
guint playbin_version, const char *uri);
|
||||||
void video_renderer_start (void *raop, const char *uri);
|
void video_renderer_start (void *raop);
|
||||||
void video_renderer_stop ();
|
void video_renderer_stop ();
|
||||||
void video_renderer_pause ();
|
void video_renderer_pause ();
|
||||||
void video_renderer_hls_ready ();
|
void video_renderer_hls_ready ();
|
||||||
|
|||||||
@@ -2994,7 +2994,7 @@ int main (int argc, char *argv[]) {
|
|||||||
video_decoder.c_str(), video_converter.c_str(), videosink.c_str(),
|
video_decoder.c_str(), video_converter.c_str(), videosink.c_str(),
|
||||||
videosink_options.c_str(), fullscreen, video_sync, h265_support,
|
videosink_options.c_str(), fullscreen, video_sync, h265_support,
|
||||||
render_coverart, playbin_version, NULL);
|
render_coverart, playbin_version, NULL);
|
||||||
video_renderer_start(NULL, NULL);
|
video_renderer_start(NULL);
|
||||||
#ifdef __OpenBSD__
|
#ifdef __OpenBSD__
|
||||||
} else {
|
} else {
|
||||||
if (pledge("stdio rpath wpath cpath inet unix prot_exec", NULL) == -1) {
|
if (pledge("stdio rpath wpath cpath inet unix prot_exec", NULL) == -1) {
|
||||||
@@ -3096,7 +3096,7 @@ int main (int argc, char *argv[]) {
|
|||||||
video_decoder.c_str(), video_converter.c_str(), videosink.c_str(),
|
video_decoder.c_str(), video_converter.c_str(), videosink.c_str(),
|
||||||
videosink_options.c_str(), fullscreen, video_sync, h265_support,
|
videosink_options.c_str(), fullscreen, video_sync, h265_support,
|
||||||
render_coverart, playbin_version, uri);
|
render_coverart, playbin_version, uri);
|
||||||
video_renderer_start((void *) raop, uri);
|
video_renderer_start((void *) raop);
|
||||||
}
|
}
|
||||||
if (reset_httpd) {
|
if (reset_httpd) {
|
||||||
unsigned short port = raop_get_port(raop);
|
unsigned short port = raop_get_port(raop);
|
||||||
|
|||||||
Reference in New Issue
Block a user