diff --git a/README.md b/README.md index ba2bf5b4f..1ae751434 100755 --- a/README.md +++ b/README.md @@ -337,6 +337,7 @@ Remark: ## History +* v2.0, 2015-12-15, default hls_on_error to continue. 2.0.201 * v2.0, 2015-11-16, for [#518][bug #518] fix fd leak bug when fork. 2.0.200 * v2.0, 2015-11-05, for [#511][bug #511] fix bug for restart thread. 2.0.199 * v2.0, 2015-11-02, for [#515][bug #515] use srs_freepa and SrsAutoFreeA for array. 2.0.198 diff --git a/trunk/conf/full.conf b/trunk/conf/full.conf index e9e5789dd..0730a9ace 100644 --- a/trunk/conf/full.conf +++ b/trunk/conf/full.conf @@ -539,12 +539,12 @@ vhost with-hls.srs.com { # default: 60 hls_window 60; # the error strategy. canbe: - # ignore, when error ignore and disable hls. - # disconnect, when error disconnect the publish connection. - # continue, when error ignore and continue output hls. + # ignore, disable the hls. + # disconnect, require encoder republish. + # continue, ignore failed try to continue output hls. # @see https://github.com/ossrs/srs/issues/264 - # default: ignore - hls_on_error ignore; + # default: continue + hls_on_error continue; # the hls storage: disk, ram or both. # disk, to write hls m3u8/ts to disk. # ram, serve m3u8/ts in memory, which use embeded http server to delivery. diff --git a/trunk/src/app/srs_app_config.cpp b/trunk/src/app/srs_app_config.cpp index 9257b0869..f109c9fba 100644 --- a/trunk/src/app/srs_app_config.cpp +++ b/trunk/src/app/srs_app_config.cpp @@ -75,7 +75,7 @@ using namespace _srs_internal; #define SRS_CONF_DEFAULT_HLS_TD_RATIO 1.5 #define SRS_CONF_DEFAULT_HLS_AOF_RATIO 2.0 #define SRS_CONF_DEFAULT_HLS_WINDOW 60 -#define SRS_CONF_DEFAULT_HLS_ON_ERROR_IGNORE "ignore" +#define SRS_CONF_DEFAULT_HLS_ON_ERROR_IGNORE "continue" #define SRS_CONF_DEFAULT_HLS_ON_ERROR_DISCONNECT "disconnect" #define SRS_CONF_DEFAULT_HLS_ON_ERROR_CONTINUE "continue" #define SRS_CONF_DEFAULT_HLS_ON_ERROR SRS_CONF_DEFAULT_HLS_ON_ERROR_IGNORE diff --git a/trunk/src/app/srs_app_source.cpp b/trunk/src/app/srs_app_source.cpp old mode 100755 new mode 100644 index ca133d1b0..fa64ffcfb --- a/trunk/src/app/srs_app_source.cpp +++ b/trunk/src/app/srs_app_source.cpp @@ -1763,6 +1763,23 @@ int SrsSource::on_video(SrsCommonMessage* shared_video) return ret; } +bool srs_hls_can_continue(int ret, SrsSharedPtrMessage* sh, SrsSharedPtrMessage* video) +{ + // only continue for decode error. + if (ret != ERROR_HLS_DECODE_ERROR) { + return false; + } + + // when video size equals to sequence header, + // the video actually maybe a sequence header, + // continue to make ffmpeg happy. + if (sh && sh->size == video->size) { + return true; + } + + return false; +} + int SrsSource::on_video_imp(SrsSharedPtrMessage* msg) { int ret = ERROR_SUCCESS; @@ -1827,7 +1844,7 @@ int SrsSource::on_video_imp(SrsSharedPtrMessage* msg) ret = ERROR_SUCCESS; } else if (srs_config_hls_is_on_error_continue(hls_error_strategy)) { // compare the sequence header with video, continue when it's actually an sequence header. - if (ret == ERROR_HLS_DECODE_ERROR && cache_sh_video && cache_sh_video->size == msg->size) { + if (srs_hls_can_continue(ret, cache_sh_video, msg)) { srs_warn("the video is actually a sequence header, ignore this packet."); ret = ERROR_SUCCESS; } else { diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index c173b329c..1c16f7f9d 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR 2 #define VERSION_MINOR 0 -#define VERSION_REVISION 200 +#define VERSION_REVISION 201 // server info. #define RTMP_SIG_SRS_KEY "SRS"