📄 media_tools.h
字号:
/* * GPAC - Multimedia Framework C SDK * * Copyright (c) Jean Le Feuvre 2000-2005 * All rights reserved * * This file is part of GPAC / Authoring Tools sub-project * * GPAC is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * GPAC is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; see the file COPYING. If not, write to * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * */#ifndef _GF_MEDIA_H_#define _GF_MEDIA_H_#ifdef __cplusplusextern "C" {#endif#include <gpac/isomedia.h>#include <gpac/avparse.h>/* track importers All these can import a file into a dedicated track. If esd is NULL the track is blindly added otherwise it is added with the requested ESID if non-0, otherwise the new trackID is stored in ESID if use_data_ref is set, data is only referenced in the file if duration is not 0, only the first duration seconds are imported NOTE: if an ESD is specified, its decoderSpecificInfo is also updated*//*track importer flags*/enum{ /*references data rather than copy, whenever possible*/ GF_IMPORT_USE_DATAREF = 1, /*for AVI video: imports at constant FPS (eg imports N-Vops due to encoder drops)*/ GF_IMPORT_NO_FRAME_DROP = 1<<1, /*for CMP ASP only: forces treating the input as packed bitsream and discards all n-vops*/ GF_IMPORT_FORCE_PACKED = 1<<2, /*for AAC audio: forces SBR mode with implicit signaling (backward compatible)*/ GF_IMPORT_SBR_IMPLICIT = 1<<3, /*for AAC audio: forces SBR mode with explicit signaling (non-backward compatible). Will override GF_IMPORT_SBR_IMPLICIT flag when set*/ GF_IMPORT_SBR_EXPLICIT = 1<<4, /*forces MPEG-4 import - some 3GP2 streams have both native IsoMedia sample description and MPEG-4 one possible*/ GF_IMPORT_FORCE_MPEG4 = 1<<5, /*special flag for text import at run time (never set on probe), indicates to leave the text box empty so that we dynamically adapt to display size*/ GF_IMPORT_SKIP_TXT_BOX = 1<<6, /*indicates to keep unknown tracks from .MOV/.IsoMedia files*/ GF_IMPORT_KEEP_ALL_TRACKS = 1<<7, /*uses compact size in .MOV/.IsoMedia files*/ GF_IMPORT_USE_COMPACT_SIZE = 1<<8, /*when set, only updates tracks info and return*/ GF_IMPORT_PROBE_ONLY = 1<<20, /*only set when probing, signals several frames per sample possible*/ GF_IMPORT_3GPP_AGGREGATION = 1<<21, /*only set when probing, signals video FPS overridable*/ GF_IMPORT_OVERRIDE_FPS = 1<<22, /*only set when probing, signals duration not usable*/ GF_IMPORT_NO_DURATION = 1<<23, /*when set by user during import, will abort*/ GF_IMPORT_DO_ABORT = 1<<31};#define GF_IMPORT_MAX_TRACKS 100struct __track_video_info{ u32 width, height, par; Double FPS;};struct __track_audio_info{ u32 sample_rate, nb_channels;};struct __track_import_info{ u32 track_num; /*track type (GF_ISOM_MEDIA_****)*/ u32 type; /*media type ('MPG1', 'MPG2', ISO 4CC, AVI 4CC)*/ u32 media_type; /*possible import flags*/ u32 flags; /*media format info*/ union { struct __track_video_info video_info; struct __track_audio_info audio_info; }; u32 lang; /*for MPEG2 TS: program number*/ u16 prog_num;};struct __program_import_info{ u32 number; char name[40];};/*track dumper*/typedef struct __track_import{ GF_ISOFile *dest; /*media to import: MP4/ISO media: trackID AVI files: 0: first video and first audio, 1: video track 2->any: audio track(s) MPEG-PS files with N video streams: 0: first video and first audio 1->N: video track N+1->any: audio track TrackNums can be obtain with probing */ u32 trackID; /*media source - selects importer type based on extension*/ char *in_name; /*import duration if any*/ u32 duration; /*importer flags*/ u32 flags; /*if non 0, force video FPS (CMP, AVI, OGG, H264) - also used by SUB import*/ Double video_fps; /*optional ESD*/ GF_ESD *esd; /*optional format indication for media source (used in IM1)*/ char *streamFormat; /*frame per sample cumulation (3GP media only) - MAX 15, ignored in data ref*/ u32 frames_per_sample; /*track ID of imported media in destination file*/ u32 final_trackID; /*for MP4 import only*/ GF_ISOFile *orig; /*for text import*/ u32 fontSize; char *fontName; /*number of tracks after probing - may be set to 0, in which case no track selection can be performed. It may also be inaccurate if probing doesn't detect all available tracks (cf ogg import)*/ u32 nb_tracks; /*track info after probing (GF_IMPORT_PROBE_ONLY set).*/ struct __track_import_info tk_info[GF_IMPORT_MAX_TRACKS]; /*for MPEG-TS and similar: program names*/ u32 nb_progs; struct __program_import_info pg_info[GF_IMPORT_MAX_TRACKS];} GF_MediaImporter;GF_Err gf_media_import(GF_MediaImporter *importer);enum{ /*track dumper types are formatted as flags for conveniency for authoring tools, but never used as a OR'ed set*/ /*native format (JPG, PNG, MP3, etc) if supported*/ GF_EXPORT_NATIVE = 1, /*raw samples (including hint tracks for rtp)*/ GF_EXPORT_RAW_SAMPLES = (1<<1), /*NHNT format (any MPEG-4 media)*/ GF_EXPORT_NHNT = (1<<2), /*AVI (MPEG4 video and AVC tracks only)*/ GF_EXPORT_AVI = (1<<3), /*MP4 (all except OD)*/ GF_EXPORT_MP4 = (1<<4), /*AVI->RAW to dump video (trackID=1) or audio (trackID>=2)*/ GF_EXPORT_AVI_NATIVE = (1<<5), /*NHML format (any media)*/ GF_EXPORT_NHML = (1<<6), /*SAF format*/ GF_EXPORT_SAF = (1<<7), /*following ones are real flags*/ /* for MP4 extraction, indicates track should be added to dest file if any for raw extraction, indicates data shall be appended at the end of output file if present */ GF_EXPORT_MERGE = (1<<10), /*indicates QCP file format possible as well as native (EVRC and SMV audio only)*/ GF_EXPORT_USE_QCP = (1<<11), /*indicates full NHML dump*/ GF_EXPORT_NHML_FULL = (1<<11), /*ony probes extraction format*/ GF_EXPORT_PROBE_ONLY = (1<<30), /*when set by user during export, will abort*/ GF_EXPORT_DO_ABORT = (1<<31),};/*track dumper*/typedef struct __track_exporter{ GF_ISOFile *file; u32 trackID; /*sample number to export for GF_EXPORT_RAW_SAMPLES only*/ u32 sample_num; /*out name WITHOUT extension*/ char *out_name; /*dump type*/ u32 flags; /*non-IsoMedia file (AVI)*/ char *in_name;} GF_MediaExporter;/*if error returns same value as error signaled in message*/GF_Err gf_media_export(GF_MediaExporter *dump);/* RTP IsoMedia file hinting*/typedef struct __tag_isom_hinter GF_RTPHinter;GF_RTPHinter *gf_hinter_track_new(GF_ISOFile *file, u32 TrackNum, u32 Path_MTU, u32 max_ptime, u32 default_rtp_rate, u32 hint_flags, u8 PayloadID, Bool copy_media, u32 InterleaveGroupID, u8 InterleaveGroupPriority, GF_Err *e);/*delete the track hinter*/void gf_hinter_track_del(GF_RTPHinter *tkHinter);/*hints all samples in the media track*/GF_Err gf_hinter_track_process(GF_RTPHinter *tkHint);/*returns media bandwidth in kbps*/u32 gf_hinter_track_get_bandwidth(GF_RTPHinter *tkHinter);/*retrieves hinter flags*/u32 gf_hinter_track_get_flags(GF_RTPHinter *tkHinter);/*retrieves rtp payload name @payloadName: static buffer for retrieval, minimum 30 bytes*/void gf_hinter_track_get_payload_name(GF_RTPHinter *tkHint, char *payloadName);/*finalizes hinting process for the track (setup flags, write SDP for RTP, ...) @AddSystemInfo: if non-0, systems info are duplicated in the SDP (decoder cfg, PL IDs ..)*/GF_Err gf_hinter_track_finalize(GF_RTPHinter *tkHint, Bool AddSystemInfo);/*SDP IOD flag*/enum{ /*no IOD included*/ GF_SDP_IOD_NONE = 0, /*base64 encoding of the regular MPEG-4 IOD*/ GF_SDP_IOD_REGULAR, /*base64 encoding of IOD containing BIFS and OD tracks (one AU only) - this is used for ISMA 1.0 profiles note that the "hinted" file will loose all systems info*/ GF_SDP_IOD_ISMA, /*same as ISMA but removes all clock references from IOD*/ GF_SDP_IOD_ISMA_STRICT,};/*finalizes hinting process for the file (setup flags, write SDP for RTP, ...) @IOD_Profile: see above @bandwidth: total bandwidth in kbps of all hinted tracks, 0 means no bandwidth info at session level*/GF_Err gf_hinter_finalize(GF_ISOFile *file, u32 IOD_Profile, u32 bandwidth);/*returns TRUE if the encoded data fits in an ESD url - streamType is the systems stream type needed tosignal data mime-type (OD, BIFS or any) */Bool gf_hinter_can_embbed_data(char *data, u32 data_size, u32 streamType);/*save file as fragmented movie*/GF_Err gf_media_fragment_file(GF_ISOFile *input, char *output_file, Double MaxFragmentDuration);/*adds chapter info contained in file - import_fps is optional (most formats don't use it), defaults to 25*/GF_Err gf_media_import_chapters(GF_ISOFile *file, char *chap_file, Double import_fps);/*make the file ISMA compliant: creates ISMA BIFS / OD tracks if needed, and update audio/video IDsthe file should not contain more than one audio and one video track@keepImage: if set, generates system info if image is found - only used for image imports*/GF_Err gf_media_make_isma(GF_ISOFile *mp4file, Bool keepESIDs, Bool keepImage, Bool no_ocr);/*make the file 3GP compliant && sets profile*/GF_Err gf_media_make_3gpp(GF_ISOFile *mp4file);/*make the file playable on a PSP*/GF_Err gf_media_make_psp(GF_ISOFile *mp4file);/*creates (if needed) a GF_ESD for the given track - THIS IS RESERVED for local playbackonly, since the OTI used when emulated is not standard...*/GF_ESD *gf_media_map_esd(GF_ISOFile *mp4, u32 track);/*changes pixel aspect ratio for visual tracks if supported. Negative values remove any PAR info*/GF_Err gf_media_change_par(GF_ISOFile *file, u32 track, s32 ar_num, s32 ar_den);/*SAF Multiplexer object. The multiplexer supports concurencial (multi-threaded) access*/typedef struct __saf_muxer GF_SAFMuxer;/*SAF Multiplexer constructor*/GF_SAFMuxer *gf_saf_mux_new();/*SAF Multiplexer destructor*/void gf_saf_mux_del(GF_SAFMuxer *mux);/*adds a new stream in the SAF multiplex*/GF_Err gf_saf_mux_stream_add(GF_SAFMuxer *mux, u32 stream_id, u32 ts_res, u32 buffersize_db, u8 stream_type, u8 object_type, char *mime_type, char *dsi, u32 dsi_len, char *remote_url);/*removes a stream from the SAF multiplex*/GF_Err gf_saf_mux_stream_rem(GF_SAFMuxer *mux, u32 stream_id);/*adds an AU to the given stream. !!AU data will be freed by the multiplexer!! AUs are not reinterleaved based on their CTS, in order to enable audio interleaving*/GF_Err gf_saf_mux_add_au(GF_SAFMuxer *mux, u32 stream_id, u32 CTS, char *data, u32 data_len, Bool is_rap);/*gets the content of the multiplexer for the given time.if force_end_of_session is set, this flushes the SAF Session - no more operations will be allowed on the muxer*/GF_Err gf_saf_mux_for_time(GF_SAFMuxer *mux, u32 time_ms, Bool force_end_of_session, char **out_data, u32 *out_size);#ifdef __cplusplus}#endif#endif /*_GF_MEDIA_H_*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -