fix #264, ignore the video NALU which is actually a sequence header to make HLS happy. 1.0.12

pull/549/head
winlin 10 years ago
parent 7737042795
commit 2e43a63bf4

@ -298,6 +298,7 @@ vhost with-hls.srs.com {
# the error strategy. canbe: # the error strategy. canbe:
# ignore, when error ignore and disable hls. # ignore, when error ignore and disable hls.
# disconnect, when error disconnect the publish connection. # disconnect, when error disconnect the publish connection.
# continue, when error ignore and continue output hls.
# @see https://github.com/winlinvip/simple-rtmp-server/issues/264 # @see https://github.com/winlinvip/simple-rtmp-server/issues/264
# default: ignore # default: ignore
hls_on_error ignore; hls_on_error ignore;

@ -50,6 +50,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define SRS_CONF_DEFAULT_HLS_WINDOW 60 #define SRS_CONF_DEFAULT_HLS_WINDOW 60
#define SRS_CONF_DEFAULT_HLS_ON_ERROR_IGNORE "ignore" #define SRS_CONF_DEFAULT_HLS_ON_ERROR_IGNORE "ignore"
#define SRS_CONF_DEFAULT_HLS_ON_ERROR_DISCONNECT "disconnect" #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 #define SRS_CONF_DEFAULT_HLS_ON_ERROR SRS_CONF_DEFAULT_HLS_ON_ERROR_IGNORE
#define SRS_CONF_DEFAULT_DVR_PATH "./objs/nginx/html" #define SRS_CONF_DEFAULT_DVR_PATH "./objs/nginx/html"
#define SRS_CONF_DEFAULT_DVR_PLAN_SESSION "session" #define SRS_CONF_DEFAULT_DVR_PLAN_SESSION "session"

@ -1067,6 +1067,15 @@ int SrsSource::on_audio(SrsMessage* __audio)
// ignore. // ignore.
ret = ERROR_SUCCESS; ret = ERROR_SUCCESS;
} else if (hls_error_strategy == SRS_CONF_DEFAULT_HLS_ON_ERROR_CONTINUE) {
// compare the sequence header with audio, continue when it's actually an sequence header.
if (ret == ERROR_HLS_DECODE_ERROR && cache_sh_audio && cache_sh_audio->size == msg.size) {
srs_warn("the audio is actually a sequence header, ignore this packet.");
ret = ERROR_SUCCESS;
} else {
srs_warn("hls continue audio failed. ret=%d", ret);
return ret;
}
} else { } else {
srs_warn("hls disconnect publisher for audio error. ret=%d", ret); srs_warn("hls disconnect publisher for audio error. ret=%d", ret);
return ret; return ret;
@ -1184,6 +1193,15 @@ int SrsSource::on_video(SrsMessage* __video)
// ignore. // ignore.
ret = ERROR_SUCCESS; ret = ERROR_SUCCESS;
} else if (hls_error_strategy == SRS_CONF_DEFAULT_HLS_ON_ERROR_CONTINUE) {
// 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) {
srs_warn("the video is actually a sequence header, ignore this packet.");
ret = ERROR_SUCCESS;
} else {
srs_warn("hls continue video failed. ret=%d", ret);
return ret;
}
} else { } else {
srs_warn("hls disconnect publisher for video error. ret=%d", ret); srs_warn("hls disconnect publisher for video error. ret=%d", ret);
return ret; return ret;

@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// current release version // current release version
#define VERSION_MAJOR 1 #define VERSION_MAJOR 1
#define VERSION_MINOR 0 #define VERSION_MINOR 0
#define VERSION_REVISION 11 #define VERSION_REVISION 12
// server info. // server info.
#define RTMP_SIG_SRS_KEY "SRS" #define RTMP_SIG_SRS_KEY "SRS"
#define RTMP_SIG_SRS_ROLE "origin/edge server" #define RTMP_SIG_SRS_ROLE "origin/edge server"

Loading…
Cancel
Save