diff --git a/trunk/src/app/srs_app_mpegts_udp.cpp b/trunk/src/app/srs_app_mpegts_udp.cpp index 5efba53ef..8248bbbe6 100644 --- a/trunk/src/app/srs_app_mpegts_udp.cpp +++ b/trunk/src/app/srs_app_mpegts_udp.cpp @@ -388,6 +388,8 @@ int SrsMpegtsOverUdp::on_ts_video(SrsTsMessage* msg, SrsStream* avs) // for pps if (avc->is_pps(frame, frame_size)) { + got_sps_pps = true; + std::string pps; if ((ret = avc->pps_demux(frame, frame_size, pps)) != ERROR_SUCCESS) { return ret; @@ -405,21 +407,14 @@ int SrsMpegtsOverUdp::on_ts_video(SrsTsMessage* msg, SrsStream* avs) continue; } - // regenerat the ibp frame. - if (!avs->empty()) { - ibpframe = avs->data() + avs->pos(); - ibpframe_size = avs->size() - avs->pos(); - } else { - srs_info("mpegts: sps/pps frame consumed."); + // ibp frame. + srs_info("mpegts: demux avc ibp frame size=%d, dts=%d", ibpframe_size, dts); + if ((ret = write_h264_ipb_frame(frame, frame_size, dts, pts)) != ERROR_SUCCESS) { return ret; } - - break; } - - // ibp frame. - srs_info("mpegts: demux avc ibp frame size=%d, dts=%d", ibpframe_size, dts); - return write_h264_ipb_frame(ibpframe, ibpframe_size, dts, pts); + + return ret; } int SrsMpegtsOverUdp::write_h264_sps_pps(u_int32_t dts, u_int32_t pts) diff --git a/trunk/src/app/srs_app_thread.cpp b/trunk/src/app/srs_app_thread.cpp index 0b38c4d44..f37e49d70 100644 --- a/trunk/src/app/srs_app_thread.cpp +++ b/trunk/src/app/srs_app_thread.cpp @@ -210,11 +210,11 @@ failed: } } - handler->on_thread_stop(); - srs_info("thread %s cycle finished", _name); - // readly terminated now. really_terminated = true; + + handler->on_thread_stop(); + srs_info("thread %s cycle finished", _name); } void* SrsThread::thread_fun(void* arg) diff --git a/trunk/src/kernel/srs_kernel_codec.cpp b/trunk/src/kernel/srs_kernel_codec.cpp index 20f636276..f695b4f49 100644 --- a/trunk/src/kernel/srs_kernel_codec.cpp +++ b/trunk/src/kernel/srs_kernel_codec.cpp @@ -91,8 +91,8 @@ string srs_codec_aac_object2str(SrsAacObjectType aac_object) { switch (aac_object) { case SrsAacObjectTypeAacMain: return "Main"; - case SrsAacObjectTypeHE: return "HE"; - case SrsAacObjectTypeHEV2: return "HEv2"; + case SrsAacObjectTypeAacHE: return "HE"; + case SrsAacObjectTypeAacHEV2: return "HEv2"; case SrsAacObjectTypeAacLC: return "LC"; case SrsAacObjectTypeAacSSR: return "SSR"; default: return "Other"; @@ -113,8 +113,8 @@ SrsAacProfile srs_codec_aac_rtmp2ts(SrsAacObjectType object_type) { switch (object_type) { case SrsAacObjectTypeAacMain: return SrsAacProfileMain; - case SrsAacObjectTypeHE: - case SrsAacObjectTypeHEV2: + case SrsAacObjectTypeAacHE: + case SrsAacObjectTypeAacHEV2: case SrsAacObjectTypeAacLC: return SrsAacProfileLC; case SrsAacObjectTypeAacSSR: return SrsAacProfileSSR; default: return SrsAacProfileReserved; diff --git a/trunk/src/kernel/srs_kernel_codec.hpp b/trunk/src/kernel/srs_kernel_codec.hpp index 033484ef3..b619bb9e1 100644 --- a/trunk/src/kernel/srs_kernel_codec.hpp +++ b/trunk/src/kernel/srs_kernel_codec.hpp @@ -406,9 +406,9 @@ enum SrsAacObjectType SrsAacObjectTypeAacSSR = 3, // AAC HE = LC+SBR - SrsAacObjectTypeHE = 5, + SrsAacObjectTypeAacHE = 5, // AAC HEv2 = LC+SBR+PS - SrsAacObjectTypeHEV2 = 29, + SrsAacObjectTypeAacHEV2 = 29, }; std::string srs_codec_aac_object2str(SrsAacObjectType aac_object); // ts/hls/adts audio header profile to RTMP sequence header object type. diff --git a/trunk/src/kernel/srs_kernel_flv.cpp b/trunk/src/kernel/srs_kernel_flv.cpp index 7d1923266..d34cb30fb 100644 --- a/trunk/src/kernel/srs_kernel_flv.cpp +++ b/trunk/src/kernel/srs_kernel_flv.cpp @@ -103,6 +103,7 @@ int SrsFlvEncoder::write_header(char flv_header[9]) return ret; } + // previous tag size. char pts[] = { (char)0x00, (char)0x00, (char)0x00, (char)0x00 }; if ((ret = _fs->write(pts, 4, NULL)) != ERROR_SUCCESS) { return ret;