⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demuxer.h

📁 目前的流媒体服务器代码有Darwin(苹果公司)
💻 H
字号:
/* * *  $Id$**  This file is part of Fenice**  Fenice -- Open Media Server**  Copyright (C) 2007 by**	- Giampaolo Mancini	<giampaolo.mancini@polito.it>*	- Francesco Varano	<francesco.varano@polito.it>*	- Marco Penno		<marco.penno@polito.it>*	- Federico Ridolfo	<federico.ridolfo@polito.it>**  Fenice is free software; you can redistribute it and/or modify*  it under the terms of the GNU General Public License as published by*  the Free Software Foundation; either version 2 of the License, or*  (at your option) any later version.**  Fenice 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 General Public License for more details.**  You should have received a copy of the GNU General Public License*  along with Fenice; if not, write to the Free Software*  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA** */#ifndef __DEMUXER_H#define __DEMUXER_H#include <glib.h>#include <fenice/types.h>#include <fenice/utils.h>#include <fenice/mediautils.h>#include <fenice/InputStream.h>#include <fenice/mediaparser.h>#include <fenice/bufferpool.h>#include <fenice/sdp_grammar.h>/** a resource_name can be a mkv, sd, program stream, avi, device ... * syntax could be: * 	udp://ip:port* 	file://path/filename* 	dev://device:driver*/#define msg_error int/*msg_error:*/#define	RESOURCE_OK 0 #define	RESOURCE_NOT_FOUND -1 #define	RESOURCE_DAMAGED -2#define	RESOURCE_NOT_SEEKABLE -3#define	RESOURCE_TRACK_NOT_FOUND -4#define RESOURCE_NOT_PARSEABLE -5/*...*/#define MAX_TRACKS 20	#define MAX_SEL_TRACKS 5//! Macros that take the data part of a GList element and cast to correct type#define RESOURCE(x) ((Resource *)x->data)#define TRACK(x) ((Track *)x->data)#define RESOURCE_DESCR(x) ((ResourceDescr *)x->data)#define MEDIA_DESCR(x) ((MediaDescr *)x->data)//! typedefs that give convenient names to GLists usedtypedef GList *TrackList;typedef GList *MediaDescrList;typedef GList *SelList;typedef GPtrArray *MediaDescrListArray;//! Some macros to wrap GList functions#define list_first(x) g_list_first(x)#define list_next(x) g_list_next(x)//! Some mecros to wrap GPtrArray functions#define array_data(x) x->pdata#define array_index(x, y) x->pdata[y]typedef struct __CAPABILITIES {} Capabilities;MObject_def(__RESOURCE_INFO)    char *mrl;    char *name;    char *description;    char *descrURI;    char *email;    char *phone;    sdp_field_list sdp_private;    double duration;    MediaSource media_source;    char twin[255];    char multicast[16];    char ttl[4];} ResourceInfo;typedef struct __RESOURCE {    InputStream *i_stream;    struct __DEMUXER *demuxer;    ResourceInfo *info;    /* Timescale fixer callback function for meta-demuxers */    double (*timescaler)(struct __RESOURCE *, double);    /* EDL specific data */    struct __RESOURCE *edl;    /* Multiformat related things */    SelList sel;    int num_sel;    TrackList tracks;    int num_tracks;    void *private_data; /* Demuxer private data */    int eos; //!< signals the end of stream} Resource;#if 0 // define MObject with MObject_deftypedef struct __TRACK_INFO {    MOBJECT_COMMONS; // MObject commons MUST be the first field#endifMObject_def(__TRACK_INFO)    char *mrl;    char name[255];    int id; // should it more generic?    int rtp_port;    //start CC    char commons_deed[255];    char rdf_page[255];    char title[80];    char author[80];    //end CC} TrackInfo;typedef struct __TRACK {    InputStream *i_stream;    TrackInfo *info;    long int timestamp;    MediaParser *parser;    /*bufferpool*/    OMSBuffer *buffer;    MediaProperties *properties; /* track properties */    Resource *parent;    /* private data is managed by specific media parser: from allocation to deallocation     * track MUST NOT do anything on this pointer! */    void *private_data;    void *parser_private; /* private data of media parser */} Track;typedef struct __SELECTOR {    // Track *tracks[MAX_SEL_TRACKS];	    TrackList tracks;    Track cur;    uint32 default_index;    uint32 selected_index;/**/    uint32 total; /*total tracks in selector*/} Selector;#if 0 // define MObject with MObject_deftypedef struct __RESOURCE_INFO {    MOBJECT_COMMONS; // MObject commons MUST be the first field#endiftypedef struct {    /*name of demuxer module*/    const char *name;    /* short name (for config strings) (e.g.:"sd") */    const char *short_name;    /* author ("Author name & surname <mail>") */    const char *author;    /* any additional comments */    const char *comment;    /* served file extensions */    const char *extensions; // coma separated list of extensions (w/o '.')} DemuxerInfo;typedef struct __DEMUXER {    DemuxerInfo *info;    int (*probe)(InputStream *);    int (*init)(Resource *);    int (*read_packet)(Resource *);    int (*seek)(Resource *, double time_sec);    int (*uninit)(Resource *);    //...} Demuxer;typedef struct {    time_t last_change;    ResourceInfo *info;    MediaDescrList media; // GList of MediaDescr elements} ResourceDescr;typedef struct {    time_t last_change;    TrackInfo *info;    MediaProperties *properties;} MediaDescr;// --- functions --- //// ResourcesResource *r_open(char *root, char *name);/*open the resource: mkv, sd ...*/void r_close(Resource *);//msg_error get_resource_info(resource_name, ResourceInfo *);Selector *r_open_tracks(Resource *, char *track_name, Capabilities *capabilities);/*open the right tracks*/void r_close_tracks(Selector *);/*close all tracks*/ // shawill: XXX do we need it?inline int r_seek(Resource *, long int /*time_sec*/ );/*seeks the resource: mkv, sd ...*/int r_changed(ResourceDescr *);//Selector handling functionsinline Track *r_selected_track(Selector *);// TrackList handling functions// TracksTrack *add_track(Resource *, TrackInfo *, MediaProperties *);void free_track(Track *, Resource *);// Resources and Media descriptionsResourceDescr *r_descr_get(char *root, char *name);// ResourceDescr *r_descr_new(Resource *);// void r_descr_free(ResourceDescr *);/* --- functions implemented in descriptionAPI.c --- *//*! the functions that return pointers do not allocate new memory, simply return* the pointer of the description resource. So, there is no need to free* anything.* The functions that return pointers return NULL if the value is not set.* */inline time_t r_descr_last_change(ResourceDescr *);inline char *r_descr_mrl(ResourceDescr *);inline char *r_descr_twin(ResourceDescr *);inline char *r_descr_multicast(ResourceDescr *);inline char *r_descr_ttl(ResourceDescr *);inline char *r_descr_name(ResourceDescr *);inline char *r_descr_description(ResourceDescr *);inline char *r_descr_descrURI(ResourceDescr *);inline char *r_descr_email(ResourceDescr *);inline char *r_descr_phone(ResourceDescr *);inline sdp_field_list r_descr_sdp_private(ResourceDescr *);MediaDescrListArray r_descr_get_media(ResourceDescr *);inline char *m_descr_name(MediaDescr *);inline MediaType m_descr_type(MediaDescr *);inline sdp_field_list m_descr_sdp_private(MediaDescr *);inline int m_descr_rtp_port(MediaDescr *);inline uint32 m_descr_rtp_pt(MediaDescr *);inline char *m_descr_commons_deed(MediaDescr *);inline char *m_descr_rdf_page(MediaDescr *);inline char *m_descr_title(MediaDescr *);inline char *m_descr_author(MediaDescr *);/*-------------------------------------------*/#endif // __DEMUXER_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -