From d2a889b4634c6a8bea74243e8a01dc5ccd25fe29 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Thu, 25 Jul 2019 09:38:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=B1=BB=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E6=B7=BB=E5=8A=A0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Extension/Frame.h | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/src/Extension/Frame.h b/src/Extension/Frame.h index f09805ab..5d49753a 100644 --- a/src/Extension/Frame.h +++ b/src/Extension/Frame.h @@ -292,9 +292,12 @@ private: map _delegateMap; }; -class FrameNoCacheAble : public Frame{ +/** + * 通过Frame接口包装指针,方便使用者把自己的数据快速接入ZLMediaKit + */ +class FrameFromPtr : public Frame{ public: - typedef std::shared_ptr Ptr; + typedef std::shared_ptr Ptr; char *data() const override{ return _ptr; } @@ -316,14 +319,6 @@ public: uint32_t prefixSize() const override{ return _prefixSize; } - - /** - * 该帧不可缓存 - * @return - */ - bool cacheAble() const override { - return false; - } protected: char *_ptr; uint32_t _size; @@ -332,7 +327,31 @@ protected: uint32_t _prefixSize; }; -class FrameCacheAble : public FrameNoCacheAble { +/** + * 不可缓存的帧,在DevChannel类中有用到。 + * 该帧类型用于防止内存拷贝,直接使用指针传递数据 + * 在大多数情况下,ZLMediaKit是同步对帧数据进行使用和处理的 + * 所以提供此类型的帧很有必要,但是有时又无法避免缓存帧做后续处理 + * 所以可以通过Frame::getCacheAbleFrame方法拷贝一个可缓存的帧 + */ +class FrameNoCacheAble : public FrameFromPtr{ +public: + typedef std::shared_ptr Ptr; + + /** + * 该帧不可缓存 + * @return + */ + bool cacheAble() const override { + return false; + } +}; + +/** + * 该对象的功能是把一个不可缓存的帧转换成可缓存的帧 + * @see FrameNoCacheAble + */ +class FrameCacheAble : public FrameFromPtr { public: typedef std::shared_ptr Ptr;