Performance: 使用循环池优化http-flv分发性能

This commit is contained in:
xiongziliang 2021-11-21 11:28:14 +08:00
parent 1cba3f4d58
commit 5404a5266a
2 changed files with 13 additions and 3 deletions

View File

@ -16,6 +16,10 @@
namespace mediakit { namespace mediakit {
FlvMuxer::FlvMuxer(){
_packet_pool.setSize(64);
}
void FlvMuxer::start(const EventPoller::Ptr &poller, const RtmpMediaSource::Ptr &media) { void FlvMuxer::start(const EventPoller::Ptr &poller, const RtmpMediaSource::Ptr &media) {
if (!media) { if (!media) {
throw std::runtime_error("RtmpMediaSource 无效"); throw std::runtime_error("RtmpMediaSource 无效");
@ -62,15 +66,19 @@ void FlvMuxer::start(const EventPoller::Ptr &poller, const RtmpMediaSource::Ptr
}); });
} }
BufferRaw::Ptr FlvMuxer::obtainBuffer() {
return _packet_pool.obtain();
}
BufferRaw::Ptr FlvMuxer::obtainBuffer(const void *data, size_t len) { BufferRaw::Ptr FlvMuxer::obtainBuffer(const void *data, size_t len) {
auto buffer = BufferRaw::create(); auto buffer = obtainBuffer();
buffer->assign((const char *) data, len); buffer->assign((const char *) data, len);
return buffer; return buffer;
} }
void FlvMuxer::onWriteFlvHeader(const RtmpMediaSource::Ptr &src) { void FlvMuxer::onWriteFlvHeader(const RtmpMediaSource::Ptr &src) {
//发送flv文件头 //发送flv文件头
auto buffer = BufferRaw::create(); auto buffer = obtainBuffer();
buffer->setCapacity(sizeof(FLVHeader)); buffer->setCapacity(sizeof(FLVHeader));
buffer->setSize(sizeof(FLVHeader)); buffer->setSize(sizeof(FLVHeader));

View File

@ -22,7 +22,7 @@ namespace mediakit {
class FlvMuxer { class FlvMuxer {
public: public:
using Ptr = std::shared_ptr<FlvMuxer>; using Ptr = std::shared_ptr<FlvMuxer>;
FlvMuxer() = default; FlvMuxer();
virtual ~FlvMuxer() = default; virtual ~FlvMuxer() = default;
void stop(); void stop();
@ -39,8 +39,10 @@ private:
void onWriteFlvTag(const RtmpPacket::Ptr &pkt, uint32_t time_stamp, bool flush); void onWriteFlvTag(const RtmpPacket::Ptr &pkt, uint32_t time_stamp, bool flush);
void onWriteFlvTag(uint8_t type, const Buffer::Ptr &buffer, uint32_t time_stamp, bool flush); void onWriteFlvTag(uint8_t type, const Buffer::Ptr &buffer, uint32_t time_stamp, bool flush);
BufferRaw::Ptr obtainBuffer(const void *data, size_t len); BufferRaw::Ptr obtainBuffer(const void *data, size_t len);
BufferRaw::Ptr obtainBuffer();
private: private:
ResourcePool<BufferRaw> _packet_pool;
//时间戳修整器 //时间戳修整器
Stamp _stamp[2]; Stamp _stamp[2];
RtmpMediaSource::RingType::RingReader::Ptr _ring_reader; RtmpMediaSource::RingType::RingReader::Ptr _ring_reader;