libgpac
Documentation of the core library of GPAC
Loading...
Searching...
No Matches
out_route.c File Reference
#include <gpac/filters.h>
#include <gpac/constants.h>
#include <gpac/xml.h>
#include <gpac/route.h>
#include <gpac/network.h>

Data Structures

struct  GF_ROUTEOutCtx
 
struct  ROUTELCT
 
struct  ROUTEService
 
struct  ROUTEPid
 

Macros

#define MULTIPART_BOUNDARY   "_GPAC_BOUNDARY_ROUTE_.67706163_"
 
#define ROUTE_INIT_TOI   0xFFFFFFFF
 
#define PUT_U32(_val)
 
#define GF_TAI_UTC_OFFSET   37
 
#define OFFS(_n)   #_n, offsetof(GF_ROUTEOutCtx, _n)
 

Enumerations

enum  { LCT_SPLIT_NONE =0 , LCT_SPLIT_TYPE , LCT_SPLIT_ALL }
 

Functions

ROUTELCTroute_create_lct_channel (GF_ROUTEOutCtx *ctx, const char *ip, u32 port, GF_Err *e)
 
ROUTEServicerouteout_create_service (GF_ROUTEOutCtx *ctx, u32 service_id, const char *ip, u32 port, GF_Err *e)
 
void routeout_remove_pid (ROUTEPid *rpid, Bool is_rem)
 
void routeout_delete_service (ROUTEService *serv)
 
static GF_Err routeout_configure_pid (GF_Filter *filter, GF_FilterPid *pid, Bool is_remove)
 
static GF_Err routeout_initialize (GF_Filter *filter)
 
static void routeout_finalize (GF_Filter *filter)
 
char * routeout_strip_base (ROUTEService *serv, char *url)
 
static GF_Err routeout_check_service_updates (GF_ROUTEOutCtx *ctx, ROUTEService *serv)
 
u32 routeout_lct_send (GF_ROUTEOutCtx *ctx, GF_Socket *sock, u32 tsi, u32 toi, u32 codepoint, u8 *payload, u32 len, u32 offset, u32 service_id, u32 total_size, u32 offset_in_frame)
 
static GF_Err routeout_service_send_bundle (GF_ROUTEOutCtx *ctx, ROUTEService *serv)
 
static void routeout_fetch_packet (GF_ROUTEOutCtx *ctx, ROUTEPid *rpid)
 
static GF_Err routeout_process_service (GF_ROUTEOutCtx *ctx, ROUTEService *serv)
 
static void routeout_send_lls (GF_ROUTEOutCtx *ctx)
 
static GF_Err routeout_process (GF_Filter *filter)
 
static GF_FilterProbeScore routeout_probe_url (const char *url, const char *mime)
 
static Bool routeout_use_alias (GF_Filter *filter, const char *url, const char *mime)
 
const GF_FilterRegister * routeout_register (GF_FilterSession *session)
 

Variables

static const GF_FilterArgs ROUTEOutArgs []
 
static const GF_FilterCapability ROUTEOutCaps []
 
GF_FilterRegister ROUTEOutRegister
 

Data Structure Documentation

◆ GF_ROUTEOutCtx

struct GF_ROUTEOutCtx
Data Fields
char * dst
char * ext
char * mime
char * ifce
char * ip
u32 carousel
u32 first_port
u32 bsid
u32 mtu
u32 splitlct
u32 ttl
u32 brinc
u32 runfor
Bool korean
Bool llmode
Bool noreg
GF_FilterCapability in_caps[2]
char szExt[10]
GF_List * services
GF_Socket * sock_atsc_lls
u64 clock_init
u64 clock
u64 clock_stats
u64 last_lls_clock
u8 * lls_time_table
u32 lls_time_table_len
u8 * lls_slt_table
u32 lls_slt_table_len
u64 bytes_sent
u8 * lct_buffer
u64 reschedule_us
u32 next_raw_file_toi
Bool reporting_on
u64 total_size
u64 total_bytes
Bool total_size_unknown
u32 nb_resources
Bool done

◆ ROUTELCT

struct ROUTELCT
Data Fields
char * ip
u32 port
GF_Socket * sock

◆ ROUTEService

struct ROUTEService
Data Fields
u32 service_id
GF_List * pids
u32 dash_mode
GF_List * rlcts
ROUTELCT * rlct_base
Bool is_done
Bool wait_for_inputs
char * manifest
char * manifest_name
char * manifest_mime
char * manifest_server
char * manifest_url
u32 manifest_version
u32 manifest_crc
Bool stsid_changed
u32 stsid_version
u32 first_port
u8 * stsid_bundle
u32 stsid_bundle_size
u32 stsid_bundle_toi
u64 last_stsid_clock
u32 manifest_type
u32 creation_time

◆ ROUTEPid

struct ROUTEPid
Data Fields
GF_FilterPid * pid
ROUTEService * route
ROUTELCT * rlct
u32 tsi
u32 bandwidth
u32 stream_type
GF_Fraction dash_dur
u8 * init_seg_data
u32 init_seg_size
u32 init_seg_crc
Bool no_init
char * init_seg_name
u32 manifest_type
Bool init_seg_sent
char * template
char * hld_child_pl
char * hld_child_pl_name
u32 hld_child_pl_version
u32 hld_child_pl_crc
u64 hls_ref_id
Bool update_hls_child_pl
u32 fmtp
u32 mode
GF_FilterPacket * current_pck
u32 current_toi
const u8 * pck_data
u32 pck_size
u32 pck_offset
u64 res_size
u64 offset_at_seg_start
char * seg_name
u32 timescale
u64 clock_at_first_pck
u64 cts_first_pck
u64 current_cts_us
u64 current_dur_us
u64 carousel_time_us
u64 clock_at_pck
Bool raw_file
Bool use_basename
u32 full_frame_size
u32 cumulated_frag_size
u32 frag_offset
u32 frag_idx
Bool push_init
Bool force_tol_send
u64 clock_at_frame_start
u64 cts_us_at_frame_start
u64 cts_at_frame_start
u32 pck_dur_at_frame_start
u32 bitrate

Macro Definition Documentation

◆ MULTIPART_BOUNDARY

#define MULTIPART_BOUNDARY   "_GPAC_BOUNDARY_ROUTE_.67706163_"

◆ ROUTE_INIT_TOI

#define ROUTE_INIT_TOI   0xFFFFFFFF

◆ PUT_U32

#define PUT_U32 (   _val)
Value:
ctx->lct_buffer[hpos] = (_val>>24 & 0xFF);\
ctx->lct_buffer[hpos+1] = (_val>>16 & 0xFF);\
ctx->lct_buffer[hpos+2] = (_val>>8 & 0xFF);\
ctx->lct_buffer[hpos+3] = (_val & 0xFF); \
hpos+=4;

◆ GF_TAI_UTC_OFFSET

#define GF_TAI_UTC_OFFSET   37

◆ OFFS

#define OFFS (   _n)    #_n, offsetof(GF_ROUTEOutCtx, _n)

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
LCT_SPLIT_NONE 
LCT_SPLIT_TYPE 
LCT_SPLIT_ALL 

Function Documentation

◆ route_create_lct_channel()

ROUTELCT * route_create_lct_channel ( GF_ROUTEOutCtx ctx,
const char *  ip,
u32  port,
GF_Err e 
)

◆ routeout_create_service()

ROUTEService * routeout_create_service ( GF_ROUTEOutCtx ctx,
u32  service_id,
const char *  ip,
u32  port,
GF_Err e 
)

◆ routeout_remove_pid()

void routeout_remove_pid ( ROUTEPid rpid,
Bool  is_rem 
)

◆ routeout_delete_service()

void routeout_delete_service ( ROUTEService serv)

◆ routeout_configure_pid()

static GF_Err routeout_configure_pid ( GF_Filter *  filter,
GF_FilterPid *  pid,
Bool  is_remove 
)
static

◆ routeout_initialize()

static GF_Err routeout_initialize ( GF_Filter *  filter)
static

◆ routeout_finalize()

static void routeout_finalize ( GF_Filter *  filter)
static

◆ routeout_strip_base()

char * routeout_strip_base ( ROUTEService serv,
char *  url 
)

◆ routeout_check_service_updates()

static GF_Err routeout_check_service_updates ( GF_ROUTEOutCtx ctx,
ROUTEService serv 
)
static

◆ routeout_lct_send()

u32 routeout_lct_send ( GF_ROUTEOutCtx ctx,
GF_Socket *  sock,
u32  tsi,
u32  toi,
u32  codepoint,
u8 payload,
u32  len,
u32  offset,
u32  service_id,
u32  total_size,
u32  offset_in_frame 
)

◆ routeout_service_send_bundle()

static GF_Err routeout_service_send_bundle ( GF_ROUTEOutCtx ctx,
ROUTEService serv 
)
static

◆ routeout_fetch_packet()

static void routeout_fetch_packet ( GF_ROUTEOutCtx ctx,
ROUTEPid rpid 
)
static

◆ routeout_process_service()

static GF_Err routeout_process_service ( GF_ROUTEOutCtx ctx,
ROUTEService serv 
)
static

◆ routeout_send_lls()

static void routeout_send_lls ( GF_ROUTEOutCtx ctx)
static

◆ routeout_process()

static GF_Err routeout_process ( GF_Filter *  filter)
static

◆ routeout_probe_url()

static GF_FilterProbeScore routeout_probe_url ( const char *  url,
const char *  mime 
)
static

◆ routeout_use_alias()

static Bool routeout_use_alias ( GF_Filter *  filter,
const char *  url,
const char *  mime 
)
static

◆ routeout_register()

const GF_FilterRegister * routeout_register ( GF_FilterSession *  session)

Variable Documentation

◆ ROUTEOutArgs

const GF_FilterArgs ROUTEOutArgs[]
static
Initial value:
=
{
{ OFFS(dst), "destination URL", GF_PROP_NAME, NULL, NULL, 0},
{ OFFS(ext), "set extension for graph resolution, regardless of file extension", GF_PROP_NAME, NULL, NULL, GF_FS_ARG_HINT_EXPERT},
{ OFFS(mime), "set mime type for graph resolution", GF_PROP_NAME, NULL, NULL, GF_FS_ARG_HINT_EXPERT},
{ OFFS(ifce), "default interface to use for multicast. If NULL, the default system interface will be used", GF_PROP_STRING, NULL, NULL, GF_FS_ARG_HINT_ADVANCED},
{ OFFS(carousel), "carousel period in ms for repeating signaling and raw file data", GF_PROP_UINT, "1000", NULL, GF_FS_ARG_HINT_EXPERT},
{ OFFS(first_port), "port number of first ROUTE session in ATSC mode", GF_PROP_UINT, "6000", NULL, GF_FS_ARG_HINT_EXPERT},
{ OFFS(ip), "multicast IP address for ROUTE session in ATSC mode", GF_PROP_STRING, "225.1.1.0", NULL, GF_FS_ARG_HINT_EXPERT},
{ OFFS(ttl), "time-to-live for multicast packets", GF_PROP_UINT, "0", NULL, 0},
{ OFFS(bsid), "ID for ATSC broadcast stream", GF_PROP_UINT, "800", NULL, GF_FS_ARG_HINT_EXPERT},
{ OFFS(mtu), "size of LCT MTU in bytes", GF_PROP_UINT, "1472", NULL, 0},
{ OFFS(splitlct), "split mode for LCT channels\n"
"- off: all streams are in the same LCT channel\n"
"- type: each new stream type results in a new LCT channel\n"
"- all: all streams are in dedicated LCT channel, the first stream being used for STSID signaling"
, GF_PROP_UINT, "off", "off|type|all", 0},
{ OFFS(korean), "use Korean version of ATSC 3.0 spec instead of US", GF_PROP_BOOL, "false", NULL, 0},
{ OFFS(llmode), "use low-latency mode", GF_PROP_BOOL, "false", NULL, GF_ARG_HINT_EXPERT},
{ OFFS(brinc), "bitrate increase in percent when estimating timing in low latency mode", GF_PROP_UINT, "10", NULL, GF_ARG_HINT_EXPERT},
{ OFFS(noreg), "disable rate regulation for media segments, pushing them as fast as received", GF_PROP_BOOL, "false", NULL, GF_ARG_HINT_EXPERT},
{ OFFS(runfor), "run for the given time in ms", GF_PROP_UINT, "0", NULL, 0},
{0}
}
static s32 runfor
Definition gpac.c:70
@ GF_FS_ARG_HINT_EXPERT
Definition filters.h:1889
@ GF_FS_ARG_HINT_ADVANCED
Definition filters.h:1887
@ GF_PROP_BOOL
Definition filters.h:767
@ GF_PROP_STRING
Definition filters.h:785
@ GF_PROP_NAME
Definition filters.h:793
@ GF_PROP_UINT
Definition filters.h:761
#define GF_ARG_HINT_EXPERT
Definition main.h:123
#define OFFS(_n)
Definition out_route.c:2097

◆ ROUTEOutCaps

const GF_FilterCapability ROUTEOutCaps[]
static
Initial value:
=
{
}
@ GF_STREAM_FILE
Definition constants.h:104
#define CAP_UINT(_f, _a, _b)
Definition filters.h:1955
#define CAP_STRING(_f, _a, _b)
Definition filters.h:1977
#define GF_CAPS_INPUT
Definition filters.h:2001
@ GF_PROP_PID_STREAM_TYPE
Definition filters.h:1016
@ GF_PROP_PID_FILE_EXT
Definition filters.h:1092

◆ ROUTEOutRegister

GF_FilterRegister ROUTEOutRegister