接上篇CGNonBlockRingBuffer的改版

CGNonBlockRingBuffer的邏輯方式還是稍顯複雜。現在分享srs開源項目中用到的SrsBuffer,也能滿足我們的CGNonBlockRingBuffer同樣的需求(完美替換ffmpeg裏面的fifo)。而且代碼更簡單。

以下開源代碼經過稍微的改動

#ifndef SrsBuffer_H
#define SrsBuffer_H

#include <common.h>
#include <vector>
class SrsBuffer
{
	
private:
	vector<uint8_t> data;
public:
	SrsBuffer(){};
	~SrsBuffer(){};
public:
	int getCount(){ return (int)data.size(); };
	uint8_t* bytes(){ return &data.at(0); };
	void erase(int size){ data.erase(data.begin(), data.begin() + size); };
	void Write(uint8_t* bytes, int size){
		vector<uint8_t> vec(bytes, bytes + size);

		data.insert(data.end(), vec.begin(), vec.end());
	};
	int Read(uint8_t* data, int required_size, int del=1){
		if (getCount() < required_size) {
			return -1;
		}
		if (data == NULL){
			return -1;
		}
		memcpy(data, bytes(), required_size);
		if (del){
			erase(required_size);
		}

		return 0;
	};


};

#endif

 

 

 

 

發佈了38 篇原創文章 · 獲贊 29 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章