libgpac
Documentation of the core library of GPAC
dash_client.c File Reference
#include <gpac/network.h>
#include <gpac/dash.h>
#include <gpac/mpd.h>
#include <gpac/internal/m3u8.h>
#include <gpac/internal/isomedia_dev.h>
#include <gpac/base_coding.h>
#include <string.h>
#include <sys/stat.h>
#include <math.h>
#include <gpac/iso639.h>
+ Include dependency graph for dash_client.c:

Data Structures

struct  GF_DashClient
 
struct  segment_cache_entry
 
struct  GF_DASH_Group
 
struct  _dash_srd_desc
 

Macros

#define M3U8_TO_MPD_USE_TEMPLATE   0
 
#define M3U8_TO_MPD_USE_SEGTIMELINE   0
 
#define HLS_MIN_RELOAD_TIME(_dash)   _dash->hls_reload_time = 50 + gf_sys_clock();
 
#define GET_REP_ATTR(_a)   _a = rep->_a; if (!_a) _a = set->_a;
 

Enumerations

enum  GF_DASH_STATE {
  GF_DASH_STATE_STOPPED = 0 , GF_DASH_STATE_SETUP , GF_DASH_STATE_CONNECTING , GF_DASH_STATE_RUNNING ,
  GF_DASH_STATE_CHAIN_NEXT , GF_DASH_STATE_CHAIN_FALLBACK
}
 
enum  { GF_DASH_CHAIN_REG =0 , GF_DASH_CHAIN_PUSH , GF_DASH_CHAIN_POP }
 
enum  { GF_DASH_MCAST_NONE =0 , GF_DASH_MCAST_INIT , GF_DASH_MCAST_SYNC_SOURCE , GF_DASH_MCAST_SYNC_DEFAULT }
 
enum  { SEG_FLAG_LOOP_DETECTED = 1 , SEG_FLAG_DEP_FOLLOWING = 1<<1 , SEG_FLAG_DISABLED = 1<<2 }
 
enum  GF_DASHGroupSelection { GF_DASH_GROUP_NOT_SETUP = 0 , GF_DASH_GROUP_NOT_SELECTABLE , GF_DASH_GROUP_NOT_SELECTED , GF_DASH_GROUP_SELECTED }
 
enum  DownloadGroupStatus { GF_DASH_DownloadCancel , GF_DASH_DownloadRestart , GF_DASH_DownloadSuccess }
 

Functions

static void gf_dash_seek_group (GF_DashClient *dash, GF_DASH_Group *group, Double seek_to, Bool is_dynamic)
 
static void gf_dash_solve_period_xlink (GF_DashClient *dash, GF_List *period_list, u32 period_idx)
 
void drm_decrypt (unsigned char *data, unsigned long dataSize, const char *decryptMethod, const char *keyfileURL, const unsigned char *keyIV)
 
static GF_DASH_Group * gf_dash_get_active_group (GF_DashClient *dash, u32 idx)
 
static const char * gf_dash_get_mime_type (GF_MPD_SubRepresentation *subrep, GF_MPD_Representation *rep, GF_MPD_AdaptationSet *set)
 
static u64 dash_get_fetch_time (GF_DashClient *dash)
 
static u32 gf_dash_group_count_rep_needed (GF_DASH_Group *group)
 
static u32 gf_dash_check_mpd_root_type (const char *local_url)
 
static GF_Err gf_dash_get_date (GF_DashClient *dash, char *scheme_id, char *url, u64 *utc)
 
GF_Err gf_dash_download_resource (GF_DashClient *dash, GF_DASHFileIOSession *sess, const char *url, u64 start_range, u64 end_range, u32 persistent_mode, GF_DASH_Group *group)
 
static void dash_ssr_adjust_group_start (GF_DASH_Group *group, Double seg_dur, u32 ssr_parts)
 
static void gf_dash_group_timeline_setup_single (GF_MPD *mpd, GF_DASH_Group *group, u64 fetch_time)
 
static void gf_dash_group_timeline_setup (GF_MPD *mpd, GF_DASH_Group *group, u64 fetch_time)
 
static Bool gf_dash_is_m3u8_mime (const char *url, const char *mime)
 
GF_EXPORT GF_Err gf_dash_group_check_bandwidth (GF_DashClient *dash, u32 group_idx, u32 bits_per_sec, u64 total_bytes, u64 bytes_done, u64 us_since_start)
 
static void gf_dash_get_timeline_duration (GF_MPD *mpd, GF_MPD_Period *period, GF_MPD_SegmentTimeline *timeline, u32 timescale, u32 *nb_segments, Double *max_seg_duration)
 
static void gf_dash_get_segment_duration (GF_MPD_Representation *rep, GF_MPD_AdaptationSet *set, GF_MPD_Period *period, GF_MPD *mpd, u32 *nb_segments, Double *max_seg_duration)
 
static u64 gf_dash_get_segment_start_time_with_timescale (GF_DASH_Group *group, u64 *segment_duration, u32 *scale, u64 *current_pto)
 
static Double gf_dash_get_segment_start_time (GF_DASH_Group *group, Double *segment_duration)
 
static u64 gf_dash_get_segment_availability_start_time (GF_MPD *mpd, GF_DASH_Group *group, u32 segment_index, u32 *seg_dur_ms)
 
static u32 gf_dash_get_index_in_timeline (GF_MPD_SegmentTimeline *timeline, u64 segment_start, u64 start_timescale, u64 timescale)
 
static GF_MPD_SegmentTimelineEntrygf_dash_get_timeline_entry (GF_MPD_SegmentTimeline *timeline, u32 segment_index)
 
static GF_Err gf_dash_merge_segment_timeline (GF_DASH_Group *group, GF_DashClient *dash, GF_MPD_SegmentList *old_list, GF_MPD_SegmentTemplate *old_template, GF_MPD_SegmentList *new_list, GF_MPD_SegmentTemplate *new_template, Double min_start_time)
 
static u32 gf_dash_purge_segment_timeline (GF_DASH_Group *group, Double min_start_time)
 
static GF_Err gf_dash_solve_representation_xlink (GF_DashClient *dash, GF_MPD_Representation *rep, u8 last_sig[GF_SHA1_DIGEST_SIZE])
 
static void dash_purge_xlink (GF_MPD *new_mpd)
 
static void gf_dash_mark_group_done (GF_DASH_Group *group)
 
static const char * dash_strip_base_url (const char *url, const char *base_url)
 
static GF_Err gf_dash_solve_m3u8_representation_xlink (GF_DASH_Group *group, GF_MPD_Representation *rep, Bool *is_static, u64 *duration, u8 signature[GF_SHA1_DIGEST_SIZE])
 
static u32 ls_hls_purge_segments (s32 live_edge_idx, GF_List *l)
 
static void dash_check_chaining (GF_DashClient *dash, char *scheme_id, char **chain_ptr, u32 stack_state)
 
static GF_Err gf_dash_update_manifest (GF_DashClient *dash)
 
static void m3u8_setup_timeline (GF_DASH_Group *group, GF_MPD_Representation *rep)
 
static GF_Err gf_dash_resolve_url (GF_MPD *mpd, GF_MPD_Representation *rep, GF_DASH_Group *group, const char *mpd_url, GF_MPD_URLResolveType resolve_type, u32 item_index, char **out_url, u64 *out_range_start, u64 *out_range_end, u64 *segment_duration, Bool *is_in_base_url, char **out_key_url, bin128 *out_key_iv, Bool *data_url_process, u32 *out_start_number)
 
static void gf_dash_set_group_representation (GF_DASH_Group *group, GF_MPD_Representation *rep)
 
static void gf_dash_switch_group_representation (GF_DashClient *mpd, GF_DASH_Group *group)
 
static Double gf_dash_get_max_available_speed (GF_DashClient *dash, GF_DASH_Group *group, GF_MPD_Representation *rep)
 
static void dash_store_stats (GF_DashClient *dash, GF_DASH_Group *group, u32 bytes_per_sec, u32 file_size, Bool is_broadcast, u32 cur_dep_idx, u64 us_since_start)
 
static s32 dash_do_rate_monitor_default (GF_DashClient *dash, GF_DASH_Group *group, u32 bits_per_sec, u64 total_bytes, u64 bytes_done, u64 us_since_start, u32 buffer_dur_ms, u32 current_seg_dur)
 
static s32 dash_do_rate_adaptation_legacy_rate (GF_DashClient *dash, GF_DASH_Group *group, GF_DASH_Group *base_group, u32 dl_rate, Double speed, Double max_available_speed, Bool force_lower_complexity, GF_MPD_Representation *rep, Bool go_up_bitrate)
 
static s32 dash_do_rate_adaptation_legacy_buffer (GF_DashClient *dash, GF_DASH_Group *group, GF_DASH_Group *base_group, u32 dl_rate, Double speed, Double max_available_speed, Bool force_lower_complexity, GF_MPD_Representation *rep, Bool go_up_bitrate)
 
static u32 get_min_rate_above (GF_List *representations, double rate, s32 *index)
 
static u32 get_max_rate_below (GF_List *representations, double rate, s32 *index)
 
static s32 dash_do_rate_adaptation_bba0 (GF_DashClient *dash, GF_DASH_Group *group, GF_DASH_Group *base_group, u32 dl_rate, Double speed, Double max_available_speed, Bool force_lower_complexity, GF_MPD_Representation *rep, Bool go_up_bitrate)
 
static s32 bola_find_max_utility_index (GF_List *representations, Double V, Double gamma, Double p, Double Q)
 
static s32 dash_do_rate_adaptation_bola (GF_DashClient *dash, GF_DASH_Group *group, GF_DASH_Group *base_group, u32 dl_rate, Double speed, Double max_available_speed, Bool force_lower_complexity, GF_MPD_Representation *rep, Bool go_up_bitrate)
 
static void dash_do_rate_adaptation (GF_DashClient *dash, GF_DASH_Group *group)
 
static char * gf_dash_get_fileio_url (const char *base_url, char *res_url)
 
static GF_Err gf_dash_download_init_segment (GF_DashClient *dash, GF_DASH_Group *group)
 
static void gf_dash_skip_disabled_representation (GF_DASH_Group *group, GF_MPD_Representation *rep, Bool for_autoswitch)
 
static void gf_dash_group_reset_cache_entry (segment_cache_entry *cached)
 
static void gf_dash_group_reset (GF_DashClient *dash, GF_DASH_Group *group)
 
static void gf_dash_reset_groups (GF_DashClient *dash)
 
static u32 gf_dash_get_start_number (GF_DASH_Group *group, GF_MPD_Representation *rep)
 
static GF_MPD_Representationgf_dash_find_rep (GF_DashClient *dash, const char *dependency_id, GF_DASH_Group **rep_group)
 
static s32 gf_dash_group_get_dependency_group (GF_DashClient *dash, u32 idx)
 
GF_EXPORT s32 gf_dash_group_has_dependent_group (GF_DashClient *dash, u32 idx)
 
GF_EXPORT u32 gf_dash_group_get_num_groups_depending_on (GF_DashClient *dash, u32 idx)
 
GF_EXPORT s32 gf_dash_get_dependent_group_index (GF_DashClient *dash, u32 idx, u32 group_depending_on_dep_idx)
 
GF_EXPORT s32 gf_dash_get_base_group_index (GF_DashClient *dash, u32 idx)
 
GF_Err gf_dash_setup_groups (GF_DashClient *dash)
 
static GF_Err gf_dash_load_sidx (GF_BitStream *bs, GF_MPD_Representation *rep, Bool separate_index, u64 sidx_offset)
 
static GF_Err gf_dash_load_representation_sidx (GF_DASH_Group *group, GF_MPD_Representation *rep, const char *cache_name, Bool separate_index, Bool needs_mov_range)
 
static GF_Err dash_load_box_type (const char *cache_name, u32 offset, u32 *box_type, u32 *box_size)
 
void gf_mpd_segment_template_free (void *_item)
 
static GF_Err gf_dash_setup_single_index_mode (GF_DASH_Group *group)
 
static u32 gf_dash_get_tiles_quality_rank (GF_DashClient *dash, GF_DASH_Group *tile_group)
 
static void gf_dash_set_tiles_quality (GF_DashClient *dash, struct _dash_srd_desc *srd, Bool force_all)
 
static struct _dash_srd_descgf_dash_get_srd_desc (GF_DashClient *dash, u32 srd_id, Bool do_create)
 
static GF_Err dash_check_supported_mime (GF_MPD_Period *period)
 
static GF_Err gf_dash_setup_period (GF_DashClient *dash)
 
static void gf_dash_group_check_time (GF_DASH_Group *group)
 
static DownloadGroupStatus dash_download_group_download (GF_DashClient *dash, GF_DASH_Group *group, GF_DASH_Group *base_group, Bool has_dep_following)
 
static GFINLINE void dash_set_min_wait (GF_DashClient *dash, u32 min_wait)
 
static DownloadGroupStatus on_group_download_error (GF_DashClient *dash, GF_DASH_Group *group, GF_DASH_Group *base_group, GF_Err e, GF_MPD_Representation *rep, char *new_base_seg_url, char *key_url, Bool has_dep_following)
 
static DownloadGroupStatus dash_download_group (GF_DashClient *dash, GF_DASH_Group *group, GF_DASH_Group *base_group, Bool has_dep_following)
 
static void dash_global_rate_adaptation (GF_DashClient *dash, Bool for_postponed_only)
 
static GF_Err dash_setup_period_and_groups (GF_DashClient *dash)
 
static void dash_do_groups (GF_DashClient *dash)
 
static GF_Err dash_check_mpd_update_and_cache (GF_DashClient *dash, Bool *cache_is_full)
 
static GF_Err gf_dash_check_periods (GF_DashClient *dash)
 
static Bool gf_dash_seek_periods (GF_DashClient *dash, Double seek_time)
 
static GF_Err gf_dash_process_internal (GF_DashClient *dash)
 
GF_Err gf_dash_process (GF_DashClient *dash)
 
static u32 gf_dash_period_index_from_time (GF_DashClient *dash, u64 time)
 
static void gather_ssr_rep (GF_DASH_Group *group, GF_List *select)
 
GF_EXPORT void gf_dash_group_seek (GF_DashClient *dash, u32 group_idx, Double seek_to)
 
static void gf_dash_seek_groups (GF_DashClient *dash, Double seek_time, Bool is_dynamic)
 
static GF_Err http_ifce_get (GF_FileDownload *getter, char *url)
 
static void http_ifce_clean (GF_FileDownload *getter)
 
static const char * http_ifce_cache_name (GF_FileDownload *getter)
 
static GF_Err http_ifce_get_status (GF_FileDownload *getter)
 
GF_EXPORT GF_Err gf_dash_open (GF_DashClient *dash, const char *manifest_url)
 
GF_EXPORT void gf_dash_close (GF_DashClient *dash)
 
GF_EXPORT void gf_dash_set_algo (GF_DashClient *dash, GF_DASHAdaptationAlgorithm algo)
 
static s32 dash_do_rate_adaptation_custom (GF_DashClient *dash, GF_DASH_Group *group, GF_DASH_Group *base_group, u32 dl_rate, Double speed, Double max_available_speed, Bool force_lower_complexity, GF_MPD_Representation *rep, Bool go_up_bitrate)
 
static s32 dash_do_rate_monitor_custom (GF_DashClient *dash, GF_DASH_Group *group, u32 bits_per_sec, u64 total_bytes, u64 bytes_done, u64 us_since_start, u32 buffer_dur_ms, u32 current_seg_dur)
 
GF_EXPORT void gf_dash_set_algo_custom (GF_DashClient *dash, void *udta, gf_dash_rate_adaptation algo_custom, gf_dash_download_monitor download_monitor_custom)
 
GF_EXPORT GF_DashClient * gf_dash_new (GF_DASHFileIO *dash_io, u32 max_cache_duration, s32 auto_switch_count, Bool keep_files, Bool disable_switching, GF_DASHInitialSelectionMode first_select_mode, u32 initial_time_shift_percent)
 
GF_EXPORT void gf_dash_del (GF_DashClient *dash)
 
GF_EXPORT void gf_dash_enable_utc_drift_compensation (GF_DashClient *dash, Bool estimate_utc_drift)
 
GF_EXPORT void gf_dash_set_switching_probe_count (GF_DashClient *dash, u32 switch_probe_count)
 
GF_EXPORT void gf_dash_enable_single_range_llhls (GF_DashClient *dash, Bool enable)
 
GF_EXPORT void gf_dash_enable_group_selection (GF_DashClient *dash, Bool enable)
 
GF_EXPORT void gf_dash_set_agressive_adaptation (GF_DashClient *dash, Bool agressive_switch)
 
GF_EXPORT void gf_dash_set_auto_switch (GF_DashClient *dash, s32 auto_switch_count, Bool auto_switch_loop)
 
GF_EXPORT void gf_dash_enable_cross_as_switch (GF_DashClient *dash, GF_DASHCrossASMode cross_as_mode)
 
GF_EXPORT u32 gf_dash_get_group_count (GF_DashClient *dash)
 
GF_EXPORT void * gf_dash_get_group_udta (GF_DashClient *dash, u32 idx)
 
GF_EXPORT GF_Err gf_dash_set_group_udta (GF_DashClient *dash, u32 idx, void *udta)
 
GF_EXPORT Bool gf_dash_is_group_selected (GF_DashClient *dash, u32 idx)
 
GF_EXPORT Bool gf_dash_is_group_selectable (GF_DashClient *dash, u32 idx)
 
GF_EXPORT void gf_dash_get_info (GF_DashClient *dash, const char **title, const char **source)
 
GF_EXPORT void gf_dash_switch_quality (GF_DashClient *dash, Bool switch_up)
 
GF_EXPORT Double gf_dash_get_duration (GF_DashClient *dash)
 
GF_EXPORT u32 gf_dash_group_get_time_shift_buffer_depth (GF_DashClient *dash, u32 idx)
 
GF_EXPORT const char * gf_dash_get_url (GF_DashClient *dash)
 
GF_EXPORT Bool gf_dash_is_m3u8 (GF_DashClient *dash)
 
GF_EXPORT Bool gf_dash_is_smooth_streaming (GF_DashClient *dash)
 
GF_EXPORT const char * gf_dash_group_get_segment_init_url (GF_DashClient *dash, u32 idx, u64 *start_range, u64 *end_range, const char **mime_type)
 
GF_EXPORT const char * gf_dash_group_get_segment_init_keys (GF_DashClient *dash, u32 idx, u32 *crypt_type, bin128 *key_IV)
 
const char * gf_dash_group_get_clearkey_uri (GF_DashClient *dash, u32 group_idx, bin128 *default_kid)
 
Bool gf_dash_group_init_segment_is_media (GF_DashClient *dash, u32 idx)
 
GF_EXPORT s32 gf_dash_group_get_id (GF_DashClient *dash, u32 idx)
 
GF_EXPORT const char * gf_dash_get_period_id (GF_DashClient *dash)
 
GF_EXPORT void gf_dash_group_select (GF_DashClient *dash, u32 idx, Bool select)
 
GF_EXPORT void gf_dash_groups_set_language (GF_DashClient *dash, const char *lang_code_rfc_5646)
 
GF_EXPORT Bool gf_dash_is_running (GF_DashClient *dash)
 
GF_EXPORT Bool gf_dash_is_in_setup (GF_DashClient *dash)
 
GF_EXPORT u32 gf_dash_get_period_switch_status (GF_DashClient *dash)
 
GF_EXPORT void gf_dash_request_period_switch (GF_DashClient *dash)
 
GF_EXPORT Bool gf_dash_in_last_period (GF_DashClient *dash, Bool check_eos)
 
GF_EXPORT Bool gf_dash_in_period_setup (GF_DashClient *dash)
 
GF_EXPORT void gf_dash_set_speed (GF_DashClient *dash, Double speed)
 
GF_EXPORT GF_Err gf_dash_group_get_segment_duration (GF_DashClient *dash, u32 idx, u32 *dur, u32 *timescale)
 
GF_EXPORT GF_Err gf_dash_group_next_seg_info (GF_DashClient *dash, u32 group_idx, u32 dependent_representation_index, const char **seg_name, u32 *seg_number, GF_Fraction64 *seg_time, u32 *seg_dur_ms, const char **init_segment)
 
GF_EXPORT const char * gf_dash_group_get_representation_id (GF_DashClient *dash, u32 idx)
 
static void gf_dash_group_discard_segment_internal (GF_DashClient *dash, GF_DASH_Group *group)
 
GF_EXPORT void gf_dash_group_discard_segment (GF_DashClient *dash, u32 idx)
 
GF_EXPORT void gf_dash_set_group_done (GF_DashClient *dash, u32 idx, Bool done)
 
GF_EXPORT Bool gf_dash_get_group_done (GF_DashClient *dash, u32 idx)
 
GF_EXPORT GF_Err gf_dash_group_get_presentation_time_offset (GF_DashClient *dash, u32 idx, u64 *presentation_time_offset, u32 *timescale)
 
GF_EXPORT GF_Err gf_dash_group_get_next_segment_location (GF_DashClient *dash, u32 idx, u32 dependent_representation_index, const char **url, u64 *start_range, u64 *end_range, s32 *switching_index, const char **switching_url, u64 *switching_start_range, u64 *switching_end_range, const char **original_url, Bool *has_next_segment, const char **key_url, bin128 *key_IV, u64 *utc)
 
GF_EXPORT void gf_dash_seek (GF_DashClient *dash, Double start_range)
 
GF_EXPORT Bool gf_dash_group_segment_switch_forced (GF_DashClient *dash, u32 idx)
 
GF_EXPORT void gf_dash_set_utc_shift (GF_DashClient *dash, s32 shift_utc_sec)
 
GF_EXPORT GF_Err gf_dash_group_get_video_info (GF_DashClient *dash, u32 idx, u32 *max_width, u32 *max_height)
 
GF_EXPORT Bool gf_dash_group_get_srd_max_size_info (GF_DashClient *dash, u32 idx, u32 *max_width, u32 *max_height)
 
GF_EXPORT GF_Err gf_dash_set_min_timeout_between_404 (GF_DashClient *dash, u32 min_timeout_between_404)
 
GF_EXPORT GF_Err gf_dash_set_segment_expiration_threshold (GF_DashClient *dash, u32 expire_after_ms)
 
GF_EXPORT Bool gf_dash_group_loop_detected (GF_DashClient *dash, u32 idx)
 
GF_EXPORT Double gf_dash_group_get_start_range (GF_DashClient *dash, u32 idx)
 
GF_EXPORT Bool gf_dash_is_dynamic_mpd (GF_DashClient *dash)
 
GF_EXPORT u32 gf_dash_get_min_buffer_time (GF_DashClient *dash)
 
Bool gf_dash_is_low_latency (GF_DashClient *dash, u32 idx)
 
u32 gf_dash_get_max_segment_duration (GF_DashClient *dash)
 
GF_EXPORT GF_Err gf_dash_set_max_resolution (GF_DashClient *dash, u32 width, u32 height, u8 max_display_bpp)
 
GF_EXPORT void gf_dash_debug_groups (GF_DashClient *dash, const u32 *dbg_groups_idx, u32 nb_groups)
 
GF_EXPORT void gf_dash_split_adaptation_sets (GF_DashClient *dash)
 
GF_EXPORT void gf_dash_set_low_latency_mode (GF_DashClient *dash, GF_DASHLowLatencyMode low_lat_mode)
 
GF_EXPORT void gf_dash_set_user_buffer (GF_DashClient *dash, u32 buffer_time_ms)
 
GF_EXPORT u64 gf_dash_get_period_start (GF_DashClient *dash)
 
GF_EXPORT u64 gf_dash_get_period_duration (GF_DashClient *dash)
 
GF_EXPORT const char * gf_dash_group_get_language (GF_DashClient *dash, u32 idx)
 
GF_EXPORT u32 gf_dash_group_get_audio_channels (GF_DashClient *dash, u32 idx)
 
GF_EXPORT u32 gf_dash_group_get_num_qualities (GF_DashClient *dash, u32 idx)
 
GF_EXPORT u32 gf_dash_group_get_num_components (GF_DashClient *dash, u32 idx)
 
GF_EXPORT char * gf_dash_group_get_template (GF_DashClient *dash, u32 idx, u32 *segment_timeline_timescale, const char **init_url, const char **hls_variant)
 
static GF_DASH_Group * dash_get_group_for_quality (GF_DashClient *dash, u32 idx, u32 *quality_idx)
 
GF_EXPORT GF_Err gf_dash_group_get_quality_info (GF_DashClient *dash, u32 idx, u32 quality_idx, GF_DASHQualityInfo *quality)
 
static Bool gf_dash_group_enum_descriptor_list (GF_DashClient *dash, u32 idx, GF_List *descs, const char **desc_id, const char **desc_scheme, const char **desc_value)
 
GF_EXPORT Bool gf_dash_group_enum_descriptor (GF_DashClient *dash, u32 group_idx, GF_DashDescriptorType desc_type, u32 desc_idx, const char **desc_id, const char **desc_scheme, const char **desc_value)
 
GF_EXPORT Bool gf_dash_get_automatic_switching (GF_DashClient *dash)
 
GF_EXPORT GF_Err gf_dash_set_automatic_switching (GF_DashClient *dash, Bool enable_switching)
 
GF_EXPORT GF_Err gf_dash_group_select_quality (GF_DashClient *dash, u32 idx, const char *ID, u32 q_idx)
 
GF_EXPORT s32 gf_dash_group_get_active_quality (GF_DashClient *dash, u32 idx)
 
GF_EXPORT GF_Err gf_dash_set_timeshift (GF_DashClient *dash, u32 ms_in_timeshift)
 
GF_EXPORT Double gf_dash_get_timeshift_buffer_pos (GF_DashClient *dash)
 
GF_EXPORT void gf_dash_group_set_codec_stat (GF_DashClient *dash, u32 idx, u32 avg_dec_time, u32 max_dec_time, u32 irap_avg_dec_time, u32 irap_max_dec_time, Bool codec_reset, Bool decode_only_rap)
 
GF_EXPORT void gf_dash_group_set_buffer_levels (GF_DashClient *dash, u32 idx, u32 buffer_min_ms, u32 buffer_max_ms, u32 buffer_occupancy_ms)
 
GF_EXPORT void gf_dash_disable_speed_adaptation (GF_DashClient *dash, Bool disable)
 
GF_EXPORT void gf_dash_override_ntp (GF_DashClient *dash, u64 server_ntp)
 
GF_EXPORT s32 gf_dash_get_utc_drift_estimate (GF_DashClient *dash)
 
GF_EXPORT GF_DASHTileAdaptationMode gf_dash_get_tile_adaptation_mode (GF_DashClient *dash)
 
GF_EXPORT void gf_dash_set_tile_adaptation_mode (GF_DashClient *dash, GF_DASHTileAdaptationMode mode, u32 tile_rate_decrease)
 
GF_EXPORT void gf_dash_disable_low_quality_tiles (GF_DashClient *dash, Bool disable_tiles)
 
GF_EXPORT void gf_dash_set_chaining_mode (GF_DashClient *dash, u32 chaining_mode)
 
GF_EXPORT Bool gf_dash_group_get_srd_info (GF_DashClient *dash, u32 idx, u32 *srd_id, u32 *srd_x, u32 *srd_y, u32 *srd_w, u32 *srd_h, u32 *srd_width, u32 *srd_height)
 
GF_EXPORT void gf_dash_ignore_xlink (GF_DashClient *dash, Bool ignore_xlink)
 
GF_EXPORT void gf_dash_set_suggested_presentation_delay (GF_DashClient *dash, s32 spd)
 
GF_EXPORT void gf_dash_set_mcast_ast_shift (GF_DashClient *dash, s32 ast_shift)
 
GF_EXPORT GF_Err gf_dash_group_set_max_buffer_playout (GF_DashClient *dash, u32 idx, u32 max_buffer_playout_ms)
 
GF_EXPORT GF_Err gf_dash_group_set_quality_degradation_hint (GF_DashClient *dash, u32 idx, u32 quality_degradation_hint)
 
static void dash_check_group_visible (GF_DASH_Group *a_group, GF_DASH_Group *par_group, u32 min_x, u32 max_x, u32 min_y, u32 max_y, Bool is_gaze)
 
GF_EXPORT GF_Err gf_dash_group_set_visible_rect (GF_DashClient *dash, u32 idx, u32 min_x, u32 max_x, u32 min_y, u32 max_y, Bool is_gaze)
 
void gf_dash_set_group_download_state (GF_DashClient *dash, u32 idx, u32 cur_dep_idx, GF_Err err)
 
void gf_dash_group_store_stats (GF_DashClient *dash, u32 idx, u32 dep_rep_idx, u32 bytes_per_sec, u64 file_size, Bool is_broadcast, u64 us_since_start)
 
u32 gf_dash_get_min_wait_ms (GF_DashClient *dash)
 
GF_EXPORT Bool gf_dash_all_groups_done (GF_DashClient *dash)
 
GF_EXPORT void gf_dash_set_period_xlink_query_string (GF_DashClient *dash, const char *query_string)
 
GF_EXPORT s32 gf_dash_group_get_as_id (GF_DashClient *dash, u32 group_idx)
 
GF_Err gf_dash_group_push_tfrf (GF_DashClient *dash, u32 group_idx, void *_tfrf, u32 timescale)
 
Bool gf_dash_group_has_init_segment (GF_DashClient *dash, u32 group_idx)
 
void gf_dash_group_get_sar (GF_DashClient *dash, u32 group_idx, GF_Fraction *sar)
 

Data Structure Documentation

◆ segment_cache_entry

struct segment_cache_entry
+ Collaboration diagram for segment_cache_entry:
Data Fields
char * url
u64 start_range
u64 end_range
u32 representation_index
u32 duration
u32 dep_group_idx
char * key_url
bin128 key_IV
u32 seg_number
u64 utc_map
const char * seg_name_start
GF_Fraction64 time
u32 flags

◆ __dash_group

struct __dash_group
+ Collaboration diagram for GF_DASH_Group:
Data Fields
GF_DashClient * dash
GF_MPD_AdaptationSet * adaptation_set
GF_MPD_Period * period
u32 active_rep_index
u32 prev_active_rep_index
Bool timeline_setup
Bool force_timeline_reeval
Bool first_hls_chunk
GF_DASHGroupSelection selection
u32 time_shift_buffer_depth
Bool bitstream_switching
GF_DASH_Group * depend_on_group
Bool done
Bool force_switch_bandwidth
Bool min_bandwidth_selected
u32 active_bitrate
u32 max_bitrate
u32 min_bitrate
u32 min_representation_bitrate
u32 nb_segments_in_rep
u32 index
Double segment_duration
Double start_playback_range
Bool group_setup
Bool was_segment_base
Bool local_files
s32 download_segment_index
u32 nb_segments_purged
u32 nb_retry_on_last_segment
s32 start_number_at_last_ast
u64 ast_at_init
u32 ast_offset
Bool init_segment_is_media
u32 init_segment_start_number
u32 max_cached_segments
u32 nb_cached_segments
segment_cache_entry * cached
u64 bs_switching_init_segment_url_start_range
u64 bs_switching_init_segment_url_end_range
char * bs_switching_init_segment_url
const char * bs_switching_init_segment_url_name_start
u32 nb_segments_done
u32 last_segment_time
u32 nb_segments_since_switch
u32 total_size
u32 bytes_per_sec
u32 bytes_done
u32 backup_Bps
Bool segment_must_be_streamed
Bool broken_timing
u32 maybe_end_of_stream
u32 cache_duration
u32 time_at_first_reload_required
u32 force_representation_idx_plus_one
Bool force_segment_switch
Bool loop_detected
u32 time_at_first_failure
u32 time_at_last_request
Bool prev_segment_ok
Bool segment_in_valid_range
u32 nb_consecutive_segments_lost
u64 retry_after_utc
u64 current_downloaded_segment_duration
char * service_mime
u32 base_rep_index_plus_one
u32 max_complementary_rep_index
u64 current_start_time
u32 current_timescale
u64 current_pto
void * udta
Bool has_pending_enhancement
u32 avg_dec_time
u32 max_dec_time
u32 irap_avg_dec_time
u32 irap_max_dec_time
Bool codec_reset
Bool decode_only_rap
u32 display_width
u32 display_height
u32 max_buffer_playout_ms
u32 buffer_min_ms
u32 buffer_max_ms
u32 buffer_occupancy_ms
u32 buffer_occupancy_at_last_seg
u32 m3u8_start_media_seq
u32 hls_next_seq_num
GF_List * groups_depending_on
u32 current_dep_idx
u32 target_new_rep
u32 srd_x
u32 srd_y
u32 srd_w
u32 srd_h
u32 srd_row_idx
u32 srd_col_idx
struct _dash_srd_desc * srd_desc
u32 current_base_url_idx
u32 quality_degradation_hint
Bool rate_adaptation_postponed
Bool update_tile_qualities
Bool disabled
u32 has_ssr
u32 nb_parts
u32 part_idx
u32 current_index
Bool force_early_fetch
Bool is_low_latency
u32 hint_visible_width
u32 hint_visible_height
GF_MPD_SegmentURL * llhls_edge_chunk
Bool llhls_last_was_merged
s32 llhls_switch_request
u32 last_mpd_change_time
Bool no_init_seg
GF_MPD_Representation * pending_rep
u32 pending_prev_active_rep_index
Bool download_sidx_pending
u32 box_type
u32 box_size
u32 sidx_offset
u32 sidx_start
GF_MPD_Representation * pending_sidx_rep
u32 last_error_time
u32 hls_start_num
GF_List * xas_groups
GF_DASH_Group * xas_base
u32 xas_selected
u32 xas_force_switch
Bool ssr_switch
u32 ssr_shadow_idx_plus_one

◆ _dash_srd_desc

struct _dash_srd_desc
Data Fields
u32 srd_nb_rows
u32 srd_nb_cols
u32 id
u32 width
u32 height
u32 srd_fw
u32 srd_fh

Macro Definition Documentation

◆ M3U8_TO_MPD_USE_TEMPLATE

#define M3U8_TO_MPD_USE_TEMPLATE   0

◆ M3U8_TO_MPD_USE_SEGTIMELINE

#define M3U8_TO_MPD_USE_SEGTIMELINE   0

◆ HLS_MIN_RELOAD_TIME

#define HLS_MIN_RELOAD_TIME (   _dash)    _dash->hls_reload_time = 50 + gf_sys_clock();

◆ GET_REP_ATTR

#define GET_REP_ATTR (   _a)    _a = rep->_a; if (!_a) _a = set->_a;

Enumeration Type Documentation

◆ GF_DASH_STATE

Enumerator
GF_DASH_STATE_STOPPED 
GF_DASH_STATE_SETUP 
GF_DASH_STATE_CONNECTING 
GF_DASH_STATE_RUNNING 
GF_DASH_STATE_CHAIN_NEXT 
GF_DASH_STATE_CHAIN_FALLBACK 

◆ anonymous enum

anonymous enum
Enumerator
GF_DASH_CHAIN_REG 
GF_DASH_CHAIN_PUSH 
GF_DASH_CHAIN_POP 

◆ anonymous enum

anonymous enum
Enumerator
GF_DASH_MCAST_NONE 
GF_DASH_MCAST_INIT 
GF_DASH_MCAST_SYNC_SOURCE 
GF_DASH_MCAST_SYNC_DEFAULT 

◆ anonymous enum

anonymous enum
Enumerator
SEG_FLAG_LOOP_DETECTED 
SEG_FLAG_DEP_FOLLOWING 
SEG_FLAG_DISABLED 

◆ GF_DASHGroupSelection

Enumerator
GF_DASH_GROUP_NOT_SETUP 
GF_DASH_GROUP_NOT_SELECTABLE 
GF_DASH_GROUP_NOT_SELECTED 
GF_DASH_GROUP_SELECTED 

◆ DownloadGroupStatus

Enumerator
GF_DASH_DownloadCancel 
GF_DASH_DownloadRestart 
GF_DASH_DownloadSuccess 

Function Documentation

◆ gf_dash_seek_group()

static void gf_dash_seek_group ( GF_DashClient *  dash,
GF_DASH_Group *  group,
Double  seek_to,
Bool  is_dynamic 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_solve_period_xlink()

static void gf_dash_solve_period_xlink ( GF_DashClient *  dash,
GF_List *  period_list,
u32  period_idx 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ drm_decrypt()

void drm_decrypt ( unsigned char *  data,
unsigned long  dataSize,
const char *  decryptMethod,
const char *  keyfileURL,
const unsigned char *  keyIV 
)

◆ gf_dash_get_active_group()

static GF_DASH_Group* gf_dash_get_active_group ( GF_DashClient *  dash,
u32  idx 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_get_mime_type()

static const char* gf_dash_get_mime_type ( GF_MPD_SubRepresentation subrep,
GF_MPD_Representation rep,
GF_MPD_AdaptationSet set 
)
static
+ Here is the caller graph for this function:

◆ dash_get_fetch_time()

static u64 dash_get_fetch_time ( GF_DashClient *  dash)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_group_count_rep_needed()

static u32 gf_dash_group_count_rep_needed ( GF_DASH_Group *  group)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_check_mpd_root_type()

static u32 gf_dash_check_mpd_root_type ( const char *  local_url)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_get_date()

static GF_Err gf_dash_get_date ( GF_DashClient *  dash,
char *  scheme_id,
char *  url,
u64 utc 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_download_resource()

GF_Err gf_dash_download_resource ( GF_DashClient *  dash,
GF_DASHFileIOSession sess,
const char *  url,
u64  start_range,
u64  end_range,
u32  persistent_mode,
GF_DASH_Group *  group 
)

Download a file with possible retry if GF_IP_CONNECTION_FAILURE|GF_IP_NETWORK_FAILURE (I discovered that with my WIFI connection, I had many issues with BFM-TV downloads) Similar to gf_service_download_new() and gf_dm_sess_process(). Parameters are identical to the ones of gf_service_download_new.

See also
gf_service_download_new()
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_ssr_adjust_group_start()

static void dash_ssr_adjust_group_start ( GF_DASH_Group *  group,
Double  seg_dur,
u32  ssr_parts 
)
static
+ Here is the caller graph for this function:

◆ gf_dash_group_timeline_setup_single()

static void gf_dash_group_timeline_setup_single ( GF_MPD mpd,
GF_DASH_Group *  group,
u64  fetch_time 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_group_timeline_setup()

static void gf_dash_group_timeline_setup ( GF_MPD mpd,
GF_DASH_Group *  group,
u64  fetch_time 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_is_m3u8_mime()

static Bool gf_dash_is_m3u8_mime ( const char *  url,
const char *  mime 
)
static

Returns true if mime type of a given URL is an M3U8 mime-type

Parameters
urlThe url to check
mimeThe mime-type to check
Returns
true if mime-type is OK for M3U8
+ Here is the caller graph for this function:

◆ gf_dash_get_timeline_duration()

static void gf_dash_get_timeline_duration ( GF_MPD mpd,
GF_MPD_Period period,
GF_MPD_SegmentTimeline timeline,
u32  timescale,
u32 nb_segments,
Double max_seg_duration 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_get_segment_duration()

static void gf_dash_get_segment_duration ( GF_MPD_Representation rep,
GF_MPD_AdaptationSet set,
GF_MPD_Period period,
GF_MPD mpd,
u32 nb_segments,
Double max_seg_duration 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_get_segment_start_time_with_timescale()

static u64 gf_dash_get_segment_start_time_with_timescale ( GF_DASH_Group *  group,
u64 segment_duration,
u32 scale,
u64 current_pto 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_get_segment_start_time()

static Double gf_dash_get_segment_start_time ( GF_DASH_Group *  group,
Double segment_duration 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_get_segment_availability_start_time()

static u64 gf_dash_get_segment_availability_start_time ( GF_MPD mpd,
GF_DASH_Group *  group,
u32  segment_index,
u32 seg_dur_ms 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_get_index_in_timeline()

static u32 gf_dash_get_index_in_timeline ( GF_MPD_SegmentTimeline timeline,
u64  segment_start,
u64  start_timescale,
u64  timescale 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_get_timeline_entry()

static GF_MPD_SegmentTimelineEntry* gf_dash_get_timeline_entry ( GF_MPD_SegmentTimeline timeline,
u32  segment_index 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_merge_segment_timeline()

static GF_Err gf_dash_merge_segment_timeline ( GF_DASH_Group *  group,
GF_DashClient *  dash,
GF_MPD_SegmentList old_list,
GF_MPD_SegmentTemplate old_template,
GF_MPD_SegmentList new_list,
GF_MPD_SegmentTemplate new_template,
Double  min_start_time 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_purge_segment_timeline()

static u32 gf_dash_purge_segment_timeline ( GF_DASH_Group *  group,
Double  min_start_time 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_solve_representation_xlink()

static GF_Err gf_dash_solve_representation_xlink ( GF_DashClient *  dash,
GF_MPD_Representation rep,
u8  last_sig[GF_SHA1_DIGEST_SIZE] 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_purge_xlink()

static void dash_purge_xlink ( GF_MPD new_mpd)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_mark_group_done()

static void gf_dash_mark_group_done ( GF_DASH_Group *  group)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_strip_base_url()

static const char* dash_strip_base_url ( const char *  url,
const char *  base_url 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_solve_m3u8_representation_xlink()

static GF_Err gf_dash_solve_m3u8_representation_xlink ( GF_DASH_Group *  group,
GF_MPD_Representation rep,
Bool is_static,
u64 duration,
u8  signature[GF_SHA1_DIGEST_SIZE] 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ls_hls_purge_segments()

static u32 ls_hls_purge_segments ( s32  live_edge_idx,
GF_List *  l 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_check_chaining()

static void dash_check_chaining ( GF_DashClient *  dash,
char *  scheme_id,
char **  chain_ptr,
u32  stack_state 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_update_manifest()

static GF_Err gf_dash_update_manifest ( GF_DashClient *  dash)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ m3u8_setup_timeline()

static void m3u8_setup_timeline ( GF_DASH_Group *  group,
GF_MPD_Representation rep 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_resolve_url()

static GF_Err gf_dash_resolve_url ( GF_MPD mpd,
GF_MPD_Representation rep,
GF_DASH_Group *  group,
const char *  mpd_url,
GF_MPD_URLResolveType  resolve_type,
u32  item_index,
char **  out_url,
u64 out_range_start,
u64 out_range_end,
u64 segment_duration,
Bool is_in_base_url,
char **  out_key_url,
bin128 out_key_iv,
Bool data_url_process,
u32 out_start_number 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_set_group_representation()

static void gf_dash_set_group_representation ( GF_DASH_Group *  group,
GF_MPD_Representation rep 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_switch_group_representation()

static void gf_dash_switch_group_representation ( GF_DashClient *  mpd,
GF_DASH_Group *  group 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_get_max_available_speed()

static Double gf_dash_get_max_available_speed ( GF_DashClient *  dash,
GF_DASH_Group *  group,
GF_MPD_Representation rep 
)
static
+ Here is the caller graph for this function:

◆ dash_store_stats()

static void dash_store_stats ( GF_DashClient *  dash,
GF_DASH_Group *  group,
u32  bytes_per_sec,
u32  file_size,
Bool  is_broadcast,
u32  cur_dep_idx,
u64  us_since_start 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_do_rate_monitor_default()

static s32 dash_do_rate_monitor_default ( GF_DashClient *  dash,
GF_DASH_Group *  group,
u32  bits_per_sec,
u64  total_bytes,
u64  bytes_done,
u64  us_since_start,
u32  buffer_dur_ms,
u32  current_seg_dur 
)
static
+ Here is the caller graph for this function:

◆ dash_do_rate_adaptation_legacy_rate()

static s32 dash_do_rate_adaptation_legacy_rate ( GF_DashClient *  dash,
GF_DASH_Group *  group,
GF_DASH_Group *  base_group,
u32  dl_rate,
Double  speed,
Double  max_available_speed,
Bool  force_lower_complexity,
GF_MPD_Representation rep,
Bool  go_up_bitrate 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_do_rate_adaptation_legacy_buffer()

static s32 dash_do_rate_adaptation_legacy_buffer ( GF_DashClient *  dash,
GF_DASH_Group *  group,
GF_DASH_Group *  base_group,
u32  dl_rate,
Double  speed,
Double  max_available_speed,
Bool  force_lower_complexity,
GF_MPD_Representation rep,
Bool  go_up_bitrate 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_min_rate_above()

static u32 get_min_rate_above ( GF_List *  representations,
double  rate,
s32 index 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_max_rate_below()

static u32 get_max_rate_below ( GF_List *  representations,
double  rate,
s32 index 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_do_rate_adaptation_bba0()

static s32 dash_do_rate_adaptation_bba0 ( GF_DashClient *  dash,
GF_DASH_Group *  group,
GF_DASH_Group *  base_group,
u32  dl_rate,
Double  speed,
Double  max_available_speed,
Bool  force_lower_complexity,
GF_MPD_Representation rep,
Bool  go_up_bitrate 
)
static

Adaptation Algorithm as described in T.-Y. Huang et al. 2014. A buffer-based approach to rate adaptation: evidence from a large video streaming service. In Proceedings of the 2014 ACM conference on SIGCOMM (SIGCOMM '14).

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ bola_find_max_utility_index()

static s32 bola_find_max_utility_index ( GF_List *  representations,
Double  V,
Double  gamma,
Double  p,
Double  Q 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_do_rate_adaptation_bola()

static s32 dash_do_rate_adaptation_bola ( GF_DashClient *  dash,
GF_DASH_Group *  group,
GF_DASH_Group *  base_group,
u32  dl_rate,
Double  speed,
Double  max_available_speed,
Bool  force_lower_complexity,
GF_MPD_Representation rep,
Bool  go_up_bitrate 
)
static

Adaptation Algorithm as described in K. Spiteri et al. 2016. BOLA: Near-Optimal Bitrate Adaptation for Online Videos Arxiv.org

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_do_rate_adaptation()

static void dash_do_rate_adaptation ( GF_DashClient *  dash,
GF_DASH_Group *  group 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_get_fileio_url()

static char* gf_dash_get_fileio_url ( const char *  base_url,
char *  res_url 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_download_init_segment()

static GF_Err gf_dash_download_init_segment ( GF_DashClient *  dash,
GF_DASH_Group *  group 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_skip_disabled_representation()

static void gf_dash_skip_disabled_representation ( GF_DASH_Group *  group,
GF_MPD_Representation rep,
Bool  for_autoswitch 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_group_reset_cache_entry()

static void gf_dash_group_reset_cache_entry ( segment_cache_entry cached)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_group_reset()

static void gf_dash_group_reset ( GF_DashClient *  dash,
GF_DASH_Group *  group 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_reset_groups()

static void gf_dash_reset_groups ( GF_DashClient *  dash)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_get_start_number()

static u32 gf_dash_get_start_number ( GF_DASH_Group *  group,
GF_MPD_Representation rep 
)
static
+ Here is the caller graph for this function:

◆ gf_dash_find_rep()

static GF_MPD_Representation* gf_dash_find_rep ( GF_DashClient *  dash,
const char *  dependency_id,
GF_DASH_Group **  rep_group 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_group_get_dependency_group()

static s32 gf_dash_group_get_dependency_group ( GF_DashClient *  dash,
u32  idx 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_get_base_group_index()

GF_EXPORT s32 gf_dash_get_base_group_index ( GF_DashClient *  dash,
u32  idx 
)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_setup_groups()

GF_Err gf_dash_setup_groups ( GF_DashClient *  dash)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_load_sidx()

static GF_Err gf_dash_load_sidx ( GF_BitStream *  bs,
GF_MPD_Representation rep,
Bool  separate_index,
u64  sidx_offset 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_load_representation_sidx()

static GF_Err gf_dash_load_representation_sidx ( GF_DASH_Group *  group,
GF_MPD_Representation rep,
const char *  cache_name,
Bool  separate_index,
Bool  needs_mov_range 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_load_box_type()

static GF_Err dash_load_box_type ( const char *  cache_name,
u32  offset,
u32 box_type,
u32 box_size 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_mpd_segment_template_free()

void gf_mpd_segment_template_free ( void *  _item)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_setup_single_index_mode()

static GF_Err gf_dash_setup_single_index_mode ( GF_DASH_Group *  group)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_get_tiles_quality_rank()

static u32 gf_dash_get_tiles_quality_rank ( GF_DashClient *  dash,
GF_DASH_Group *  tile_group 
)
static
+ Here is the caller graph for this function:

◆ gf_dash_set_tiles_quality()

static void gf_dash_set_tiles_quality ( GF_DashClient *  dash,
struct _dash_srd_desc srd,
Bool  force_all 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_get_srd_desc()

static struct _dash_srd_desc* gf_dash_get_srd_desc ( GF_DashClient *  dash,
u32  srd_id,
Bool  do_create 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_check_supported_mime()

static GF_Err dash_check_supported_mime ( GF_MPD_Period period)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_setup_period()

static GF_Err gf_dash_setup_period ( GF_DashClient *  dash)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_group_check_time()

static void gf_dash_group_check_time ( GF_DASH_Group *  group)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_download_group_download()

static DownloadGroupStatus dash_download_group_download ( GF_DashClient *  dash,
GF_DASH_Group *  group,
GF_DASH_Group *  base_group,
Bool  has_dep_following 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_set_min_wait()

static GFINLINE void dash_set_min_wait ( GF_DashClient *  dash,
u32  min_wait 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ on_group_download_error()

static DownloadGroupStatus on_group_download_error ( GF_DashClient *  dash,
GF_DASH_Group *  group,
GF_DASH_Group *  base_group,
GF_Err  e,
GF_MPD_Representation rep,
char *  new_base_seg_url,
char *  key_url,
Bool  has_dep_following 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_download_group()

static DownloadGroupStatus dash_download_group ( GF_DashClient *  dash,
GF_DASH_Group *  group,
GF_DASH_Group *  base_group,
Bool  has_dep_following 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_global_rate_adaptation()

static void dash_global_rate_adaptation ( GF_DashClient *  dash,
Bool  for_postponed_only 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_setup_period_and_groups()

static GF_Err dash_setup_period_and_groups ( GF_DashClient *  dash)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_do_groups()

static void dash_do_groups ( GF_DashClient *  dash)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_check_mpd_update_and_cache()

static GF_Err dash_check_mpd_update_and_cache ( GF_DashClient *  dash,
Bool cache_is_full 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_check_periods()

static GF_Err gf_dash_check_periods ( GF_DashClient *  dash)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_seek_periods()

static Bool gf_dash_seek_periods ( GF_DashClient *  dash,
Double  seek_time 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_process_internal()

static GF_Err gf_dash_process_internal ( GF_DashClient *  dash)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_period_index_from_time()

static u32 gf_dash_period_index_from_time ( GF_DashClient *  dash,
u64  time 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gather_ssr_rep()

static void gather_ssr_rep ( GF_DASH_Group *  group,
GF_List *  select 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_seek_groups()

static void gf_dash_seek_groups ( GF_DashClient *  dash,
Double  seek_time,
Bool  is_dynamic 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ http_ifce_get()

static GF_Err http_ifce_get ( GF_FileDownload *  getter,
char *  url 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ http_ifce_clean()

static void http_ifce_clean ( GF_FileDownload *  getter)
static
+ Here is the caller graph for this function:

◆ http_ifce_cache_name()

static const char* http_ifce_cache_name ( GF_FileDownload *  getter)
static
+ Here is the caller graph for this function:

◆ http_ifce_get_status()

static GF_Err http_ifce_get_status ( GF_FileDownload *  getter)
static
+ Here is the caller graph for this function:

◆ dash_do_rate_adaptation_custom()

static s32 dash_do_rate_adaptation_custom ( GF_DashClient *  dash,
GF_DASH_Group *  group,
GF_DASH_Group *  base_group,
u32  dl_rate,
Double  speed,
Double  max_available_speed,
Bool  force_lower_complexity,
GF_MPD_Representation rep,
Bool  go_up_bitrate 
)
static
+ Here is the caller graph for this function:

◆ dash_do_rate_monitor_custom()

static s32 dash_do_rate_monitor_custom ( GF_DashClient *  dash,
GF_DASH_Group *  group,
u32  bits_per_sec,
u64  total_bytes,
u64  bytes_done,
u64  us_since_start,
u32  buffer_dur_ms,
u32  current_seg_dur 
)
static
+ Here is the caller graph for this function:

◆ gf_dash_group_get_clearkey_uri()

const char* gf_dash_group_get_clearkey_uri ( GF_DashClient *  dash,
u32  group_idx,
bin128 default_kid 
)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_group_discard_segment_internal()

static void gf_dash_group_discard_segment_internal ( GF_DashClient *  dash,
GF_DASH_Group *  group 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_get_group_for_quality()

static GF_DASH_Group* dash_get_group_for_quality ( GF_DashClient *  dash,
u32  idx,
u32 quality_idx 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ gf_dash_group_enum_descriptor_list()

static Bool gf_dash_group_enum_descriptor_list ( GF_DashClient *  dash,
u32  idx,
GF_List *  descs,
const char **  desc_id,
const char **  desc_scheme,
const char **  desc_value 
)
static
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ dash_check_group_visible()

static void dash_check_group_visible ( GF_DASH_Group *  a_group,
GF_DASH_Group *  par_group,
u32  min_x,
u32  max_x,
u32  min_y,
u32  max_y,
Bool  is_gaze 
)
static
+ Here is the caller graph for this function:

◆ gf_dash_group_push_tfrf()

GF_Err gf_dash_group_push_tfrf ( GF_DashClient *  dash,
u32  group_idx,
void *  _tfrf,
u32  timescale 
)
+ Here is the call graph for this function:
+ Here is the caller graph for this function: