live555的Media.hh学习

    技术2022-05-20  53

    Media.hh中定义内容如下:

    //定义Medium基类 class Medium{ public: 成员函数... protected: 成员函数... privated: friend class MediaLookupTable;//一个通过Medium名称进行查找的数据结构,在Media.cpp中定义 UsageEnvironment& fEnviron;//环境变量类在UsageEnvironment.hh中定义 char fMediumName[mediumNameMaxLen];//Medium的名称,#define mediumNameMaxLen 30 TaskToken fNextTask; //指向下一个任务的指针,#define TaskToken void* }; //定义_Tables类 // The structure pointed to by the "liveMediaPriv" UsageEnvironment field: //由UsageEnvironment类的"liveMediaPriv"成员指向的结构指针 class _Tables { public: //获取env的成员liveMediaPriv(这是一个指向_Tables的指针),如果它为NULL就新建一个_Tables static _Tables* getOurTables(UsageEnvironment& env, Boolean createIfNotPresent = True); // returns a pointer to an "ourTables" structure (creating it if necessary) void reclaimIfPossible(); // used to delete ourselves when we're no longer used void* mediaTable; //指向一个MediaLoopupTable的指针 void* socketTable; protected: _Tables(UsageEnvironment& env); virtual ~_Tables(); private: UsageEnvironment& fEnv; };

     

    //Media.cpp //定义MediaLookupTable类 class MediaLookupTable { public: //调用_Tables的getOurTables(env)成员函数,获得环境变量中_Tables的MediaLoopupTable,如果没有则新建它 static MediaLookupTable* ourMedia(UsageEnvironment& env); //通过名称查找是否存在对应的Medium Medium* lookup(char const* name) const; // Returns NULL if none already exists //添加一个新的medium对象到哈希表中 void addNew(Medium* medium, char* mediumName); //通过medium对象对应的名称从哈希表中删除该对象 void remove(char const* name); //为新的medium对象先产生一个mediumName void generateNewName(char* mediumName, unsigned maxLen); protected: MediaLookupTable(UsageEnvironment& env);//赋值env到fEnv,新建一个HashTable给fTable,fNameGenrator的值置0 virtual ~MediaLookupTable();//删除fTable private: UsageEnvironment& fEnv; HashTable* fTable;//一个哈希表,用来存储Medium对象与Medium名称并使其一一对应 unsigned fNameGenerator; //指示产生了多少mediumName }; Media的构造函数 Medium(UsageEnvironment& env) : fEnviron(env), fNextTask(NULL) { 首先为新的Medium产生一个名称; 然后把这个新的名称加入到MediaLookupTable表中; }


    最新回复(0)