winlin

for bug #241, use heap to alloc the socket buffer.

@@ -26,6 +26,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -26,6 +26,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 #include <srs_kernel_error.hpp> 26 #include <srs_kernel_error.hpp>
27 #include <srs_kernel_log.hpp> 27 #include <srs_kernel_log.hpp>
28 28
  29 +// 4KB=4096
  30 +// 8KB=8192
  31 +// 16KB=16384
  32 +// 32KB=32768
  33 +// 64KB=65536
  34 +// @see https://github.com/winlinvip/simple-rtmp-server/issues/241
29 #define SOCKET_READ_SIZE 4096 35 #define SOCKET_READ_SIZE 4096
30 36
31 ISrsBufferReader::ISrsBufferReader() 37 ISrsBufferReader::ISrsBufferReader()
@@ -38,10 +44,12 @@ ISrsBufferReader::~ISrsBufferReader() @@ -38,10 +44,12 @@ ISrsBufferReader::~ISrsBufferReader()
38 44
39 SrsBuffer::SrsBuffer() 45 SrsBuffer::SrsBuffer()
40 { 46 {
  47 + buffer = new char[SOCKET_READ_SIZE];
41 } 48 }
42 49
43 SrsBuffer::~SrsBuffer() 50 SrsBuffer::~SrsBuffer()
44 { 51 {
  52 + srs_freep(buffer);
45 } 53 }
46 54
47 int SrsBuffer::length() 55 int SrsBuffer::length()
@@ -88,8 +96,6 @@ int SrsBuffer::grow(ISrsBufferReader* reader, int required_size) @@ -88,8 +96,6 @@ int SrsBuffer::grow(ISrsBufferReader* reader, int required_size)
88 } 96 }
89 97
90 while (length() < required_size) { 98 while (length() < required_size) {
91 - char buffer[SOCKET_READ_SIZE];  
92 -  
93 ssize_t nread; 99 ssize_t nread;
94 if ((ret = reader->read(buffer, SOCKET_READ_SIZE, &nread)) != ERROR_SUCCESS) { 100 if ((ret = reader->read(buffer, SOCKET_READ_SIZE, &nread)) != ERROR_SUCCESS) {
95 return ret; 101 return ret;
@@ -53,6 +53,7 @@ class SrsBuffer @@ -53,6 +53,7 @@ class SrsBuffer
53 { 53 {
54 private: 54 private:
55 std::vector<char> data; 55 std::vector<char> data;
  56 + char* buffer;
56 public: 57 public:
57 SrsBuffer(); 58 SrsBuffer();
58 virtual ~SrsBuffer(); 59 virtual ~SrsBuffer();