fix #85, fix the segment-dvr sequence header missing. 0.9.187.
正在显示
4 个修改的文件
包含
38 行增加
和
1 行删除
@@ -207,6 +207,7 @@ Supported operating systems and hardware: | @@ -207,6 +207,7 @@ Supported operating systems and hardware: | ||
207 | * 2013-10-17, Created.<br/> | 207 | * 2013-10-17, Created.<br/> |
208 | 208 | ||
209 | ## History | 209 | ## History |
210 | +* v1.0, 2014-08-03, fix [#85](https://github.com/winlinvip/simple-rtmp-server/issues/85), fix the segment-dvr sequence header missing. 0.9.187. | ||
210 | * v1.0, 2014-08-03, fix [#145](https://github.com/winlinvip/simple-rtmp-server/issues/145), refine ffmpeg log, check abitrate for libaacplus. 0.9.186. | 211 | * v1.0, 2014-08-03, fix [#145](https://github.com/winlinvip/simple-rtmp-server/issues/145), refine ffmpeg log, check abitrate for libaacplus. 0.9.186. |
211 | * v1.0, 2014-08-03, fix [#143](https://github.com/winlinvip/simple-rtmp-server/issues/143), fix retrieve sys stat bug for all linux. 0.9.185. | 212 | * v1.0, 2014-08-03, fix [#143](https://github.com/winlinvip/simple-rtmp-server/issues/143), fix retrieve sys stat bug for all linux. 0.9.185. |
212 | * v1.0, 2014-08-02, fix [#138](https://github.com/winlinvip/simple-rtmp-server/issues/138), fix http hooks bug, regression bug. 0.9.184. | 213 | * v1.0, 2014-08-02, fix [#138](https://github.com/winlinvip/simple-rtmp-server/issues/138), fix http hooks bug, regression bug. 0.9.184. |
@@ -399,10 +399,13 @@ void SrsDvrSessionPlan::on_unpublish() | @@ -399,10 +399,13 @@ void SrsDvrSessionPlan::on_unpublish() | ||
399 | SrsDvrSegmentPlan::SrsDvrSegmentPlan() | 399 | SrsDvrSegmentPlan::SrsDvrSegmentPlan() |
400 | { | 400 | { |
401 | segment_duration = -1; | 401 | segment_duration = -1; |
402 | + sh_video = sh_audio = NULL; | ||
402 | } | 403 | } |
403 | 404 | ||
404 | SrsDvrSegmentPlan::~SrsDvrSegmentPlan() | 405 | SrsDvrSegmentPlan::~SrsDvrSegmentPlan() |
405 | { | 406 | { |
407 | + srs_freep(sh_video); | ||
408 | + srs_freep(sh_audio); | ||
406 | } | 409 | } |
407 | 410 | ||
408 | int SrsDvrSegmentPlan::initialize(SrsSource* source, SrsRequest* req) | 411 | int SrsDvrSegmentPlan::initialize(SrsSource* source, SrsRequest* req) |
@@ -445,6 +448,26 @@ void SrsDvrSegmentPlan::on_unpublish() | @@ -445,6 +448,26 @@ void SrsDvrSegmentPlan::on_unpublish() | ||
445 | dvr_enabled = false; | 448 | dvr_enabled = false; |
446 | } | 449 | } |
447 | 450 | ||
451 | +int SrsDvrSegmentPlan::on_audio(SrsSharedPtrMessage* audio) | ||
452 | +{ | ||
453 | + if (SrsFlvCodec::audio_is_sequence_header(audio->payload, audio->size)) { | ||
454 | + srs_freep(sh_audio); | ||
455 | + sh_audio = audio->copy(); | ||
456 | + } | ||
457 | + | ||
458 | + return SrsDvrPlan::on_audio(audio); | ||
459 | +} | ||
460 | + | ||
461 | +int SrsDvrSegmentPlan::on_video(SrsSharedPtrMessage* video) | ||
462 | +{ | ||
463 | + if (SrsFlvCodec::video_is_sequence_header(video->payload, video->size)) { | ||
464 | + srs_freep(sh_video); | ||
465 | + sh_video = video->copy(); | ||
466 | + } | ||
467 | + | ||
468 | + return SrsDvrPlan::on_video(video); | ||
469 | +} | ||
470 | + | ||
448 | int SrsDvrSegmentPlan::update_duration(SrsSharedPtrMessage* msg) | 471 | int SrsDvrSegmentPlan::update_duration(SrsSharedPtrMessage* msg) |
449 | { | 472 | { |
450 | int ret = ERROR_SUCCESS; | 473 | int ret = ERROR_SUCCESS; |
@@ -463,9 +486,18 @@ int SrsDvrSegmentPlan::update_duration(SrsSharedPtrMessage* msg) | @@ -463,9 +486,18 @@ int SrsDvrSegmentPlan::update_duration(SrsSharedPtrMessage* msg) | ||
463 | } | 486 | } |
464 | on_unpublish(); | 487 | on_unpublish(); |
465 | 488 | ||
489 | + // open new flv file | ||
466 | if ((ret = open_new_segment()) != ERROR_SUCCESS) { | 490 | if ((ret = open_new_segment()) != ERROR_SUCCESS) { |
467 | return ret; | 491 | return ret; |
468 | } | 492 | } |
493 | + | ||
494 | + // update sequence header | ||
495 | + if (sh_video && (ret = SrsDvrPlan::on_video(sh_video)) != ERROR_SUCCESS) { | ||
496 | + return ret; | ||
497 | + } | ||
498 | + if (sh_audio && (ret = SrsDvrPlan::on_audio(sh_audio)) != ERROR_SUCCESS) { | ||
499 | + return ret; | ||
500 | + } | ||
469 | } | 501 | } |
470 | 502 | ||
471 | return ret; | 503 | return ret; |
@@ -161,6 +161,8 @@ class SrsDvrSegmentPlan : public SrsDvrPlan | @@ -161,6 +161,8 @@ class SrsDvrSegmentPlan : public SrsDvrPlan | ||
161 | private: | 161 | private: |
162 | // in config, in ms | 162 | // in config, in ms |
163 | int segment_duration; | 163 | int segment_duration; |
164 | + SrsSharedPtrMessage* sh_audio; | ||
165 | + SrsSharedPtrMessage* sh_video; | ||
164 | public: | 166 | public: |
165 | SrsDvrSegmentPlan(); | 167 | SrsDvrSegmentPlan(); |
166 | virtual ~SrsDvrSegmentPlan(); | 168 | virtual ~SrsDvrSegmentPlan(); |
@@ -168,6 +170,8 @@ public: | @@ -168,6 +170,8 @@ public: | ||
168 | virtual int initialize(SrsSource* source, SrsRequest* req); | 170 | virtual int initialize(SrsSource* source, SrsRequest* req); |
169 | virtual int on_publish(); | 171 | virtual int on_publish(); |
170 | virtual void on_unpublish(); | 172 | virtual void on_unpublish(); |
173 | + virtual int on_audio(SrsSharedPtrMessage* audio); | ||
174 | + virtual int on_video(SrsSharedPtrMessage* video); | ||
171 | private: | 175 | private: |
172 | virtual int update_duration(SrsSharedPtrMessage* msg); | 176 | virtual int update_duration(SrsSharedPtrMessage* msg); |
173 | }; | 177 | }; |
@@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
31 | // current release version | 31 | // current release version |
32 | #define VERSION_MAJOR "0" | 32 | #define VERSION_MAJOR "0" |
33 | #define VERSION_MINOR "9" | 33 | #define VERSION_MINOR "9" |
34 | -#define VERSION_REVISION "186" | 34 | +#define VERSION_REVISION "187" |
35 | #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION | 35 | #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION |
36 | // server info. | 36 | // server info. |
37 | #define RTMP_SIG_SRS_KEY "SRS" | 37 | #define RTMP_SIG_SRS_KEY "SRS" |
-
请 注册 或 登录 后发表评论