![]()  | 
  
    libgpac
    
   Documentation of the core library of GPAC 
   | 
  
 Collaboration diagram for Fragmented ISOBMFF Writing:Macros | |
| #define | GF_ISOM_FRAG_DEF_IS_SYNC 1 | 
| #define | GF_ISOM_FRAG_USE_SYNC_TABLE (1<<1) | 
Functions | |
| GF_Err | gf_isom_setup_track_fragment (GF_ISOFile *isom_file, GF_ISOTrackID TrackID, u32 DefaultSampleDescriptionIndex, u32 DefaultSampleDuration, u32 DefaultSampleSize, u8 DefaultSampleSyncFlags, u8 DefaultSamplePadding, u16 DefaultDegradationPriority, Bool force_traf_flags) | 
| GF_Err | gf_isom_change_track_fragment_defaults (GF_ISOFile *isom_file, GF_ISOTrackID TrackID, u32 DefaultSampleDescriptionIndex, u32 DefaultSampleDuration, u32 DefaultSampleSize, u8 DefaultSampleIsSync, u8 DefaultSamplePadding, u16 DefaultDegradationPriority, u8 force_traf_flags) | 
| GF_Err | gf_isom_finalize_for_fragment (GF_ISOFile *isom_file, u32 media_segment_type, Bool mvex_after_tracks) | 
| GF_Err | gf_isom_set_movie_duration (GF_ISOFile *isom_file, u64 duration, Bool remove_mehd) | 
| GF_Err | gf_isom_start_fragment (GF_ISOFile *isom_file, GF_ISOStartFragmentFlags moof_first) | 
| GF_Err | gf_isom_start_segment (GF_ISOFile *isom_file, const char *SegName, Bool memory_mode) | 
| GF_Err | gf_isom_set_traf_base_media_decode_time (GF_ISOFile *isom_file, GF_ISOTrackID TrackID, u64 decode_time) | 
| GF_Err | gf_isom_enable_mfra (GF_ISOFile *isom_file) | 
| GF_Err | gf_isom_set_traf_mss_timeext (GF_ISOFile *isom_file, GF_ISOTrackID reference_track_ID, u64 decode_traf_time, u64 traf_duration) | 
| GF_Err | gf_isom_close_segment (GF_ISOFile *isom_file, s32 subsegs_per_sidx, GF_ISOTrackID referenceTrackID, u64 ref_track_decode_time, s32 timestamp_shift, u64 ref_track_next_cts, Bool daisy_chain_sidx, Bool use_ssix, Bool last_segment, Bool close_segment_handle, u32 segment_marker_4cc, u64 *index_start_range, u64 *index_end_range, u64 *out_seg_size) | 
| GF_Err | gf_isom_flush_fragments (GF_ISOFile *isom_file, Bool last_segment) | 
| GF_Err | gf_isom_set_fragment_reference_time (GF_ISOFile *isom_file, GF_ISOTrackID reference_track_ID, u64 ntp, u64 timestamp, Bool at_mux) | 
| GF_Err | gf_isom_allocate_sidx (GF_ISOFile *isom_file, s32 subsegs_per_sidx, Bool daisy_chain_sidx, u32 nb_segs, u32 *frags_per_segment, u32 *start_range, u32 *end_range, Bool use_ssix) | 
| GF_Err | gf_isom_setup_track_fragment_template (GF_ISOFile *isom_file, GF_ISOTrackID TrackID, u8 *boxes, u32 boxes_size, u8 force_traf_flags) | 
| GF_Err | gf_isom_set_fragment_original_duration (GF_ISOFile *isom_file, GF_ISOTrackID TrackID, u32 orig_dur, u32 elapsed_dur) | 
| GF_Err | gf_isom_set_fragment_option (GF_ISOFile *isom_file, GF_ISOTrackID TrackID, GF_ISOTrackFragmentOption Code, u32 param) | 
| GF_Err | gf_isom_fragment_add_sample (GF_ISOFile *isom_file, GF_ISOTrackID TrackID, const GF_ISOSample *sample, u32 sampleDescriptionIndex, u32 Duration, u8 PaddingBits, u16 DegradationPriority, Bool redundantCoding) | 
| GF_Err | gf_isom_fragment_append_data (GF_ISOFile *isom_file, GF_ISOTrackID TrackID, u8 *data, u32 data_size, u8 PaddingBits) | 
| GF_Err | gf_isom_fragment_set_cenc_sai (GF_ISOFile *isom_file, GF_ISOTrackID trackID, u8 *sai_b, u32 sai_b_size, Bool use_subsample, Bool use_saio_32bit, Bool use_multikey) | 
| GF_Err | gf_isom_clone_pssh (GF_ISOFile *dst_file, GF_ISOFile *src_file, Bool in_moof) | 
| GF_Err | gf_isom_fragment_set_sample_roll_group (GF_ISOFile *isom_file, GF_ISOTrackID trackID, u32 sample_number, GF_ISOSampleRollType roll_type, s16 roll_distance) | 
| GF_Err | gf_isom_fragment_set_sample_rap_group (GF_ISOFile *isom_file, GF_ISOTrackID trackID, u32 sample_number_in_frag, Bool is_rap, u32 num_leading_samples) | 
| GF_Err | gf_isom_fragment_set_sample_flags (GF_ISOFile *isom_file, GF_ISOTrackID trackID, u32 is_leading, u32 dependsOn, u32 dependedOn, u32 redundant) | 
| GF_Err | gf_isom_fragment_set_sample_aux_info (GF_ISOFile *isom_file, u32 trackID, u32 sample_number_in_frag, u32 aux_type, u32 aux_info, u8 *data, u32 size) | 
| void | gf_isom_set_next_moof_number (GF_ISOFile *isom_file, u32 value) | 
                    Movie Fragments Writing API
            Movie Fragments is a feature of ISO media files for fragmentation
    of a presentation meta-data and interleaving with its media data.
    This enables faster http fast start for big movies, and also reduces the risk
    of data loss in case of a recording crash, because meta data and media data
    can be written to disk at regular times
            This API provides simple function calls to setup such a movie and write it
    The process implies:
            1- creating a movie in the usual way (track, stream descriptions, (IOD setup
    copyright, ...)
            2- possibly add some samples in the regular fashion
            3- setup track fragments for all track that will be written in a fragmented way
    (note that you can create/write a track that has no fragmentation at all)
            4- finalize the movie for fragmentation (this will flush all meta-data and
    any media-data added to disk, ensuring all vital information for the presentation
    is stored on file and not lost in case of crash/poweroff)
      then 5-6 as often as desired
            5- start a new movie fragment
            6- add samples to each setup track
IMPORTANT NOTES: Movie Fragments can only be used in GF_ISOM_OPEN_WRITE mode (capturing) and no editing functionalities can be used the fragmented movie API uses TrackID and not TrackNumber
| #define GF_ISOM_FRAG_DEF_IS_SYNC 1 | 
flag indicating default samples are sync
| #define GF_ISOM_FRAG_USE_SYNC_TABLE (1<<1) | 
flag indicating a sync sample table shall be added in the track - cf CMAF rules
Track fragment options
| GF_Err gf_isom_setup_track_fragment | ( | GF_ISOFile * | isom_file, | 
| GF_ISOTrackID | TrackID, | ||
| u32 | DefaultSampleDescriptionIndex, | ||
| u32 | DefaultSampleDuration, | ||
| u32 | DefaultSampleSize, | ||
| u8 | DefaultSampleSyncFlags, | ||
| u8 | DefaultSamplePadding, | ||
| u16 | DefaultDegradationPriority, | ||
| Bool | force_traf_flags | ||
| ) | 
sets up a track for fragmentation by specifying some default values for storage efficiency
| isom_file | the target ISO file | 
| TrackID | ID of the target track | 
| DefaultSampleDescriptionIndex | the default description used by samples in this track | 
| DefaultSampleDuration | default duration of samples in this track | 
| DefaultSampleSize | default size of samples in this track (0 if unknown) | 
| DefaultSampleSyncFlags | combination of GF_ISOM_FRAG_* flags | 
| DefaultSamplePadding | default padding bits for samples in this track | 
| DefaultDegradationPriority | default degradation priority for samples in this track | 
| force_traf_flags | if GF_TRUE, will ignore these default in each traf but will still write them in moov | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| GF_Err gf_isom_change_track_fragment_defaults | ( | GF_ISOFile * | isom_file, | 
| GF_ISOTrackID | TrackID, | ||
| u32 | DefaultSampleDescriptionIndex, | ||
| u32 | DefaultSampleDuration, | ||
| u32 | DefaultSampleSize, | ||
| u8 | DefaultSampleIsSync, | ||
| u8 | DefaultSamplePadding, | ||
| u16 | DefaultDegradationPriority, | ||
| u8 | force_traf_flags | ||
| ) | 
changes the default parameters of an existing trak fragment
| isom_file | the target ISO file | 
| TrackID | ID of the target track | 
| DefaultSampleDescriptionIndex | the default description used by samples in this track | 
| DefaultSampleDuration | default duration of samples in this track | 
| DefaultSampleSize | default size of samples in this track (0 if unknown) | 
| DefaultSampleIsSync | default key-flag (RAP) of samples in this track | 
| DefaultSamplePadding | default padding bits for samples in this track | 
| DefaultDegradationPriority | default degradation priority for samples in this track | 
| force_traf_flags | if GF_TRUE, will ignore these default in each traf but will still write them in moov | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| GF_Err gf_isom_finalize_for_fragment | ( | GF_ISOFile * | isom_file, | 
| u32 | media_segment_type, | ||
| Bool | mvex_after_tracks | ||
| ) | 
flushes data to disk and prepare movie fragmentation
| isom_file | the target ISO file | 
| media_segment_type | 0 if no segments, 1 if regular segment, 2 if single segment | 
| mvex_after_tracks | forces writing mvex box after track boxes | 
 Here is the call graph for this function:
 Here is the caller graph for this function:sets the duration of the movie in case of movie fragments
| isom_file | the target ISO file | 
| duration | the complete duration (movie and all fragments) in movie timescale | 
| remove_mehd | force removal of mehd box, only setting mvhd.duration to 0 | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| GF_Err gf_isom_start_fragment | ( | GF_ISOFile * | isom_file, | 
| GF_ISOStartFragmentFlags | moof_first | ||
| ) | 
starts a new movie fragment
| isom_file | the target ISO file | 
| moof_first | if GF_TRUE, the moof will be written before the mdat | 
 Here is the call graph for this function:
 Here is the caller graph for this function:starts a new segment in the file
| isom_file | the target ISO file | 
| SegName | if not NULL, the output will be written in the SegName file. If NULL, segment will be created in same file as movie. The special name "_gpac_isobmff_redirect" is used to indicate that segment shall be written to a memory buffer passed to callback function set through gf_isom_set_write_callback | 
| memory_mode | if set, all samples writing is done in memory rather than on disk. Ignored in callback mode | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| GF_Err gf_isom_set_traf_base_media_decode_time | ( | GF_ISOFile * | isom_file, | 
| GF_ISOTrackID | TrackID, | ||
| u64 | decode_time | ||
| ) | 
sets the baseMediaDecodeTime of the first sample of the given track
| isom_file | the target ISO file | 
| TrackID | ID of the target track | 
| decode_time | the decode time in media timescale | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| GF_Err gf_isom_enable_mfra | ( | GF_ISOFile * | isom_file | ) | 
enables mfra (movie fragment random access computing) when writing movie fragments
| isom_file | the target ISO file | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| GF_Err gf_isom_set_traf_mss_timeext | ( | GF_ISOFile * | isom_file, | 
| GF_ISOTrackID | reference_track_ID, | ||
| u64 | decode_traf_time, | ||
| u64 | traf_duration | ||
| ) | 
sets Microsoft Smooth Streaming traf 'tfxd' box info, written at the end of each traf
| isom_file | the target ISO file | 
| reference_track_ID | ID of the reference track giving the media timescale | 
| decode_traf_time | decode time of the first sample in the segment in media timescale (hardcoded to 10MHz in Smooth) | 
| traf_duration | duration of all samples in the traf in media timescale (hardcoded to 10MHz in Smooth) | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| GF_Err gf_isom_close_segment | ( | GF_ISOFile * | isom_file, | 
| s32 | subsegs_per_sidx, | ||
| GF_ISOTrackID | referenceTrackID, | ||
| u64 | ref_track_decode_time, | ||
| s32 | timestamp_shift, | ||
| u64 | ref_track_next_cts, | ||
| Bool | daisy_chain_sidx, | ||
| Bool | use_ssix, | ||
| Bool | last_segment, | ||
| Bool | close_segment_handle, | ||
| u32 | segment_marker_4cc, | ||
| u64 * | index_start_range, | ||
| u64 * | index_end_range, | ||
| u64 * | out_seg_size | ||
| ) | 
closes current segment, producing a segment index box if desired
| isom_file | the target ISO file | 
| subsegs_per_sidx | number of subsegments per sidx box; a negative value disables sidx, 0 forces a single sidx for the segment (or subsegment) | 
| referenceTrackID | the ID of the track used as a reference for the segment index box | 
| ref_track_decode_time | the decode time fo the first sample in the reference track for this segment | 
| timestamp_shift | the constant difference between media time and presentation time (derived from edit list) | 
| ref_track_next_cts | the CTS of the first sample in the reference track in the next segment | 
| daisy_chain_sidx | if GF_TRUE, indicates chained sidx shall be used. Otherwise, an array of indexes is used | 
| use_ssix | if GF_TRUE, produces an ssix box using I-frames as first level and all other frames as second level | 
| last_segment | indicates if this is the last segment of the session | 
| close_segment_handle | if set to GF_TRUE, the associated file if any will be closed | 
| segment_marker_4cc | a four character code used to insert an empty box at the end of the saegment with the given type. If 0, no such box is inserted | 
| index_start_range | set to the start offset in bytes of the segment in the media file | 
| index_end_range | set to the end offset in bytes of the segment in the media file | 
| out_seg_size | set to the segment size in bytes (optional, can be NULL) | 
 Here is the call graph for this function:
 Here is the caller graph for this function:writes any pending fragment to file for low-latency output.
| isom_file | the target ISO file | 
| last_segment | indicates if this is the last segment of the session | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| GF_Err gf_isom_set_fragment_reference_time | ( | GF_ISOFile * | isom_file, | 
| GF_ISOTrackID | reference_track_ID, | ||
| u64 | ntp, | ||
| u64 | timestamp, | ||
| Bool | at_mux | ||
| ) | 
sets fragment prft box info, written just before the moof
| isom_file | the target ISO file | 
| reference_track_ID | the ID of the track used as a reference for media timestamps | 
| ntp | absolute NTP time | 
| timestamp | media time corresponding to the NTP time, in reference track media timescale | 
| at_mux | whether the box should also contain the ntp time of when the movie fragment is written | 
 Here is the caller graph for this function:| GF_Err gf_isom_allocate_sidx | ( | GF_ISOFile * | isom_file, | 
| s32 | subsegs_per_sidx, | ||
| Bool | daisy_chain_sidx, | ||
| u32 | nb_segs, | ||
| u32 * | frags_per_segment, | ||
| u32 * | start_range, | ||
| u32 * | end_range, | ||
| Bool | use_ssix | ||
| ) | 
writes an empty sidx in the current movie.
The SIDX will be forced to have nb_segs entries, and nb_segs shall match the number of calls to gf_isom_close_segment that will follow. This avoids wasting time and disk space moving data around. Once gf_isom_close_segment has then been called nb_segs times, the pre-allocated SIDX is destroyed and successive calls to gf_isom_close_segment will create their own sidx, unless gf_isom_allocate_sidx is called again.
| isom_file | the target ISO file | 
| subsegs_per_sidx | reserved to 0, currently ignored | 
| daisy_chain_sidx | reserved to 0, currently ignored | 
| nb_segs | number of entries in the segment index | 
| frags_per_segment | reserved, currently ignored | 
| start_range | set to the start offset in bytes of the segment index box | 
| end_range | set to the end offset in bytes of the segment index box | 
| use_ssix | if GF_TRUE, produces an ssix box using I-frames as first level and all other frames as second level | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| GF_Err gf_isom_setup_track_fragment_template | ( | GF_ISOFile * | isom_file, | 
| GF_ISOTrackID | TrackID, | ||
| u8 * | boxes, | ||
| u32 | boxes_size, | ||
| u8 | force_traf_flags | ||
| ) | 
sets up track fragment defaults using the given template. The template shall be a serialized array of one or more trex boxes
| isom_file | the target ISO file | 
| TrackID | ID of the target track | 
| boxes | serialized array of trex boxes | 
| boxes_size | size of the serialized array | 
| force_traf_flags | if GF_TRUE, will ignore these default in each traf but will still write them in moov | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| GF_Err gf_isom_set_fragment_original_duration | ( | GF_ISOFile * | isom_file, | 
| GF_ISOTrackID | TrackID, | ||
| u32 | orig_dur, | ||
| u32 | elapsed_dur | ||
| ) | 
sets up track fragment defaults using the given template. The template shall be a serialized array of one or more trex boxes
| isom_file | the target ISO file | 
| TrackID | ID of the target track | 
| orig_dur | last sample original duration | 
| elapsed_dur | first sample elapsed duration | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| GF_Err gf_isom_set_fragment_option | ( | GF_ISOFile * | isom_file, | 
| GF_ISOTrackID | TrackID, | ||
| GF_ISOTrackFragmentOption | Code, | ||
| u32 | param | ||
| ) | 
sets a track fragment option. Options can be set at the beginning of each new fragment only, and for the lifetime of the fragment
| isom_file | the target ISO file | 
| TrackID | ID of the target track | 
| Code | the option type to set | 
| param | the option value | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| GF_Err gf_isom_fragment_add_sample | ( | GF_ISOFile * | isom_file, | 
| GF_ISOTrackID | TrackID, | ||
| const GF_ISOSample * | sample, | ||
| u32 | sampleDescriptionIndex, | ||
| u32 | Duration, | ||
| u8 | PaddingBits, | ||
| u16 | DegradationPriority, | ||
| Bool | redundantCoding | ||
| ) | 
adds a sample to a fragmented track
| isom_file | the target ISO file | 
| TrackID | destination track | 
| sample | sample to add | 
| sampleDescriptionIndex | sample description for this sample. If 0, the default one is used | 
| Duration | sample duration; the sample duration MUST be provided at least for the last sample (for intermediate samples, it is recomputed internally by the lib) | 
| PaddingBits | padding bits for the sample, or 0 | 
| DegradationPriority | for the sample, or 0 | 
| redundantCoding | indicates this is samples acts as a sync shadow point | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| GF_Err gf_isom_fragment_append_data | ( | GF_ISOFile * | isom_file, | 
| GF_ISOTrackID | TrackID, | ||
| u8 * | data, | ||
| u32 | data_size, | ||
| u8 | PaddingBits | ||
| ) | 
appends data into last sample of track for video fragments/other media
| isom_file | the target ISO file | 
| TrackID | destination track | 
| data | the data to append | 
| data_size | the size of the data to append | 
| PaddingBits | padding bits for the sample, or 0 | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| GF_Err gf_isom_fragment_set_cenc_sai | ( | GF_ISOFile * | isom_file, | 
| GF_ISOTrackID | trackID, | ||
| u8 * | sai_b, | ||
| u32 | sai_b_size, | ||
| Bool | use_subsample, | ||
| Bool | use_saio_32bit, | ||
| Bool | use_multikey | ||
| ) | 
sets side information for common encryption for the last added sample
| isom_file | the target ISO file | 
| trackID | the ID of the target track | 
| sai_b | buffer containing the SAI information of the sample | 
| sai_b_size | size of the SAI buffer. If sai_b is NULL or sai_b_size is 0, add a clear SAI data | 
| use_subsample | indicates if the media uses CENC subsamples | 
| use_saio_32bit | indicates if 32-bit saio shall be used | 
| use_multikey | indicates if multikey is in use (required to tag saiz/saio boxes) | 
 Here is the call graph for this function:
 Here is the caller graph for this function:clones PSSH data between two files
| dst_file | the target ISO file | 
| src_file | the source ISO file | 
| in_moof | if GF_TRUE, indicates the pssh should be cloned in current moof box | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| GF_Err gf_isom_fragment_set_sample_roll_group | ( | GF_ISOFile * | isom_file, | 
| GF_ISOTrackID | trackID, | ||
| u32 | sample_number, | ||
| GF_ISOSampleRollType | roll_type, | ||
| s16 | roll_distance | ||
| ) | 
sets roll information for a sample in a track fragment
| isom_file | the target ISO file | 
| trackID | the ID of the target track | 
| sample_number | the sample number of the last sample | 
| roll_type | indicate the sample roll type | 
| roll_distance | set to the roll distance for a roll sample | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| GF_Err gf_isom_fragment_set_sample_rap_group | ( | GF_ISOFile * | isom_file, | 
| GF_ISOTrackID | trackID, | ||
| u32 | sample_number_in_frag, | ||
| Bool | is_rap, | ||
| u32 | num_leading_samples | ||
| ) | 
sets rap information for a sample in a track fragment
| isom_file | the target ISO file | 
| trackID | the ID of the target track | 
| sample_number_in_frag | the sample number of the sample in the traf | 
| is_rap | set to GF_TRUE to indicate the sample is a RAP sample (open-GOP), GF_FALSE otherwise | 
| num_leading_samples | set to the number of leading pictures for a RAP sample | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| GF_Err gf_isom_fragment_set_sample_flags | ( | GF_ISOFile * | isom_file, | 
| GF_ISOTrackID | trackID, | ||
| u32 | is_leading, | ||
| u32 | dependsOn, | ||
| u32 | dependedOn, | ||
| u32 | redundant | ||
| ) | 
sets sample dependency flags in a track fragment - see ISO/IEC 14496-12 and gf_filter_pck_set_dependency_flags
| isom_file | the target ISO file | 
| trackID | the ID of the target track | 
| is_leading | indicates that the sample is a leading picture | 
| dependsOn | indicates the sample dependency towards other samples | 
| dependedOn | indicates the sample dependency from other samples | 
| redundant | indicates that the sample contains redundant coding | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| GF_Err gf_isom_fragment_set_sample_aux_info | ( | GF_ISOFile * | isom_file, | 
| u32 | trackID, | ||
| u32 | sample_number_in_frag, | ||
| u32 | aux_type, | ||
| u32 | aux_info, | ||
| u8 * | data, | ||
| u32 | size | ||
| ) | 
adds sample auxiliary data
| isom_file | the target ISO file | 
| trackID | the ID of the target track | 
| sample_number_in_frag | the sample number in the current fragment. Must be equal or larger to last auxiliary added | 
| aux_type | auxiliary sample data type, shall not be 0 | 
| aux_info | auxiliary sample data specific info type, may be 0 | 
| data | data to add | 
| size | size of data to add | 
 Here is the call graph for this function:
 Here is the caller graph for this function:| void gf_isom_set_next_moof_number | ( | GF_ISOFile * | isom_file, | 
| u32 | value | ||
| ) | 
sets the number of the next moof to be produced
| isom_file | the target ISO file | 
| value | the number of the next moof | 
 Here is the caller graph for this function: