From d839c77824afc8cb73fbbb49c545362ad2e1aece Mon Sep 17 00:00:00 2001 From: jp9000 Date: Wed, 12 Jul 2017 22:54:04 -0700 Subject: [PATCH] libobs: Add API to specify codec support on encoded outputs (This commit also modifies obs-outputs) --- libobs/obs-output.c | 12 +++++++++++ libobs/obs-output.h | 4 ++++ libobs/obs.h | 5 +++++ plugins/obs-outputs/flv-output.c | 20 +++++++++-------- plugins/obs-outputs/rtmp-stream.c | 36 ++++++++++++++++--------------- 5 files changed, 51 insertions(+), 26 deletions(-) diff --git a/libobs/obs-output.c b/libobs/obs-output.c index b857c880c..e32a74550 100644 --- a/libobs/obs-output.c +++ b/libobs/obs-output.c @@ -2162,3 +2162,15 @@ bool obs_output_reconnecting(const obs_output_t *output) return reconnecting(output); } + +const char *obs_output_get_supported_video_codecs(const obs_output_t *output) +{ + return obs_output_valid(output, __FUNCTION__) ? + output->info.encoded_video_codecs : NULL; +} + +const char *obs_output_get_supported_audio_codecs(const obs_output_t *output) +{ + return obs_output_valid(output, __FUNCTION__) ? + output->info.encoded_audio_codecs : NULL; +} diff --git a/libobs/obs-output.h b/libobs/obs-output.h index 6f79cc9f2..df50fa077 100644 --- a/libobs/obs-output.h +++ b/libobs/obs-output.h @@ -67,6 +67,10 @@ struct obs_output_info { float (*get_congestion)(void *data); int (*get_connect_time_ms)(void *data); + + /* only used with encoded outputs, separated with semicolon */ + const char *encoded_video_codecs; + const char *encoded_audio_codecs; }; EXPORT void obs_register_output_s(const struct obs_output_info *info, diff --git a/libobs/obs.h b/libobs/obs.h index cd4d2efd1..7af3c1119 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -1524,6 +1524,11 @@ EXPORT bool obs_output_reconnecting(const obs_output_t *output); EXPORT void obs_output_set_last_error(obs_output_t *output, const char *message); +EXPORT const char *obs_output_get_supported_video_codecs( + const obs_output_t *output); +EXPORT const char *obs_output_get_supported_audio_codecs( + const obs_output_t *output); + /* ------------------------------------------------------------------------- */ /* Functions used by outputs */ diff --git a/plugins/obs-outputs/flv-output.c b/plugins/obs-outputs/flv-output.c index 8f191b09c..1bdae92d2 100644 --- a/plugins/obs-outputs/flv-output.c +++ b/plugins/obs-outputs/flv-output.c @@ -220,13 +220,15 @@ static obs_properties_t *flv_output_properties(void *unused) } struct obs_output_info flv_output_info = { - .id = "flv_output", - .flags = OBS_OUTPUT_AV | OBS_OUTPUT_ENCODED, - .get_name = flv_output_getname, - .create = flv_output_create, - .destroy = flv_output_destroy, - .start = flv_output_start, - .stop = flv_output_stop, - .encoded_packet = flv_output_data, - .get_properties = flv_output_properties + .id = "flv_output", + .flags = OBS_OUTPUT_AV | OBS_OUTPUT_ENCODED, + .encoded_video_codecs = "h264", + .encoded_audio_codecs = "aac", + .get_name = flv_output_getname, + .create = flv_output_create, + .destroy = flv_output_destroy, + .start = flv_output_start, + .stop = flv_output_stop, + .encoded_packet = flv_output_data, + .get_properties = flv_output_properties }; diff --git a/plugins/obs-outputs/rtmp-stream.c b/plugins/obs-outputs/rtmp-stream.c index d10e8eba6..07dd96d16 100644 --- a/plugins/obs-outputs/rtmp-stream.c +++ b/plugins/obs-outputs/rtmp-stream.c @@ -1173,21 +1173,23 @@ static int rtmp_stream_connect_time(void *data) } struct obs_output_info rtmp_output_info = { - .id = "rtmp_output", - .flags = OBS_OUTPUT_AV | - OBS_OUTPUT_ENCODED | - OBS_OUTPUT_SERVICE | - OBS_OUTPUT_MULTI_TRACK, - .get_name = rtmp_stream_getname, - .create = rtmp_stream_create, - .destroy = rtmp_stream_destroy, - .start = rtmp_stream_start, - .stop = rtmp_stream_stop, - .encoded_packet = rtmp_stream_data, - .get_defaults = rtmp_stream_defaults, - .get_properties = rtmp_stream_properties, - .get_total_bytes = rtmp_stream_total_bytes_sent, - .get_congestion = rtmp_stream_congestion, - .get_connect_time_ms= rtmp_stream_connect_time, - .get_dropped_frames = rtmp_stream_dropped_frames + .id = "rtmp_output", + .flags = OBS_OUTPUT_AV | + OBS_OUTPUT_ENCODED | + OBS_OUTPUT_SERVICE | + OBS_OUTPUT_MULTI_TRACK, + .encoded_video_codecs = "h264", + .encoded_audio_codecs = "aac", + .get_name = rtmp_stream_getname, + .create = rtmp_stream_create, + .destroy = rtmp_stream_destroy, + .start = rtmp_stream_start, + .stop = rtmp_stream_stop, + .encoded_packet = rtmp_stream_data, + .get_defaults = rtmp_stream_defaults, + .get_properties = rtmp_stream_properties, + .get_total_bytes = rtmp_stream_total_bytes_sent, + .get_congestion = rtmp_stream_congestion, + .get_connect_time_ms = rtmp_stream_connect_time, + .get_dropped_frames = rtmp_stream_dropped_frames };