正在显示
5 个修改的文件
包含
16 行增加
和
20 行删除
| @@ -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; |
-
请 注册 或 登录 后发表评论