From 03f3ecab1beb3e2d774fd274dbc9ad57940c9e66 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Fri, 31 Aug 2012 16:56:14 +0200 Subject: [PATCH] RTMP lib upgrades to return strings by reference - note: initial testing indicates raptors. Needs to be looked at ASAP! --- lib/rtmpchunks.cpp | 36 ++++++++++++++++++------------------ lib/rtmpchunks.h | 16 ++++++++-------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/lib/rtmpchunks.cpp b/lib/rtmpchunks.cpp index 51a2e9dd..961176db 100644 --- a/lib/rtmpchunks.cpp +++ b/lib/rtmpchunks.cpp @@ -36,8 +36,8 @@ std::map RTMPStream::Chunk::lastrecv; /// Packs up the chunk for sending over the network. /// \warning Do not call if you are not actually sending the resulting data! /// \returns A std::string ready to be sent. -std::string RTMPStream::Chunk::Pack(){ - std::string output = ""; +std::string & RTMPStream::Chunk::Pack(){ + static std::string output = ""; RTMPStream::Chunk prev = lastsend[cs_id]; unsigned int tmpi; unsigned char chtype = 0x00; @@ -143,8 +143,8 @@ RTMPStream::Chunk::Chunk(){ }//constructor /// Packs up a chunk with the given arguments as properties. -std::string RTMPStream::SendChunk(unsigned int cs_id, unsigned char msg_type_id, unsigned int msg_stream_id, std::string data){ - RTMPStream::Chunk ch; +std::string & RTMPStream::SendChunk(unsigned int cs_id, unsigned char msg_type_id, unsigned int msg_stream_id, std::string data){ + static RTMPStream::Chunk ch; ch.cs_id = cs_id; ch.timestamp = RTMPStream::getNowMS(); ch.len = data.size(); @@ -161,8 +161,8 @@ std::string RTMPStream::SendChunk(unsigned int cs_id, unsigned char msg_type_id, /// \param data Contents of the media data. /// \param len Length of the media data, in bytes. /// \param ts Timestamp of the media data, relative to current system time. -std::string RTMPStream::SendMedia(unsigned char msg_type_id, unsigned char * data, int len, unsigned int ts){ - RTMPStream::Chunk ch; +std::string & RTMPStream::SendMedia(unsigned char msg_type_id, unsigned char * data, int len, unsigned int ts){ + static RTMPStream::Chunk ch; ch.cs_id = msg_type_id+42; ch.timestamp = ts; ch.len = len; @@ -170,14 +170,14 @@ std::string RTMPStream::SendMedia(unsigned char msg_type_id, unsigned char * dat ch.len_left = 0; ch.msg_type_id = msg_type_id; ch.msg_stream_id = 1; - ch.data.append((char*)data, (size_t)len); + ch.data = std::string((char*)data, (size_t)len); return ch.Pack(); }//SendMedia /// Packs up a chunk with media contents. /// \param tag FLV::Tag with media to send. -std::string RTMPStream::SendMedia(FLV::Tag & tag){ - RTMPStream::Chunk ch; +std::string & RTMPStream::SendMedia(FLV::Tag & tag){ + static RTMPStream::Chunk ch; ch.cs_id = ((unsigned char)tag.data[0]); ch.timestamp = tag.tagTime(); ch.len = tag.len-15; @@ -185,13 +185,13 @@ std::string RTMPStream::SendMedia(FLV::Tag & tag){ ch.len_left = 0; ch.msg_type_id = (unsigned char)tag.data[0]; ch.msg_stream_id = 1; - ch.data.append(tag.data+11, (size_t)(tag.len-15)); + ch.data = std::string(tag.data+11, (size_t)(tag.len-15)); return ch.Pack(); }//SendMedia /// Packs up a chunk for a control message with 1 argument. -std::string RTMPStream::SendCTL(unsigned char type, unsigned int data){ - RTMPStream::Chunk ch; +std::string & RTMPStream::SendCTL(unsigned char type, unsigned int data){ + static RTMPStream::Chunk ch; ch.cs_id = 2; ch.timestamp = RTMPStream::getNowMS(); ch.len = 4; @@ -205,8 +205,8 @@ std::string RTMPStream::SendCTL(unsigned char type, unsigned int data){ }//SendCTL /// Packs up a chunk for a control message with 2 arguments. -std::string RTMPStream::SendCTL(unsigned char type, unsigned int data, unsigned char data2){ - RTMPStream::Chunk ch; +std::string & RTMPStream::SendCTL(unsigned char type, unsigned int data, unsigned char data2){ + static RTMPStream::Chunk ch; ch.cs_id = 2; ch.timestamp = RTMPStream::getNowMS(); ch.len = 5; @@ -221,8 +221,8 @@ std::string RTMPStream::SendCTL(unsigned char type, unsigned int data, unsigned }//SendCTL /// Packs up a chunk for a user control message with 1 argument. -std::string RTMPStream::SendUSR(unsigned char type, unsigned int data){ - RTMPStream::Chunk ch; +std::string & RTMPStream::SendUSR(unsigned char type, unsigned int data){ + static RTMPStream::Chunk ch; ch.cs_id = 2; ch.timestamp = RTMPStream::getNowMS(); ch.len = 6; @@ -238,8 +238,8 @@ std::string RTMPStream::SendUSR(unsigned char type, unsigned int data){ }//SendUSR /// Packs up a chunk for a user control message with 2 arguments. -std::string RTMPStream::SendUSR(unsigned char type, unsigned int data, unsigned int data2){ - RTMPStream::Chunk ch; +std::string & RTMPStream::SendUSR(unsigned char type, unsigned int data, unsigned int data2){ + static RTMPStream::Chunk ch; ch.cs_id = 2; ch.timestamp = RTMPStream::getNowMS(); ch.len = 10; diff --git a/lib/rtmpchunks.h b/lib/rtmpchunks.h index 009cfd29..e153f4ca 100644 --- a/lib/rtmpchunks.h +++ b/lib/rtmpchunks.h @@ -46,20 +46,20 @@ namespace RTMPStream{ Chunk(); bool Parse(std::string & data); - std::string Pack(); + std::string & Pack(); private: static std::map lastsend; static std::map lastrecv; };//RTMPStream::Chunk - std::string SendChunk(unsigned int cs_id, unsigned char msg_type_id, unsigned int msg_stream_id, std::string data); - std::string SendMedia(unsigned char msg_type_id, unsigned char * data, int len, unsigned int ts); - std::string SendMedia(FLV::Tag & tag); - std::string SendCTL(unsigned char type, unsigned int data); - std::string SendCTL(unsigned char type, unsigned int data, unsigned char data2); - std::string SendUSR(unsigned char type, unsigned int data); - std::string SendUSR(unsigned char type, unsigned int data, unsigned int data2); + std::string & SendChunk(unsigned int cs_id, unsigned char msg_type_id, unsigned int msg_stream_id, std::string data); + std::string & SendMedia(unsigned char msg_type_id, unsigned char * data, int len, unsigned int ts); + std::string & SendMedia(FLV::Tag & tag); + std::string & SendCTL(unsigned char type, unsigned int data); + std::string & SendCTL(unsigned char type, unsigned int data, unsigned char data2); + std::string & SendUSR(unsigned char type, unsigned int data); + std::string & SendUSR(unsigned char type, unsigned int data, unsigned int data2); /// This value should be set to the first 1537 bytes received. extern std::string handshake_in;