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;
|
||||
bool autovideo;
|
||||
int id;
|
||||
char *uri;
|
||||
gboolean terminate;
|
||||
gint64 duration;
|
||||
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]->bus = NULL;
|
||||
renderer_type[i]->appsrc = NULL;
|
||||
renderer_type[i]->uri = NULL;
|
||||
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 */
|
||||
switch (playbin_version) {
|
||||
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;
|
||||
const gchar *state_name;
|
||||
if (hls_video) {
|
||||
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_get_state(renderer->pipeline, &state, NULL, 1000 * GST_MSECOND);
|
||||
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;
|
||||
}
|
||||
#endif
|
||||
if (renderer->uri) {
|
||||
free(renderer->uri);
|
||||
}
|
||||
free (renderer);
|
||||
renderer = NULL;
|
||||
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) {
|
||||
gst_app_src_end_of_stream (GST_APP_SRC(renderer_type[type]->appsrc));
|
||||
}
|
||||
gst_bus_set_flushing(bus, TRUE);
|
||||
gst_element_set_state (renderer_type[type]->pipeline, GST_STATE_READY);
|
||||
renderer_type[type]->terminate = TRUE;
|
||||
g_main_loop_quit( (GMainLoop *) loop);
|
||||
if (!hls_video) {
|
||||
gst_bus_set_flushing(bus, TRUE);
|
||||
gst_element_set_state (renderer_type[type]->pipeline, GST_STATE_READY);
|
||||
renderer_type[type]->terminate = TRUE;
|
||||
g_main_loop_quit( (GMainLoop *) loop);
|
||||
}
|
||||
break;
|
||||
}
|
||||
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,
|
||||
bool initial_fullscreen, bool video_sync, bool h265_support, bool coverart_support,
|
||||
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_pause ();
|
||||
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(),
|
||||
videosink_options.c_str(), fullscreen, video_sync, h265_support,
|
||||
render_coverart, playbin_version, NULL);
|
||||
video_renderer_start(NULL, NULL);
|
||||
video_renderer_start(NULL);
|
||||
#ifdef __OpenBSD__
|
||||
} else {
|
||||
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(),
|
||||
videosink_options.c_str(), fullscreen, video_sync, h265_support,
|
||||
render_coverart, playbin_version, uri);
|
||||
video_renderer_start((void *) raop, uri);
|
||||
video_renderer_start((void *) raop);
|
||||
}
|
||||
if (reset_httpd) {
|
||||
unsigned short port = raop_get_port(raop);
|
||||
|
||||
Reference in New Issue
Block a user