winlin

use cache for flv tag header.

@@ -38,9 +38,6 @@ using namespace std; @@ -38,9 +38,6 @@ using namespace std;
38 #include <srs_kernel_file.hpp> 38 #include <srs_kernel_file.hpp>
39 #include <srs_kernel_codec.hpp> 39 #include <srs_kernel_codec.hpp>
40 40
41 -#define SRS_FLV_TAG_HEADER_SIZE 11  
42 -#define SRS_FLV_PREVIOUS_TAG_SIZE 4  
43 -  
44 SrsFlvEncoder::SrsFlvEncoder() 41 SrsFlvEncoder::SrsFlvEncoder()
45 { 42 {
46 _fs = NULL; 43 _fs = NULL;
@@ -119,19 +116,22 @@ int SrsFlvEncoder::write_metadata(char type, char* data, int size) @@ -119,19 +116,22 @@ int SrsFlvEncoder::write_metadata(char type, char* data, int size)
119 srs_assert(data); 116 srs_assert(data);
120 117
121 // 11 bytes tag header 118 // 11 bytes tag header
122 - char tag_header[] = { 119 + /*char tag_header[] = {
123 (char)type, // TagType UB [5], 18 = script data 120 (char)type, // TagType UB [5], 18 = script data
124 (char)0x00, (char)0x00, (char)0x00, // DataSize UI24 Length of the message. 121 (char)0x00, (char)0x00, (char)0x00, // DataSize UI24 Length of the message.
125 (char)0x00, (char)0x00, (char)0x00, // Timestamp UI24 Time in milliseconds at which the data in this tag applies. 122 (char)0x00, (char)0x00, (char)0x00, // Timestamp UI24 Time in milliseconds at which the data in this tag applies.
126 (char)0x00, // TimestampExtended UI8 123 (char)0x00, // TimestampExtended UI8
127 (char)0x00, (char)0x00, (char)0x00, // StreamID UI24 Always 0. 124 (char)0x00, (char)0x00, (char)0x00, // StreamID UI24 Always 0.
128 - }; 125 + };*/
129 126
130 // write data size. 127 // write data size.
131 - if ((ret = tag_stream->initialize(tag_header + 1, 3)) != ERROR_SUCCESS) { 128 + if ((ret = tag_stream->initialize(tag_header, 8)) != ERROR_SUCCESS) {
132 return ret; 129 return ret;
133 } 130 }
  131 + tag_stream->write_1bytes(type);
134 tag_stream->write_3bytes(size); 132 tag_stream->write_3bytes(size);
  133 + tag_stream->write_3bytes(0x00);
  134 + tag_stream->write_1bytes(0x00);
135 135
136 if ((ret = write_tag(tag_header, sizeof(tag_header), data, size)) != ERROR_SUCCESS) { 136 if ((ret = write_tag(tag_header, sizeof(tag_header), data, size)) != ERROR_SUCCESS) {
137 if (!srs_is_client_gracefully_close(ret)) { 137 if (!srs_is_client_gracefully_close(ret)) {
@@ -152,18 +152,19 @@ int SrsFlvEncoder::write_audio(int64_t timestamp, char* data, int size) @@ -152,18 +152,19 @@ int SrsFlvEncoder::write_audio(int64_t timestamp, char* data, int size)
152 timestamp &= 0x7fffffff; 152 timestamp &= 0x7fffffff;
153 153
154 // 11bytes tag header 154 // 11bytes tag header
155 - char tag_header[] = { 155 + /*char tag_header[] = {
156 (char)SrsCodecFlvTagAudio, // TagType UB [5], 8 = audio 156 (char)SrsCodecFlvTagAudio, // TagType UB [5], 8 = audio
157 (char)0x00, (char)0x00, (char)0x00, // DataSize UI24 Length of the message. 157 (char)0x00, (char)0x00, (char)0x00, // DataSize UI24 Length of the message.
158 (char)0x00, (char)0x00, (char)0x00, // Timestamp UI24 Time in milliseconds at which the data in this tag applies. 158 (char)0x00, (char)0x00, (char)0x00, // Timestamp UI24 Time in milliseconds at which the data in this tag applies.
159 (char)0x00, // TimestampExtended UI8 159 (char)0x00, // TimestampExtended UI8
160 (char)0x00, (char)0x00, (char)0x00, // StreamID UI24 Always 0. 160 (char)0x00, (char)0x00, (char)0x00, // StreamID UI24 Always 0.
161 - }; 161 + };*/
162 162
163 // write data size. 163 // write data size.
164 - if ((ret = tag_stream->initialize(tag_header + 1, 7)) != ERROR_SUCCESS) { 164 + if ((ret = tag_stream->initialize(tag_header, 8)) != ERROR_SUCCESS) {
165 return ret; 165 return ret;
166 } 166 }
  167 + tag_stream->write_1bytes(SrsCodecFlvTagAudio);
167 tag_stream->write_3bytes(size); 168 tag_stream->write_3bytes(size);
168 tag_stream->write_3bytes((int32_t)timestamp); 169 tag_stream->write_3bytes((int32_t)timestamp);
169 // default to little-endian 170 // default to little-endian
@@ -188,18 +189,19 @@ int SrsFlvEncoder::write_video(int64_t timestamp, char* data, int size) @@ -188,18 +189,19 @@ int SrsFlvEncoder::write_video(int64_t timestamp, char* data, int size)
188 timestamp &= 0x7fffffff; 189 timestamp &= 0x7fffffff;
189 190
190 // 11bytes tag header 191 // 11bytes tag header
191 - char tag_header[] = { 192 + /*char tag_header[] = {
192 (char)SrsCodecFlvTagVideo, // TagType UB [5], 9 = video 193 (char)SrsCodecFlvTagVideo, // TagType UB [5], 9 = video
193 (char)0x00, (char)0x00, (char)0x00, // DataSize UI24 Length of the message. 194 (char)0x00, (char)0x00, (char)0x00, // DataSize UI24 Length of the message.
194 (char)0x00, (char)0x00, (char)0x00, // Timestamp UI24 Time in milliseconds at which the data in this tag applies. 195 (char)0x00, (char)0x00, (char)0x00, // Timestamp UI24 Time in milliseconds at which the data in this tag applies.
195 (char)0x00, // TimestampExtended UI8 196 (char)0x00, // TimestampExtended UI8
196 (char)0x00, (char)0x00, (char)0x00, // StreamID UI24 Always 0. 197 (char)0x00, (char)0x00, (char)0x00, // StreamID UI24 Always 0.
197 - }; 198 + };*/
198 199
199 // write data size. 200 // write data size.
200 - if ((ret = tag_stream->initialize(tag_header + 1, 7)) != ERROR_SUCCESS) { 201 + if ((ret = tag_stream->initialize(tag_header, 8)) != ERROR_SUCCESS) {
201 return ret; 202 return ret;
202 } 203 }
  204 + tag_stream->write_1bytes(SrsCodecFlvTagVideo);
203 tag_stream->write_3bytes(size); 205 tag_stream->write_3bytes(size);
204 tag_stream->write_3bytes((int32_t)timestamp); 206 tag_stream->write_3bytes((int32_t)timestamp);
205 // default to little-endian 207 // default to little-endian
@@ -35,6 +35,9 @@ class SrsStream; @@ -35,6 +35,9 @@ class SrsStream;
35 class SrsFileWriter; 35 class SrsFileWriter;
36 class SrsFileReader; 36 class SrsFileReader;
37 37
  38 +#define SRS_FLV_TAG_HEADER_SIZE 11
  39 +#define SRS_FLV_PREVIOUS_TAG_SIZE 4
  40 +
38 /** 41 /**
39 * encode data to flv file. 42 * encode data to flv file.
40 */ 43 */
@@ -44,6 +47,7 @@ private: @@ -44,6 +47,7 @@ private:
44 SrsFileWriter* _fs; 47 SrsFileWriter* _fs;
45 private: 48 private:
46 SrsStream* tag_stream; 49 SrsStream* tag_stream;
  50 + char tag_header[SRS_FLV_TAG_HEADER_SIZE];
47 public: 51 public:
48 SrsFlvEncoder(); 52 SrsFlvEncoder();
49 virtual ~SrsFlvEncoder(); 53 virtual ~SrsFlvEncoder();