1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

for bug #248, use simple buffer for http.

This commit is contained in:
winlin 2014-12-04 11:29:47 +08:00
parent 2cb8b7dd52
commit 0ea8cd9e84
6 changed files with 84 additions and 81 deletions

View file

@ -396,47 +396,6 @@ private:
} }
}; };
SrsSimpleBuffer::SrsSimpleBuffer()
{
}
SrsSimpleBuffer::~SrsSimpleBuffer()
{
}
int SrsSimpleBuffer::length()
{
int len = (int)data.size();
srs_assert(len >= 0);
return len;
}
char* SrsSimpleBuffer::bytes()
{
return (length() == 0)? NULL : &data.at(0);
}
void SrsSimpleBuffer::erase(int size)
{
if (size <= 0) {
return;
}
if (size >= length()) {
data.clear();
return;
}
data.erase(data.begin(), data.begin() + size);
}
void SrsSimpleBuffer::append(const char* bytes, int size)
{
srs_assert(size > 0);
data.insert(data.end(), bytes, bytes + size);
}
SrsHlsAacJitter::SrsHlsAacJitter() SrsHlsAacJitter::SrsHlsAacJitter()
{ {
base_pts = 0; base_pts = 0;

View file

@ -61,43 +61,7 @@ class SrsRequest;
class SrsPithyPrint; class SrsPithyPrint;
class SrsSource; class SrsSource;
class SrsFileWriter; class SrsFileWriter;
class SrsSimpleBuffer;
/**
* the simple buffer use vector to append bytes,
* it's for hls, and need to be refined in future.
*/
class SrsSimpleBuffer
{
private:
std::vector<char> data;
public:
SrsSimpleBuffer();
virtual ~SrsSimpleBuffer();
public:
/**
* get the length of buffer. empty if zero.
* @remark assert length() is not negative.
*/
virtual int length();
/**
* get the buffer bytes.
* @return the bytes, NULL if empty.
*/
virtual char* bytes();
/**
* erase size of bytes from begin.
* @param size to erase size of bytes.
* clear if size greater than or equals to length()
* @remark ignore size is not positive.
*/
virtual void erase(int size);
/**
* append specified bytes to buffer.
* @param size the size of bytes
* @remark assert size is positive.
*/
virtual void append(const char* bytes, int size);
};
/** /**
* jitter correct for audio, * jitter correct for audio,

View file

@ -537,7 +537,7 @@ SrsHttpHandler* SrsHttpHandler::create_http_stream()
SrsHttpMessage::SrsHttpMessage() SrsHttpMessage::SrsHttpMessage()
{ {
_body = new SrsBuffer(); _body = new SrsSimpleBuffer();
_state = SrsHttpParseStateInit; _state = SrsHttpParseStateInit;
_uri = new SrsHttpUri(); _uri = new SrsHttpUri();
_match = NULL; _match = NULL;

View file

@ -39,7 +39,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <srs_app_st.hpp> #include <srs_app_st.hpp>
class SrsBuffer; class SrsSimpleBuffer;
class SrsRequest; class SrsRequest;
class SrsStSocket; class SrsStSocket;
class SrsHttpUri; class SrsHttpUri;
@ -214,7 +214,7 @@ private:
* body object, in bytes. * body object, in bytes.
* @remark, user can get body in string by get_body(). * @remark, user can get body in string by get_body().
*/ */
SrsBuffer* _body; SrsSimpleBuffer* _body;
/** /**
* parser state * parser state
* @remark, user can use is_complete() to determine the state. * @remark, user can use is_complete() to determine the state.

View file

@ -27,6 +27,47 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <srs_kernel_log.hpp> #include <srs_kernel_log.hpp>
#include <srs_kernel_utility.hpp> #include <srs_kernel_utility.hpp>
SrsSimpleBuffer::SrsSimpleBuffer()
{
}
SrsSimpleBuffer::~SrsSimpleBuffer()
{
}
int SrsSimpleBuffer::length()
{
int len = (int)data.size();
srs_assert(len >= 0);
return len;
}
char* SrsSimpleBuffer::bytes()
{
return (length() == 0)? NULL : &data.at(0);
}
void SrsSimpleBuffer::erase(int size)
{
if (size <= 0) {
return;
}
if (size >= length()) {
data.clear();
return;
}
data.erase(data.begin(), data.begin() + size);
}
void SrsSimpleBuffer::append(const char* bytes, int size)
{
srs_assert(size > 0);
data.insert(data.end(), bytes, bytes + size);
}
IMergeReadHandler::IMergeReadHandler() IMergeReadHandler::IMergeReadHandler()
{ {
} }

View file

@ -34,6 +34,43 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <srs_protocol_io.hpp> #include <srs_protocol_io.hpp>
/**
* the simple buffer use vector to append bytes,
* it's for hls and http, and need to be refined in future.
*/
class SrsSimpleBuffer
{
private:
std::vector<char> data;
public:
SrsSimpleBuffer();
virtual ~SrsSimpleBuffer();
public:
/**
* get the length of buffer. empty if zero.
* @remark assert length() is not negative.
*/
virtual int length();
/**
* get the buffer bytes.
* @return the bytes, NULL if empty.
*/
virtual char* bytes();
/**
* erase size of bytes from begin.
* @param size to erase size of bytes.
* clear if size greater than or equals to length()
* @remark ignore size is not positive.
*/
virtual void erase(int size);
/**
* append specified bytes to buffer.
* @param size the size of bytes
* @remark assert size is positive.
*/
virtual void append(const char* bytes, int size);
};
// 4KB=4096 // 4KB=4096
// 8KB=8192 // 8KB=8192
// 16KB=16384 // 16KB=16384
@ -97,6 +134,7 @@ public:
* @return the bytes, NULL if empty. * @return the bytes, NULL if empty.
*/ */
virtual char* bytes(); virtual char* bytes();
public:
/** /**
* erase size of bytes from begin. * erase size of bytes from begin.
* @param size to erase size of bytes. * @param size to erase size of bytes.
@ -104,6 +142,7 @@ public:
* @remark ignore size is not positive. * @remark ignore size is not positive.
*/ */
virtual void erase(int size); virtual void erase(int size);
private:
/** /**
* append specified bytes to buffer. * append specified bytes to buffer.
* @param size the size of bytes * @param size the size of bytes