文章标题

    xiaoxiao2021-03-25  76

      安卓N版本ASessionDescription::setTo函数原文:

    bool ASessionDescription::setTo(const void *data, size_t size) { //调用parse函数来解析缓冲区的内容 //布尔变量mIsValid用来表示该会话描述对象是否是有效的 mIsValid = parse(data, size); if (!mIsValid) { //如果变量mIsValid的值为fasle //说明parse函数解析遇到了错误 //清楚mTracks和mFormats容器里的内容 //后面给出ASessionDescription.h的原文看下该两个容器的定义 mTracks.clear(); mFormats.clear(); } return mIsValid; }

      ASessionDescription.h的原文:   

    #ifndef A_SESSION_DESCRIPTION_H_ #define A_SESSION_DESCRIPTION_H_ #include <sys/types.h> #include <media/stagefright/foundation/ABase.h> #include <utils/KeyedVector.h> #include <utils/RefBase.h> #include <utils/Vector.h> namespace android { struct AString; struct ASessionDescription : public RefBase { ASessionDescription(); bool setTo(const void *data, size_t size); bool isValid() const; // Actually, 1 + number of tracks, as index 0 is reserved for the // session description root-level attributes. size_t countTracks() const; void getFormat(size_t index, AString *value) const; void getFormatType( size_t index, unsigned long *PT, AString *desc, AString *params) const; bool getDimensions( size_t index, unsigned long PT, int32_t *width, int32_t *height) const; bool getDurationUs(int64_t *durationUs) const; static void ParseFormatDesc( const char *desc, int32_t *timescale, int32_t *numChannels); bool findAttribute(size_t index, const char *key, AString *value) const; // parses strings of the form // npt := npt-time "-" npt-time? | "-" npt-time // npt-time := "now" | [0-9]+("." [0-9]*)? // // Returns true iff both "npt1" and "npt2" times were available, // i.e. we have a fixed duration, otherwise this is live streaming. static bool parseNTPRange(const char *s, float *npt1, float *npt2); protected: virtual ~ASessionDescription(); private: //Attribs是一个类型为KeyedVector<AString,AString>的容器 //即key和value都是AString类型的容器 typedef KeyedVector<AString,AString> Attribs; bool mIsValid; //mTracks是KeyedVector<AString,AString>类型容器的容器 //即mTracks的每个元素是KeyedVector<AString,AString>类型的容器 Vector<Attribs> mTracks; Vector<AString> mFormats; bool parse(const void *data, size_t size); DISALLOW_EVIL_CONSTRUCTORS(ASessionDescription); }; } // namespace android #endif // A_SESSION_DESCRIPTION_H_

      小结:ASessionDescription对象的主要任务是通过定义的parse函数来解析对应缓冲区里的内容,该内容是服务端的回应消息里携带的。

    转载请注明原文地址: https://ju.6miu.com/read-39061.html

    最新回复(0)