MediaProcessors
Classes | Macros | Typedefs | Functions | Variables
live555_rtsp.cpp File Reference
#include <mutex>
#include "live555_rtsp.h"
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>
#include <libcjson/cJSON.h>
#include <libmediaprocsutils/uri_parser.h>
#include <libmediaprocsutils/log.h>
#include <libmediaprocsutils/stat_codes.h>
#include <libmediaprocsutils/check_utils.h>
#include <libmediaprocsutils/schedule.h>
#include <libmediaprocsutils/fair_lock.h>
#include <libmediaprocsutils/fifo.h>
#include <libmediaprocs/proc_if.h>
#include <libmediaprocs/procs.h>
#include <libmediaprocs/proc.h>
#include "muxers_settings.h"
#include "proc_muxer.h"
#include <liveMedia/liveMedia.hh>
#include <BasicUsageEnvironment/BasicUsageEnvironment.hh>
#include "MultiFramedRTPSink.hh"
Include dependency graph for live555_rtsp.cpp:

Go to the source code of this file.

Classes

struct  live555_rtsp_mux_settings_ctx_s
 
struct  live555_rtsp_mux_ctx_s
 
struct  live555_rtsp_es_mux_settings_ctx_s
 
struct  live555_rtsp_es_mux_ctx_s
 
struct  live555_rtsp_dmux_settings_ctx_s
 
struct  live555_rtsp_dmux_ctx_s
 
class  SimpleRTPSink2
 
class  SimpleFramedSource
 
class  SimpleMediaSubsession
 
class  SimpleClientMediaSubsession
 
class  SimpleClientSession
 
class  StreamClientState
 
class  SimpleRTSPClient
 
class  DummySink
 

Macros

#define SERVER_TOUT   10
 
#define FRAMED_SOURCE_FIFO_SLOTS   16
 
#define SINK_BUFFER_SIZE   200000
 
#define LOGD_CTX_INIT(CTX)
 
#define LOGD(...)
 
#define TAG_HAS(NEEDLE)   (strstr(tag, NEEDLE)!= NULL)
 
#define TAG_IS(TAG)   (strcmp(tag, TAG)== 0)
 
#define PROC_ID_STR_FMT   "{\"elementary_stream_id\":%d}"
 

Typedefs

typedef struct live555_rtsp_mux_settings_ctx_s live555_rtsp_mux_settings_ctx_t
 
typedef struct live555_rtsp_mux_ctx_s live555_rtsp_mux_ctx_t
 
typedef struct live555_rtsp_es_mux_settings_ctx_s live555_rtsp_es_mux_settings_ctx_t
 
typedef struct live555_rtsp_es_mux_ctx_s live555_rtsp_es_mux_ctx_t
 
typedef struct live555_rtsp_dmux_settings_ctx_s live555_rtsp_dmux_settings_ctx_t
 
typedef struct live555_rtsp_dmux_ctx_s live555_rtsp_dmux_ctx_t
 

Functions

static proc_ctx_tlive555_rtsp_mux_open (const proc_if_t *proc_if, const char *settings_str, log_ctx_t *log_ctx, va_list arg)
 
static int live555_rtsp_mux_init_given_settings (live555_rtsp_mux_ctx_t *live555_rtsp_mux_ctx, const muxers_settings_mux_ctx_t *muxers_settings_mux_ctx, log_ctx_t *log_ctx)
 
static void live555_rtsp_mux_close (proc_ctx_t **ref_proc_ctx)
 
static void live555_rtsp_mux_deinit_except_settings (live555_rtsp_mux_ctx_t *live555_rtsp_mux_ctx, log_ctx_t *log_ctx)
 
static int live555_rtsp_mux_process_frame (proc_ctx_t *proc_ctx, fifo_ctx_t *iput_fifo_ctx, fifo_ctx_t *oput_fifo_ctx)
 
static int live555_rtsp_mux_rest_put (proc_ctx_t *proc_ctx, const char *str)
 
static int live555_rtsp_mux_opt (proc_ctx_t *proc_ctx, const char *tag, va_list arg)
 
static int live555_rtsp_mux_rest_get (proc_ctx_t *proc_ctx, const proc_if_rest_fmt_t rest_fmt, void **ref_reponse)
 
static int live555_rtsp_mux_rest_get_es_array (procs_ctx_t *procs_ctx_es_muxers, cJSON **ref_cjson_es_array, log_ctx_t *log_ctx)
 
static int live555_rtsp_mux_settings_ctx_init (volatile live555_rtsp_mux_settings_ctx_t *live555_rtsp_mux_settings_ctx, log_ctx_t *log_ctx)
 
static void live555_rtsp_mux_settings_ctx_deinit (volatile live555_rtsp_mux_settings_ctx_t *live555_rtsp_mux_settings_ctx, log_ctx_t *log_ctx)
 
static void * taskScheduler_thr (void *t)
 
static proc_ctx_tlive555_rtsp_es_mux_open (const proc_if_t *proc_if, const char *settings_str, log_ctx_t *log_ctx, va_list arg)
 
static void live555_rtsp_es_mux_close (proc_ctx_t **ref_proc_ctx)
 
static int live555_rtsp_es_mux_process_frame (proc_ctx_t *proc_ctx, fifo_ctx_t *iput_fifo_ctx, fifo_ctx_t *oput_fifo_ctx)
 
static int live555_rtsp_es_mux_rest_put (proc_ctx_t *proc_ctx, const char *str)
 
static int live555_rtsp_es_mux_rest_get (proc_ctx_t *proc_ctx, const proc_if_rest_fmt_t rest_fmt, void **ref_reponse)
 
static int live555_rtsp_es_mux_settings_ctx_init (volatile live555_rtsp_es_mux_settings_ctx_t *live555_rtsp_es_mux_settings_ctx, log_ctx_t *log_ctx)
 
static void live555_rtsp_es_mux_settings_ctx_deinit (volatile live555_rtsp_es_mux_settings_ctx_t *live555_rtsp_es_mux_settings_ctx, log_ctx_t *log_ctx)
 
static proc_ctx_tlive555_rtsp_dmux_open (const proc_if_t *proc_if, const char *settings_str, log_ctx_t *log_ctx, va_list arg)
 
static int live555_rtsp_dmux_init_given_settings (live555_rtsp_dmux_ctx_t *live555_rtsp_dmux_ctx, const muxers_settings_dmux_ctx_t *muxers_settings_dmux_ctx, log_ctx_t *log_ctx)
 
static void live555_rtsp_dmux_close (proc_ctx_t **ref_proc_ctx)
 
static void live555_rtsp_dmux_deinit_except_settings (live555_rtsp_dmux_ctx_t *live555_rtsp_dmux_ctx, log_ctx_t *log_ctx)
 
static int live555_rtsp_dmux_rest_get (proc_ctx_t *proc_ctx, const proc_if_rest_fmt_t rest_fmt, void **ref_reponse)
 
static int live555_rtsp_dmux_process_frame (proc_ctx_t *proc_ctx, fifo_ctx_t *iput_fifo_ctx, fifo_ctx_t *oput_fifo_ctx)
 
static int live555_rtsp_dmux_rest_put (proc_ctx_t *proc_ctx, const char *str)
 
static int live555_rtsp_dmux_settings_ctx_init (volatile live555_rtsp_dmux_settings_ctx_t *live555_rtsp_dmux_settings_ctx, log_ctx_t *log_ctx)
 
static void live555_rtsp_dmux_settings_ctx_deinit (volatile live555_rtsp_dmux_settings_ctx_t *live555_rtsp_dmux_settings_ctx, log_ctx_t *log_ctx)
 
static void continueAfterDESCRIBE (RTSPClient *rtspClient, int resultCode, char *resultString)
 
static void continueAfterSETUP (RTSPClient *rtspClient, int resultCode, char *resultString)
 
static void continueAfterPLAY (RTSPClient *rtspClient, int resultCode, char *resultString)
 
static void subsessionAfterPlaying (void *clientData)
 
static void subsessionByeHandler (void *clientData)
 
static void setupNextSubsession (RTSPClient *rtspClient)
 
static void shutdownStream (RTSPClient *rtspClient, int exitCode=1)
 
void live555_rtsp_reset_on_new_settings (proc_ctx_t *proc_ctx, int flag_is_muxer, log_ctx_t *log_ctx)
 
void live555_rtsp_reset_on_new_settings_es_mux (proc_ctx_t *proc_ctx, log_ctx_t *log_ctx)
 
void live555_rtsp_reset_on_new_settings_es_dmux (proc_ctx_t *proc_ctx, log_ctx_t *log_ctx)
 

Variables

const proc_if_t proc_if_live555_rtsp_mux
 
static const proc_if_t proc_if_live555_rtsp_es_mux
 
const proc_if_t proc_if_live555_rtsp_dmux
 

Detailed Description

Author
Rafael Antoniello

Definition in file live555_rtsp.cpp.

Macro Definition Documentation

#define TAG_HAS (   NEEDLE)    (strstr(tag, NEEDLE)!= NULL)

Returns non-zero if given 'tag' string contains 'needle' sub-string.

Definition at line 78 of file live555_rtsp.cpp.

#define TAG_IS (   TAG)    (strcmp(tag, TAG)== 0)

Returns non-zero if 'tag' string is equal to given TAG string.

Definition at line 83 of file live555_rtsp.cpp.

Typedef Documentation

Live555's RTSP de-multiplexer settings context structure.

Live555's RTSP elementary stream (ES) multiplexer settings context structure.

Live555's RTSP multiplexer context structure.

Live555's RTSP multiplexer settings context structure.

Function Documentation

static void live555_rtsp_dmux_close ( proc_ctx_t **  ref_proc_ctx)
static

Implements the proc_if_s::close callback. See .proc_if.h for further details.

Definition at line 2198 of file live555_rtsp.cpp.

static proc_ctx_t * live555_rtsp_dmux_open ( const proc_if_t proc_if,
const char *  settings_str,
log_ctx_t log_ctx,
va_list  arg 
)
static

Implements the proc_if_s::open callback. See .proc_if.h for further details.

Definition at line 2110 of file live555_rtsp.cpp.

static int live555_rtsp_dmux_process_frame ( proc_ctx_t proc_ctx,
fifo_ctx_t iput_fifo_ctx,
fifo_ctx_t oput_fifo_ctx 
)
static

Implements the proc_if_s::process_frame callback. See .proc_if.h for further details.

Definition at line 2424 of file live555_rtsp.cpp.

static int live555_rtsp_dmux_rest_get ( proc_ctx_t proc_ctx,
const proc_if_rest_fmt_t  rest_fmt,
void **  ref_reponse 
)
static

Implements the proc_if_s::rest_get callback. See .proc_if.h for further details.

Definition at line 2260 of file live555_rtsp.cpp.

static int live555_rtsp_dmux_rest_put ( proc_ctx_t proc_ctx,
const char *  str 
)
static

Implements the proc_if_s::rest_put callback. See .proc_if.h for further details.

Definition at line 2516 of file live555_rtsp.cpp.

static void live555_rtsp_dmux_settings_ctx_deinit ( volatile live555_rtsp_dmux_settings_ctx_t live555_rtsp_dmux_settings_ctx,
log_ctx_t log_ctx 
)
static

Release specific Live555 RTSP de-multiplexer settings (allocated in heap memory).

Parameters
live555_rtsp_dmux_settings_ctx
log_ctx

Definition at line 2592 of file live555_rtsp.cpp.

static int live555_rtsp_dmux_settings_ctx_init ( volatile live555_rtsp_dmux_settings_ctx_t live555_rtsp_dmux_settings_ctx,
log_ctx_t log_ctx 
)
static

Initialize specific Live555 RTSP de-multiplexer settings to defaults.

Parameters
live555_rtsp_dmux_settings_ctx
log_ctx
Returns
Status code (STAT_SUCCESS code in case of success, for other code values please refer to .stat_codes.h).

Definition at line 2561 of file live555_rtsp.cpp.

static void live555_rtsp_es_mux_close ( proc_ctx_t **  ref_proc_ctx)
static

Implements the proc_if_s::close callback. See .proc_if.h for further details.

Definition at line 1386 of file live555_rtsp.cpp.

static int live555_rtsp_es_mux_process_frame ( proc_ctx_t proc_ctx,
fifo_ctx_t iput_fifo_ctx,
fifo_ctx_t oput_fifo_ctx 
)
static

Implements the proc_if_s::process_frame callback. See .proc_if.h for further details.

Definition at line 1417 of file live555_rtsp.cpp.

static int live555_rtsp_es_mux_rest_get ( proc_ctx_t proc_ctx,
const proc_if_rest_fmt_t  rest_fmt,
void **  ref_reponse 
)
static

Implements the proc_if_s::rest_get callback. See .proc_if.h for further details.

Definition at line 1574 of file live555_rtsp.cpp.

static int live555_rtsp_es_mux_rest_put ( proc_ctx_t proc_ctx,
const char *  str 
)
static

Implements the proc_if_s::rest_put callback. See .proc_if.h for further details.

Definition at line 1469 of file live555_rtsp.cpp.

static void live555_rtsp_mux_close ( proc_ctx_t **  ref_proc_ctx)
static

Implements the proc_if_s::close callback. See .proc_if.h for further details.

Definition at line 748 of file live555_rtsp.cpp.

static void live555_rtsp_mux_deinit_except_settings ( live555_rtsp_mux_ctx_t live555_rtsp_mux_ctx,
log_ctx_t log_ctx 
)
static

Release RTSP multiplexer at the exception of its settings context structure.

Definition at line 779 of file live555_rtsp.cpp.

static proc_ctx_t * live555_rtsp_mux_open ( const proc_if_t proc_if,
const char *  settings_str,
log_ctx_t log_ctx,
va_list  arg 
)
static

Implements the proc_if_s::open callback. See .proc_if.h for further details.

Definition at line 613 of file live555_rtsp.cpp.

static int live555_rtsp_mux_opt ( proc_ctx_t proc_ctx,
const char *  tag,
va_list  arg 
)
static

Implements the proc_if_s::opt callback. See .proc_if.h for further details.

Definition at line 911 of file live555_rtsp.cpp.

static int live555_rtsp_mux_process_frame ( proc_ctx_t proc_ctx,
fifo_ctx_t iput_fifo_ctx,
fifo_ctx_t oput_fifo_ctx 
)
static

Implements the proc_if_s::process_frame callback. See .proc_if.h for further details.

Definition at line 857 of file live555_rtsp.cpp.

static int live555_rtsp_mux_rest_get ( proc_ctx_t proc_ctx,
const proc_if_rest_fmt_t  rest_fmt,
void **  ref_reponse 
)
static

Implements the proc_if_s::rest_get callback. See .proc_if.h for further details.

Definition at line 1018 of file live555_rtsp.cpp.

static int live555_rtsp_mux_rest_put ( proc_ctx_t proc_ctx,
const char *  str 
)
static

Implements the proc_if_s::rest_put callback. See .proc_if.h for further details.

Definition at line 976 of file live555_rtsp.cpp.

static void live555_rtsp_mux_settings_ctx_deinit ( volatile live555_rtsp_mux_settings_ctx_t live555_rtsp_mux_settings_ctx,
log_ctx_t log_ctx 
)
static

Release specific Live555 RTSP multiplexer settings (allocated in heap memory).

Parameters
live555_rtsp_mux_settings_ctx
log_ctx

Definition at line 1264 of file live555_rtsp.cpp.

static int live555_rtsp_mux_settings_ctx_init ( volatile live555_rtsp_mux_settings_ctx_t live555_rtsp_mux_settings_ctx,
log_ctx_t log_ctx 
)
static

Initialize specific Live555 RTSP multiplexer settings to defaults.

Parameters
live555_rtsp_mux_settings_ctx
log_ctx
Returns
Status code (STAT_SUCCESS code in case of success, for other code values please refer to .stat_codes.h).

Definition at line 1233 of file live555_rtsp.cpp.

static void setupNextSubsession ( RTSPClient *  rtspClient)
static

Iterate through each stream's 'sub-sessions', setting up each one.

Definition at line 2670 of file live555_rtsp.cpp.

static void shutdownStream ( RTSPClient *  rtspClient,
int  exitCode 
)
static

Used to shut down and close a stream (including its "RTSPClient" object).

Definition at line 2871 of file live555_rtsp.cpp.

static void subsessionAfterPlaying ( void *  clientData)
static

called when a stream's sub-session (e.g., audio or video sub-stream) ends.

Definition at line 2818 of file live555_rtsp.cpp.

static void subsessionByeHandler ( void *  clientData)
static

Called when a RTCP "BYE" is received for a sub-session.

Definition at line 2848 of file live555_rtsp.cpp.

Variable Documentation

const proc_if_t proc_if_live555_rtsp_dmux
Initial value:
=
{
"live555_rtsp_dmux", "demultiplexer", "application/octet-stream",
(uint64_t)0,
NULL,
NULL,
proc_recv_frame_default1,
NULL,
NULL,
(void(*)(void**))proc_frame_ctx_release,
}
static int live555_rtsp_dmux_rest_get(proc_ctx_t *proc_ctx, const proc_if_rest_fmt_t rest_fmt, void **ref_reponse)
static int live555_rtsp_dmux_rest_put(proc_ctx_t *proc_ctx, const char *str)
void proc_frame_ctx_release(proc_frame_ctx_t **ref_proc_frame_ctx)
Definition: proc_if.c:125
static proc_ctx_t * live555_rtsp_dmux_open(const proc_if_t *proc_if, const char *settings_str, log_ctx_t *log_ctx, va_list arg)
static void live555_rtsp_dmux_close(proc_ctx_t **ref_proc_ctx)
proc_frame_ctx_t * proc_frame_ctx_dup(const proc_frame_ctx_t *proc_frame_ctx_arg)
Definition: proc_if.c:52
static int live555_rtsp_dmux_process_frame(proc_ctx_t *proc_ctx, fifo_ctx_t *iput_fifo_ctx, fifo_ctx_t *oput_fifo_ctx)

Processor interface implementing the wrapper of the live555 RTSP de-multiplexer.

Definition at line 589 of file live555_rtsp.cpp.

const proc_if_t proc_if_live555_rtsp_es_mux
static
Initial value:
=
{
"live555_rtsp_es_mux", "multiplexer", "application/octet-stream",
(uint64_t)0,
live555_rtsp_es_mux_open,
proc_send_frame_default1,
NULL,
NULL,
NULL,
NULL,
NULL,
(void(*)(void**))proc_frame_ctx_release,
}
void proc_frame_ctx_release(proc_frame_ctx_t **ref_proc_frame_ctx)
Definition: proc_if.c:125
static int live555_rtsp_es_mux_rest_get(proc_ctx_t *proc_ctx, const proc_if_rest_fmt_t rest_fmt, void **ref_reponse)
static int live555_rtsp_es_mux_process_frame(proc_ctx_t *proc_ctx, fifo_ctx_t *iput_fifo_ctx, fifo_ctx_t *oput_fifo_ctx)
proc_frame_ctx_t * proc_frame_ctx_dup(const proc_frame_ctx_t *proc_frame_ctx_arg)
Definition: proc_if.c:52
static void live555_rtsp_es_mux_close(proc_ctx_t **ref_proc_ctx)

Definition at line 570 of file live555_rtsp.cpp.

const proc_if_t proc_if_live555_rtsp_mux
Initial value:
=
{
"live555_rtsp_mux", "multiplexer", "application/octet-stream",
(uint64_t)0,
proc_send_frame_default1,
NULL,
NULL,
NULL,
(void(*)(void**))proc_frame_ctx_release,
}
void proc_frame_ctx_release(proc_frame_ctx_t **ref_proc_frame_ctx)
Definition: proc_if.c:125
static int live555_rtsp_mux_opt(proc_ctx_t *proc_ctx, const char *tag, va_list arg)
static int live555_rtsp_mux_rest_get(proc_ctx_t *proc_ctx, const proc_if_rest_fmt_t rest_fmt, void **ref_reponse)
static int live555_rtsp_mux_rest_put(proc_ctx_t *proc_ctx, const char *str)
proc_frame_ctx_t * proc_frame_ctx_dup(const proc_frame_ctx_t *proc_frame_ctx_arg)
Definition: proc_if.c:52
static void live555_rtsp_mux_close(proc_ctx_t **ref_proc_ctx)
static proc_ctx_t * live555_rtsp_mux_open(const proc_if_t *proc_if, const char *settings_str, log_ctx_t *log_ctx, va_list arg)
static int live555_rtsp_mux_process_frame(proc_ctx_t *proc_ctx, fifo_ctx_t *iput_fifo_ctx, fifo_ctx_t *oput_fifo_ctx)

Processor interface implementing the wrapper of the live555 RTSP multiplexer.

Definition at line 551 of file live555_rtsp.cpp.