winlin

Merge branch '2.0release' into develop

@@ -388,6 +388,8 @@ int SrsMpegtsOverUdp::on_ts_video(SrsTsMessage* msg, SrsStream* avs) @@ -388,6 +388,8 @@ int SrsMpegtsOverUdp::on_ts_video(SrsTsMessage* msg, SrsStream* avs)
388 388
389 // for pps 389 // for pps
390 if (avc->is_pps(frame, frame_size)) { 390 if (avc->is_pps(frame, frame_size)) {
  391 + got_sps_pps = true;
  392 +
391 std::string pps; 393 std::string pps;
392 if ((ret = avc->pps_demux(frame, frame_size, pps)) != ERROR_SUCCESS) { 394 if ((ret = avc->pps_demux(frame, frame_size, pps)) != ERROR_SUCCESS) {
393 return ret; 395 return ret;
@@ -405,21 +407,14 @@ int SrsMpegtsOverUdp::on_ts_video(SrsTsMessage* msg, SrsStream* avs) @@ -405,21 +407,14 @@ int SrsMpegtsOverUdp::on_ts_video(SrsTsMessage* msg, SrsStream* avs)
405 continue; 407 continue;
406 } 408 }
407 409
408 - // regenerat the ibp frame.  
409 - if (!avs->empty()) {  
410 - ibpframe = avs->data() + avs->pos();  
411 - ibpframe_size = avs->size() - avs->pos();  
412 - } else {  
413 - srs_info("mpegts: sps/pps frame consumed."); 410 + // ibp frame.
  411 + srs_info("mpegts: demux avc ibp frame size=%d, dts=%d", ibpframe_size, dts);
  412 + if ((ret = write_h264_ipb_frame(frame, frame_size, dts, pts)) != ERROR_SUCCESS) {
414 return ret; 413 return ret;
415 } 414 }
416 -  
417 - break;  
418 } 415 }
419 416
420 - // ibp frame.  
421 - srs_info("mpegts: demux avc ibp frame size=%d, dts=%d", ibpframe_size, dts);  
422 - return write_h264_ipb_frame(ibpframe, ibpframe_size, dts, pts); 417 + return ret;
423 } 418 }
424 419
425 int SrsMpegtsOverUdp::write_h264_sps_pps(u_int32_t dts, u_int32_t pts) 420 int SrsMpegtsOverUdp::write_h264_sps_pps(u_int32_t dts, u_int32_t pts)
@@ -210,11 +210,11 @@ failed: @@ -210,11 +210,11 @@ failed:
210 } 210 }
211 } 211 }
212 212
213 - handler->on_thread_stop();  
214 - srs_info("thread %s cycle finished", _name);  
215 -  
216 // readly terminated now. 213 // readly terminated now.
217 really_terminated = true; 214 really_terminated = true;
  215 +
  216 + handler->on_thread_stop();
  217 + srs_info("thread %s cycle finished", _name);
218 } 218 }
219 219
220 void* SrsThread::thread_fun(void* arg) 220 void* SrsThread::thread_fun(void* arg)
@@ -91,8 +91,8 @@ string srs_codec_aac_object2str(SrsAacObjectType aac_object) @@ -91,8 +91,8 @@ string srs_codec_aac_object2str(SrsAacObjectType aac_object)
91 { 91 {
92 switch (aac_object) { 92 switch (aac_object) {
93 case SrsAacObjectTypeAacMain: return "Main"; 93 case SrsAacObjectTypeAacMain: return "Main";
94 - case SrsAacObjectTypeHE: return "HE";  
95 - case SrsAacObjectTypeHEV2: return "HEv2"; 94 + case SrsAacObjectTypeAacHE: return "HE";
  95 + case SrsAacObjectTypeAacHEV2: return "HEv2";
96 case SrsAacObjectTypeAacLC: return "LC"; 96 case SrsAacObjectTypeAacLC: return "LC";
97 case SrsAacObjectTypeAacSSR: return "SSR"; 97 case SrsAacObjectTypeAacSSR: return "SSR";
98 default: return "Other"; 98 default: return "Other";
@@ -113,8 +113,8 @@ SrsAacProfile srs_codec_aac_rtmp2ts(SrsAacObjectType object_type) @@ -113,8 +113,8 @@ SrsAacProfile srs_codec_aac_rtmp2ts(SrsAacObjectType object_type)
113 { 113 {
114 switch (object_type) { 114 switch (object_type) {
115 case SrsAacObjectTypeAacMain: return SrsAacProfileMain; 115 case SrsAacObjectTypeAacMain: return SrsAacProfileMain;
116 - case SrsAacObjectTypeHE:  
117 - case SrsAacObjectTypeHEV2: 116 + case SrsAacObjectTypeAacHE:
  117 + case SrsAacObjectTypeAacHEV2:
118 case SrsAacObjectTypeAacLC: return SrsAacProfileLC; 118 case SrsAacObjectTypeAacLC: return SrsAacProfileLC;
119 case SrsAacObjectTypeAacSSR: return SrsAacProfileSSR; 119 case SrsAacObjectTypeAacSSR: return SrsAacProfileSSR;
120 default: return SrsAacProfileReserved; 120 default: return SrsAacProfileReserved;
@@ -406,9 +406,9 @@ enum SrsAacObjectType @@ -406,9 +406,9 @@ enum SrsAacObjectType
406 SrsAacObjectTypeAacSSR = 3, 406 SrsAacObjectTypeAacSSR = 3,
407 407
408 // AAC HE = LC+SBR 408 // AAC HE = LC+SBR
409 - SrsAacObjectTypeHE = 5, 409 + SrsAacObjectTypeAacHE = 5,
410 // AAC HEv2 = LC+SBR+PS 410 // AAC HEv2 = LC+SBR+PS
411 - SrsAacObjectTypeHEV2 = 29, 411 + SrsAacObjectTypeAacHEV2 = 29,
412 }; 412 };
413 std::string srs_codec_aac_object2str(SrsAacObjectType aac_object); 413 std::string srs_codec_aac_object2str(SrsAacObjectType aac_object);
414 // ts/hls/adts audio header profile to RTMP sequence header object type. 414 // ts/hls/adts audio header profile to RTMP sequence header object type.
@@ -103,6 +103,7 @@ int SrsFlvEncoder::write_header(char flv_header[9]) @@ -103,6 +103,7 @@ int SrsFlvEncoder::write_header(char flv_header[9])
103 return ret; 103 return ret;
104 } 104 }
105 105
  106 + // previous tag size.
106 char pts[] = { (char)0x00, (char)0x00, (char)0x00, (char)0x00 }; 107 char pts[] = { (char)0x00, (char)0x00, (char)0x00, (char)0x00 };
107 if ((ret = _fs->write(pts, 4, NULL)) != ERROR_SUCCESS) { 108 if ((ret = _fs->write(pts, 4, NULL)) != ERROR_SUCCESS) {
108 return ret; 109 return ret;