static bool ffmpeg_mux_start(void *data) { struct ffmpeg_muxer *stream = data; obs_data_t *settings; struct dstr cmd; const char *path; if (!obs_output_can_begin_data_capture(stream->output, 0)) return false; if (!obs_output_initialize_encoders(stream->output, 0)) return false; settings = obs_output_get_settings(stream->output); path = obs_data_get_string(settings, "path"); dstr_copy(&stream->path, path); dstr_replace(&stream->path, "\"", "\"\""); obs_data_release(settings); build_command_line(stream, &cmd); stream->pipe = os_process_pipe_create(cmd.array, "w"); dstr_free(&cmd); if (!stream->pipe) { warn("Failed to create process pipe"); return false; } /* write headers and start capture */ stream->active = true; stream->capturing = true; obs_output_begin_data_capture(stream->output, 0); info("Writing file '%s'...", stream->path.array); return true; }
static bool flv_output_start(void *data) { struct flv_output *stream = data; obs_data_t *settings; const char *path; if (!obs_output_can_begin_data_capture(stream->output, 0)) return false; if (!obs_output_initialize_encoders(stream->output, 0)) return false; /* get path */ settings = obs_output_get_settings(stream->output); path = obs_data_get_string(settings, "path"); dstr_copy(&stream->path, path); obs_data_release(settings); stream->file = os_fopen(stream->path.array, "wb"); if (!stream->file) { warn("Unable to open FLV file '%s'", stream->path.array); return false; } /* write headers and start capture */ stream->active = true; obs_output_begin_data_capture(stream->output, 0); info("Writing FLV file '%s'...", stream->path.array); return true; }
static bool rtmp_stream_start(void *data) { struct rtmp_stream *stream = data; obs_service_t *service = obs_output_get_service(stream->output); obs_data_t *settings; if (!obs_output_can_begin_data_capture(stream->output, 0)) return false; if (!obs_output_initialize_encoders(stream->output, 0)) return false; stream->total_bytes_sent = 0; stream->dropped_frames = 0; settings = obs_output_get_settings(stream->output); dstr_copy(&stream->path, obs_service_get_url(service)); dstr_copy(&stream->key, obs_service_get_key(service)); dstr_copy(&stream->username, obs_service_get_username(service)); dstr_copy(&stream->password, obs_service_get_password(service)); stream->drop_threshold_usec = (int64_t)obs_data_get_int(settings, OPT_DROP_THRESHOLD) * 1000; obs_data_release(settings); return pthread_create(&stream->connect_thread, NULL, connect_thread, stream) == 0; }
static bool rtmp_stream_start(void *data) { struct rtmp_stream *stream = data; if (!obs_output_can_begin_data_capture(stream->output, 0)) return false; if (!obs_output_initialize_encoders(stream->output, 0)) return false; os_atomic_set_bool(&stream->connecting, true); return pthread_create(&stream->connect_thread, NULL, connect_thread, stream) == 0; }