libgpac
Documentation of the core library of GPAC
|
ROUTE ATSC 3.0 receiver. More...
Data Structures | |
struct | GF_LCTFragInfo |
struct | GF_ROUTEEventFileInfo |
Macros | |
#define | GF_ATSC_MCAST_ADDR "224.0.23.60" |
#define | GF_ATSC_MCAST_PORT 4937 |
Enumerations | |
enum | GF_ROUTEEventType { GF_ROUTE_EVT_SERVICE_FOUND = 0 , GF_ROUTE_EVT_SERVICE_SCAN , GF_ROUTE_EVT_MPD , GF_ROUTE_EVT_HLS_VARIANT , GF_ROUTE_EVT_FILE , GF_ROUTE_EVT_DYN_SEG , GF_ROUTE_EVT_DYN_SEG_FRAG , GF_ROUTE_EVT_FILE_DELETE , GF_ROUTE_EVT_LATE_DATA } |
enum | { GF_LCT_EXT_NOP = 0 , GF_LCT_EXT_AUTH = 1 , GF_LCT_EXT_TIME = 2 , GF_LCT_EXT_FTI = 64 , GF_LCT_EXT_FDT = 192 , GF_LCT_EXT_CENC = 193 , GF_LCT_EXT_TOL24 = 194 , GF_LCT_EXT_TOL48 = 67 } |
enum | GF_LCTObjectPartial { GF_LCTO_PARTIAL_NONE =0 , GF_LCTO_PARTIAL_BEGIN , GF_LCTO_PARTIAL_ANY } |
enum | GF_RouteProgressiveDispatch { GF_ROUTE_DISPATCH_FULL = 0 , GF_ROUTE_DISPATCH_PROGRESSIVE , GF_ROUTE_DISPATCH_OUT_OF_ORDER } |
Functions | |
GF_ROUTEDmx * | gf_route_atsc_dmx_new (const char *ifce, u32 sock_buffer_size, void(*on_event)(void *udta, GF_ROUTEEventType evt, u32 evt_param, GF_ROUTEEventFileInfo *finfo), void *udta) |
GF_ROUTEDmx * | gf_route_atsc_dmx_new_ex (const char *ifce, u32 sock_buffer_size, const char *netcap_id, void(*on_event)(void *udta, GF_ROUTEEventType evt, u32 evt_param, GF_ROUTEEventFileInfo *finfo), void *udta) |
GF_ROUTEDmx * | gf_route_dmx_new (const char *ip, u32 port, const char *ifce, u32 sock_buffer_size, void(*on_event)(void *udta, GF_ROUTEEventType evt, u32 evt_param, GF_ROUTEEventFileInfo *finfo), void *udta) |
GF_ROUTEDmx * | gf_route_dmx_new_ex (const char *ip, u32 port, const char *ifce, u32 sock_buffer_size, const char *netcap_id, void(*on_event)(void *udta, GF_ROUTEEventType evt, u32 evt_param, GF_ROUTEEventFileInfo *finfo), void *udta) |
GF_ROUTEDmx * | gf_dvb_mabr_dmx_new (const char *ip, u32 port, const char *ifce, u32 sock_buffer_size, const char *netcap_id, void(*on_event)(void *udta, GF_ROUTEEventType evt, u32 evt_param, GF_ROUTEEventFileInfo *finfo), void *udta) |
void | gf_route_dmx_del (GF_ROUTEDmx *routedmx) |
GF_Err | gf_route_dmx_process (GF_ROUTEDmx *routedmx) |
Bool | gf_route_dmx_has_active_multicast (GF_ROUTEDmx *routedmx) |
void | gf_route_dmx_check_timeouts (GF_ROUTEDmx *routedmx) |
GF_Err | gf_route_dmx_set_reorder (GF_ROUTEDmx *routedmx, Bool reorder_needed, u32 timeout_us) |
GF_Err | gf_route_set_dispatch_mode (GF_ROUTEDmx *routedmx, GF_RouteProgressiveDispatch dispatch_mode) |
GF_Err | gf_route_atsc3_tune_in (GF_ROUTEDmx *routedmx, u32 service_id, Bool tune_others) |
u32 | gf_route_dmx_get_object_count (GF_ROUTEDmx *routedmx, u32 service_id) |
GF_Err | gf_route_dmx_remove_object_by_name (GF_ROUTEDmx *routedmx, u32 service_id, char *fileName, Bool purge_previous) |
GF_Err | gf_route_dmx_force_keep_object_by_name (GF_ROUTEDmx *routedmx, u32 service_id, char *fileName) |
GF_Err | gf_route_dmx_force_keep_object (GF_ROUTEDmx *routedmx, u32 service_id, u32 tsi, u32 toi, Bool force_keep) |
Bool | gf_route_dmx_remove_first_object (GF_ROUTEDmx *routedmx, u32 service_id) |
Bool | gf_route_dmx_find_atsc3_service (GF_ROUTEDmx *routedmx, u32 service_id) |
void | gf_route_dmx_purge_objects (GF_ROUTEDmx *routedmx, u32 service_id) |
u64 | gf_route_dmx_get_first_packet_time (GF_ROUTEDmx *routedmx) |
u64 | gf_route_dmx_get_last_packet_time (GF_ROUTEDmx *routedmx) |
u64 | gf_route_dmx_get_nb_packets (GF_ROUTEDmx *routedmx) |
u64 | gf_route_dmx_get_recv_bytes (GF_ROUTEDmx *routedmx) |
void | gf_route_dmx_debug_tsi (GF_ROUTEDmx *routedmx, u32 tsi) |
void | gf_route_dmx_set_service_udta (GF_ROUTEDmx *routedmx, u32 service_id, void *udta) |
void * | gf_route_dmx_get_service_udta (GF_ROUTEDmx *routedmx, u32 service_id) |
GF_Err | gf_route_dmx_patch_frag_info (GF_ROUTEDmx *routedmx, u32 service_id, GF_ROUTEEventFileInfo *finfo, u32 br_start, u32 br_end) |
GF_Err | gf_route_dmx_patch_blob_size (GF_ROUTEDmx *routedmx, u32 service_id, GF_ROUTEEventFileInfo *finfo, u32 new_size) |
GF_Err | gf_route_dmx_mark_active_quality (GF_ROUTEDmx *routedmx, u32 service_id, const char *period_id, s32 as_id, const char *rep_id, Bool is_selected) |
void | gf_route_dmx_reset_all (GF_ROUTEDmx *routedmx) |
The ROUTE receiver implements part of the ATSC 3.0 specification, mostly low-level signaling and ROUTE reception. It gathers objects from a ROUTE session and sends them back to the user through a callback, or deletes them if no callback is sent. The route demuxer does not try to repairing files, it is the user responsibility to do so.
struct GF_LCTFragInfo |
struct GF_ROUTEEventFileInfo |
Structure used to communicate file objects properties to the user
Data Fields | ||
---|---|---|
const char * | filename |
original file name |
const char * | mime |
mime type if known, NULL otherwise |
GF_Blob * | blob |
blob data pointer - the route user is responsible for setting the blob flags if desired |
u32 | total_size |
total size of object if known, 0 otherwise (TOL not received for route, last fragment not received for mabr+flute) |
u32 | tsi |
object TSI |
u32 | toi |
object TOI |
u32 | start_time |
start time in ms |
u32 | download_ms |
download time in ms |
Bool | updated |
flag set if file content has been modified - not set for GF_ROUTE_EVT_DYN_SEG (always true) |
Bool | first_toi_received |
flag set if first segment has been received for the given TSI - not set for init segments |
u32 | nb_frags |
number of fragments, only set for GF_ROUTE_EVT_DYN_SEG |
GF_LCTFragInfo * | frags |
fragment info, set for all file events - this info is shared with the LCT object being reassembled and should not be modified concurrently from route demux Any reallocation of the fragment info SHALL be done using gf_route_dmx_patch_frag_info |
u32 | late_fragment_offset |
offset of late received data, only for GF_ROUTE_EVT_LATE_DATA |
char * | dash_period_id |
for DASH,period ID, NULL otherwise |
s32 | dash_as_id |
for DASH, AS ID, -1 otherwise |
char * | dash_rep_id |
for DASH, Representation ID, for HLS variant name, NULL otherwise |
GF_LCTObjectPartial | partial | |
void * | udta |
user data set to current object after callback, and passed back on next callbacks on same object Only used for GF_ROUTE_EVT_FILE, GF_ROUTE_EVT_DYN_SEG, GF_ROUTE_EVT_DYN_SEG_FRAG and GF_ROUTE_EVT_FILE_DELETE |
#define GF_ATSC_MCAST_ADDR "224.0.23.60" |
ATSC3.0 bootstrap address for LLS
#define GF_ATSC_MCAST_PORT 4937 |
ATSC3.0 bootstrap port for LLS
enum GF_ROUTEEventType |
The types of events used to communicate withe the demuxer user.
Enumerator | |
---|---|
GF_ROUTE_EVT_SERVICE_FOUND | A new service is detected, service ID is in evt_param, no file info |
GF_ROUTE_EVT_SERVICE_SCAN | Service scan completed, no evt_param, no file info |
GF_ROUTE_EVT_MPD | New MPD or HLS master playlist available for service, service ID is in evt_param, file info carries manifest info |
GF_ROUTE_EVT_HLS_VARIANT | HLS variant update for service, service ID is in evt_param, file info carries variant info |
GF_ROUTE_EVT_FILE | static file update (with predefined TOI), service ID is in evt_param |
GF_ROUTE_EVT_DYN_SEG | Segment reception, identified through a file template, service ID is in evt_param |
GF_ROUTE_EVT_DYN_SEG_FRAG | fragment reception (part of a segment), identified through a file template, service ID is in evt_param
|
GF_ROUTE_EVT_FILE_DELETE | Object deletion (only for dynamic TOIs), used to notify the cache that an object is no longer available. File info only contains the filename being removed |
GF_ROUTE_EVT_LATE_DATA | Delayed data reception |
anonymous enum |
enum GF_LCTObjectPartial |
Progressive dispatch mode for LCT objects
GF_ROUTEDmx* gf_route_atsc_dmx_new | ( | const char * | ifce, |
u32 | sock_buffer_size, | ||
void(*)(void *udta, GF_ROUTEEventType evt, u32 evt_param, GF_ROUTEEventFileInfo *finfo) | on_event, | ||
void * | udta | ||
) |
Creates a new ROUTE ATSC3.0 demultiplexer
ifce | network interface to monitor, NULL for INADDR_ANY |
sock_buffer_size | default buffer size for the udp sockets. If 0, uses 0x2000 |
on_event | the user callback function |
udta | the user data passed back by the callback |
GF_ROUTEDmx* gf_route_atsc_dmx_new_ex | ( | const char * | ifce, |
u32 | sock_buffer_size, | ||
const char * | netcap_id, | ||
void(*)(void *udta, GF_ROUTEEventType evt, u32 evt_param, GF_ROUTEEventFileInfo *finfo) | on_event, | ||
void * | udta | ||
) |
Creates a new ROUTE ATSC3.0 demultiplexer
ifce | network interface to monitor, NULL for INADDR_ANY |
sock_buffer_size | default buffer size for the udp sockets. If 0, uses 0x2000 |
netcap_id | ID of netcap configuration to use, may be null (see gpac -h netcap) |
on_event | the user callback function |
udta | the user data passed back by the callback |
GF_ROUTEDmx* gf_route_dmx_new | ( | const char * | ip, |
u32 | port, | ||
const char * | ifce, | ||
u32 | sock_buffer_size, | ||
void(*)(void *udta, GF_ROUTEEventType evt, u32 evt_param, GF_ROUTEEventFileInfo *finfo) | on_event, | ||
void * | udta | ||
) |
Creates a new ROUTE demultiplexer
ip | IP address of ROUTE session |
port | port of ROUTE session |
ifce | network interface to monitor, NULL for INADDR_ANY |
sock_buffer_size | default buffer size for the udp sockets. If 0, uses 0x2000 |
on_event | the user callback function |
udta | the user data passed back by the callback |
GF_ROUTEDmx* gf_route_dmx_new_ex | ( | const char * | ip, |
u32 | port, | ||
const char * | ifce, | ||
u32 | sock_buffer_size, | ||
const char * | netcap_id, | ||
void(*)(void *udta, GF_ROUTEEventType evt, u32 evt_param, GF_ROUTEEventFileInfo *finfo) | on_event, | ||
void * | udta | ||
) |
Creates a new ROUTE demultiplexer
ip | IP address of ROUTE session |
port | port of ROUTE session |
ifce | network interface to monitor, NULL for INADDR_ANY |
sock_buffer_size | default buffer size for the udp sockets. If 0, uses 0x2000 |
netcap_id | ID of netcap configuration to use, may be null (see gpac -h netcap) |
on_event | the user callback function |
udta | the user data passed back by the callback |
GF_ROUTEDmx* gf_dvb_mabr_dmx_new | ( | const char * | ip, |
u32 | port, | ||
const char * | ifce, | ||
u32 | sock_buffer_size, | ||
const char * | netcap_id, | ||
void(*)(void *udta, GF_ROUTEEventType evt, u32 evt_param, GF_ROUTEEventFileInfo *finfo) | on_event, | ||
void * | udta | ||
) |
Creates a new DVB MABR Flute demultiplexer
ip | IP address of LCT session carrying the initial FDT |
port | port of LCT session carrying the initial FDT |
ifce | network interface to monitor, NULL for INADDR_ANY |
sock_buffer_size | default buffer size for the udp sockets. If 0, uses 0x2000 |
netcap_id | ID of netcap configuration to use, may be null (see gpac -h netcap) |
on_event | the user callback function |
udta | the user data passed back by the callback |
void gf_route_dmx_del | ( | GF_ROUTEDmx * | routedmx | ) |
Deletes an ROUTE demultiplexer
routedmx | the ROUTE demultiplexer to delete |
GF_Err gf_route_dmx_process | ( | GF_ROUTEDmx * | routedmx | ) |
Processes demultiplexing, returns when nothing to read
routedmx | the ROUTE demultiplexer |
Bool gf_route_dmx_has_active_multicast | ( | GF_ROUTEDmx * | routedmx | ) |
Checks if there are some active multicast sockets
routedmx | the ROUTE demultiplexer |
void gf_route_dmx_check_timeouts | ( | GF_ROUTEDmx * | routedmx | ) |
Checks for object being timeouts - this should only be called when gf_route_dmx_process returns GF_IP_NETWORK_EMPTY for the first time in a batch
routedmx | the ROUTE demultiplexer |
Sets reordering on.
routedmx | the ROUTE demultiplexer |
reorder_needed | if TRUE, the order flag in ROUTE/LCT is ignored and objects are gathered for the given time. Otherwise, if order flag is set in ROUTE/LCT, an object is considered done as soon as a new object starts |
timeout_us | maximum delay in microseconds to wait before considering the object is done when ROUTE/LCT order is not used. A value of 0 implies any out-of-order packet triggers a download completion (default value is 1 ms). |
GF_Err gf_route_set_dispatch_mode | ( | GF_ROUTEDmx * | routedmx, |
GF_RouteProgressiveDispatch | dispatch_mode | ||
) |
Allow segments to be sent while being downloaded.
routedmx | the ROUTE demultiplexer |
dispatch_mode | set dispatch mode |
Sets the service ID to tune into for ATSC 3.0
routedmx | the ROUTE demultiplexer |
service_id | ID of the service to tune in. 0 means no service, 0xFFFFFFFF means all services and 0xFFFFFFFE means first service found |
tune_others | if set, will tune all non-selected services to get the MPD, but won't receive any media data |
Gets the number of objects currently loaded in the service
routedmx | the ROUTE demultiplexer |
service_id | ID of the service to query |
GF_Err gf_route_dmx_remove_object_by_name | ( | GF_ROUTEDmx * | routedmx, |
u32 | service_id, | ||
char * | fileName, | ||
Bool | purge_previous | ||
) |
Removes an object with a given filename
routedmx | the ROUTE demultiplexer |
service_id | ID of the service to query |
fileName | name of the file associated with the object |
purge_previous | if set, indicates that all objects with the same TSI and a TOI less than TOI of the deleted object will be removed |
GF_Err gf_route_dmx_force_keep_object_by_name | ( | GF_ROUTEDmx * | routedmx, |
u32 | service_id, | ||
char * | fileName | ||
) |
Flags an object to be kept until gf_route_dmx_remove_object_by_name is called
routedmx | the ROUTE demultiplexer |
service_id | ID of the service to query |
fileName | name of the file associated with the object |
GF_Err gf_route_dmx_force_keep_object | ( | GF_ROUTEDmx * | routedmx, |
u32 | service_id, | ||
u32 | tsi, | ||
u32 | toi, | ||
Bool | force_keep | ||
) |
Set force-keep flag on object by TSI and TOI - typically used for repair
routedmx | the ROUTE demultiplexer |
service_id | ID of the service to query |
tsi | transport service identifier |
toi | transport object identifier |
force_keep | force_keep flag. When set back to false, this does not trigger a cleanup, it is up to the application to do so |
Removes the first object loaded in the service
routedmx | the ROUTE demultiplexer |
service_id | ID of the service to query |
Checks existence of a service for atsc 3.0
routedmx | the ROUTE demultiplexer |
service_id | ID of the service to query |
void gf_route_dmx_purge_objects | ( | GF_ROUTEDmx * | routedmx, |
u32 | service_id | ||
) |
Removes all non-signaling objects (ie TSI!=0), keeping only init segments and currently/last downloaded objects
routedmx | the ROUTE demultiplexer |
service_id | ID of the service to cleanup |
u64 gf_route_dmx_get_first_packet_time | ( | GF_ROUTEDmx * | routedmx | ) |
Gets high resolution system time clock of the first packet received
routedmx | the ROUTE demultiplexer |
u64 gf_route_dmx_get_last_packet_time | ( | GF_ROUTEDmx * | routedmx | ) |
Gets high resolution system time clock of the last packet received
routedmx | the ROUTE demultiplexer |
u64 gf_route_dmx_get_nb_packets | ( | GF_ROUTEDmx * | routedmx | ) |
Gets the number of packets received since start of the session, for all active services
routedmx | the ROUTE demultiplexer |
u64 gf_route_dmx_get_recv_bytes | ( | GF_ROUTEDmx * | routedmx | ) |
Gets the number of bytes received since start of the session, for all active services
routedmx | the ROUTE demultiplexer |
void gf_route_dmx_debug_tsi | ( | GF_ROUTEDmx * | routedmx, |
u32 | tsi | ||
) |
Gather only objects with given TSI (for debug purposes)
routedmx | the ROUTE demultiplexer |
tsi | the target TSI, 0 for no filtering |
void gf_route_dmx_set_service_udta | ( | GF_ROUTEDmx * | routedmx, |
u32 | service_id, | ||
void * | udta | ||
) |
Sets udta for given service id
routedmx | the ROUTE demultiplexer |
service_id | the target service |
udta | the target user data |
void* gf_route_dmx_get_service_udta | ( | GF_ROUTEDmx * | routedmx, |
u32 | service_id | ||
) |
Gets udta for given service id
routedmx | the ROUTE demultiplexer |
service_id | the target service |
GF_Err gf_route_dmx_patch_frag_info | ( | GF_ROUTEDmx * | routedmx, |
u32 | service_id, | ||
GF_ROUTEEventFileInfo * | finfo, | ||
u32 | br_start, | ||
u32 | br_end | ||
) |
Patch fragment info of object after a repair
routedmx | the ROUTE demultiplexer |
service_id | the target service |
finfo | file info event as passed to the caller. Only tsi and toi info are used to loacate the object. The frags and nb_frags fileds are updated by this function |
br_start | start offset of byte range being patched |
br_end | end offset of byte range being patched |
GF_Err gf_route_dmx_patch_blob_size | ( | GF_ROUTEDmx * | routedmx, |
u32 | service_id, | ||
GF_ROUTEEventFileInfo * | finfo, | ||
u32 | new_size | ||
) |
Patch object size after a repair - this might be needed by repair when the file size was not known
routedmx | the ROUTE demultiplexer |
service_id | the target service |
finfo | file info event as passed to the caller. Only tsi and toi info are used to loacate the object. The frags and nb_frags fileds are updated by this function |
new_size | the new size to set |
GF_Err gf_route_dmx_mark_active_quality | ( | GF_ROUTEDmx * | routedmx, |
u32 | service_id, | ||
const char * | period_id, | ||
s32 | as_id, | ||
const char * | rep_id, | ||
Bool | is_selected | ||
) |
Set active status of a representation
routedmx | the ROUTE demultiplexer |
service_id | the target service |
period_id | ID of the DASH period containing the representation, may be NULL |
as_id | ID of the DASH adaptation set containing the representation, may be 0 |
rep_id | ID of the period containing the representation or HLS variant playlist URL, shall not be NULL |
is_selected | representation status |
void gf_route_dmx_reset_all | ( | GF_ROUTEDmx * | routedmx | ) |
Cancel all current transfer on all services
routedmx | the ROUTE demultiplexer |