(API Change) Add support for multiple audio mixers
API changed: -------------------------- void obs_output_set_audio_encoder( obs_output_t *output, obs_encoder_t *encoder); obs_encoder_t *obs_output_get_audio_encoder( const obs_output_t *output); obs_encoder_t *obs_audio_encoder_create( const char *id, const char *name, obs_data_t *settings); Changed to: -------------------------- /* 'idx' specifies the track index of the output */ void obs_output_set_audio_encoder( obs_output_t *output, obs_encoder_t *encoder, size_t idx); /* 'idx' specifies the track index of the output */ obs_encoder_t *obs_output_get_audio_encoder( const obs_output_t *output, size_t idx); /* 'mixer_idx' specifies the mixer index to capture audio from */ obs_encoder_t *obs_audio_encoder_create( const char *id, const char *name, obs_data_t *settings, size_t mixer_idx); Overview -------------------------- This feature allows multiple audio mixers to be used at a time. This capability was able to be added with surprisingly very little extra overhead. Audio will not be mixed unless it's assigned to a specific mixer, and mixers will not mix unless they have an active mix connection. Mostly this will be useful for being able to separate out specific audio for recording versus streaming, but will also be useful for certain streaming services that support multiple audio streams via RTMP. I didn't want to use a variable amount of mixers due to the desire to reduce heap allocations, so currently I set the limit to 4 simultaneous mixers; this number can be increased later if needed, but honestly I feel like it's just the right number to use. Sources: Sources can now specify which audio mixers their audio is mixed to; this can be a single mixer or multiple mixers at a time. The obs_source_set_audio_mixers function sets the audio mixer which an audio source applies to. For example, 0xF would mean that the source applies to all four mixers. Audio Encoders: Audio encoders now must specify which specific audio mixer they use when they encode audio data. Outputs: Outputs that use encoders can now support multiple audio tracks at once if they have the OBS_OUTPUT_MULTI_TRACK capability flag set. This is mostly only useful for certain types of RTMP transmissions, though may be useful for file formats that support multiple audio tracks as well later on.
This commit is contained in:
37
libobs/obs.h
37
libobs/obs.h
@@ -771,6 +771,15 @@ EXPORT void obs_source_set_flags(obs_source_t *source, uint32_t flags);
|
||||
/** Gets source flags. */
|
||||
EXPORT uint32_t obs_source_get_flags(const obs_source_t *source);
|
||||
|
||||
/**
|
||||
* Sets audio mixer flags. These flags are used to specify which mixers
|
||||
* the source's audio should be applied to.
|
||||
*/
|
||||
EXPORT void obs_source_set_audio_mixers(obs_source_t *source, uint32_t mixers);
|
||||
|
||||
/** Gets audio mixer flags */
|
||||
EXPORT uint32_t obs_source_get_audio_mixers(const obs_source_t *source);
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
/* Functions used by sources */
|
||||
|
||||
@@ -1033,6 +1042,12 @@ EXPORT video_t *obs_output_video(const obs_output_t *output);
|
||||
/** Returns the audio media context associated with this output */
|
||||
EXPORT audio_t *obs_output_audio(const obs_output_t *output);
|
||||
|
||||
/** Sets the current audio mixer for non-encoded outputs */
|
||||
EXPORT void obs_output_set_mixer(obs_output_t *output, size_t mixer_idx);
|
||||
|
||||
/** Gets the current audio mixer for non-encoded outputs */
|
||||
EXPORT size_t obs_output_get_mixer(const obs_output_t *output);
|
||||
|
||||
/**
|
||||
* Sets the current video encoder associated with this output,
|
||||
* required for encoded outputs
|
||||
@@ -1042,16 +1057,27 @@ EXPORT void obs_output_set_video_encoder(obs_output_t *output,
|
||||
|
||||
/**
|
||||
* Sets the current audio encoder associated with this output,
|
||||
* required for encoded outputs
|
||||
* required for encoded outputs.
|
||||
*
|
||||
* The idx parameter specifies the audio encoder index to set the encoder to.
|
||||
* Only used with outputs that have multiple audio outputs (RTMP typically),
|
||||
* otherwise the parameter is ignored.
|
||||
*/
|
||||
EXPORT void obs_output_set_audio_encoder(obs_output_t *output,
|
||||
obs_encoder_t *encoder);
|
||||
obs_encoder_t *encoder, size_t idx);
|
||||
|
||||
/** Returns the current video encoder associated with this output */
|
||||
EXPORT obs_encoder_t *obs_output_get_video_encoder(const obs_output_t *output);
|
||||
|
||||
/** Returns the current audio encoder associated with this output */
|
||||
EXPORT obs_encoder_t *obs_output_get_audio_encoder(const obs_output_t *output);
|
||||
/**
|
||||
* Returns the current audio encoder associated with this output
|
||||
*
|
||||
* The idx parameter specifies the audio encoder index. Only used with
|
||||
* outputs that have multiple audio outputs, otherwise the parameter is
|
||||
* ignored.
|
||||
*/
|
||||
EXPORT obs_encoder_t *obs_output_get_audio_encoder(const obs_output_t *output,
|
||||
size_t idx);
|
||||
|
||||
/** Sets the current service associated with this output. */
|
||||
EXPORT void obs_output_set_service(obs_output_t *output,
|
||||
@@ -1154,10 +1180,11 @@ EXPORT obs_encoder_t *obs_video_encoder_create(const char *id, const char *name,
|
||||
* @param id Audio Encoder ID
|
||||
* @param name Name to assign to this context
|
||||
* @param settings Settings
|
||||
* @param mixer_idx Index of the mixer to use for this audio encoder
|
||||
* @return The video encoder context, or NULL if failed or not found.
|
||||
*/
|
||||
EXPORT obs_encoder_t *obs_audio_encoder_create(const char *id, const char *name,
|
||||
obs_data_t *settings);
|
||||
obs_data_t *settings, size_t mixer_idx);
|
||||
|
||||
/** Destroys an encoder context */
|
||||
EXPORT void obs_encoder_destroy(obs_encoder_t *encoder);
|
||||
|
Reference in New Issue
Block a user