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