@@ -199,6 +199,7 @@ SrsAvcAacCodec::SrsAvcAacCodec()
199199 pictureParameterSetLength = 0 ;
200200 pictureParameterSetNALUnit = NULL ;
201201
202+ payload_format = SrsAvcPayloadFormatGuess;
202203 stream = new SrsStream ();
203204}
204205
@@ -469,20 +470,42 @@ int SrsAvcAacCodec::video_avc_demux(char* data, int size, SrsCodecSample* sample
469470 srs_error (" avc decode failed, sequence header not found. ret=%d" , ret);
470471 return ret;
471472 }
472-
473- // One or more NALUs (Full frames are required)
474- // try "AnnexB" from H.264-AVC-ISO_IEC_14496-10.pdf, page 211.
475- if ((ret = avc_demux_annexb_format (stream, sample)) != ERROR_SUCCESS) {
476- // stop try when system error.
477- if (ret != ERROR_HLS_AVC_TRY_OTHERS) {
478- srs_error (" avc demux for annexb failed. ret=%d" , ret);
479- return ret;
473+
474+ // guess for the first time.
475+ if (payload_format == SrsAvcPayloadFormatGuess) {
476+ // One or more NALUs (Full frames are required)
477+ // try "AnnexB" from H.264-AVC-ISO_IEC_14496-10.pdf, page 211.
478+ if ((ret = avc_demux_annexb_format (stream, sample)) != ERROR_SUCCESS) {
479+ // stop try when system error.
480+ if (ret != ERROR_HLS_AVC_TRY_OTHERS) {
481+ srs_error (" avc demux for annexb failed. ret=%d" , ret);
482+ return ret;
483+ }
484+
485+ // try "ISO Base Media File Format" from H.264-AVC-ISO_IEC_14496-15.pdf, page 20
486+ if ((ret = avc_demux_ibmf_format (stream, sample)) != ERROR_SUCCESS) {
487+ return ret;
488+ } else {
489+ payload_format = SrsAvcPayloadFormatIbmf;
490+ srs_info (" hls guess avc payload is ibmf format." );
491+ }
492+ } else {
493+ payload_format = SrsAvcPayloadFormatAnnexb;
494+ srs_info (" hls guess avc payload is annexb format." );
480495 }
481-
496+ } else if (payload_format == SrsAvcPayloadFormatIbmf) {
482497 // try "ISO Base Media File Format" from H.264-AVC-ISO_IEC_14496-15.pdf, page 20
483498 if ((ret = avc_demux_ibmf_format (stream, sample)) != ERROR_SUCCESS) {
484499 return ret;
485500 }
501+ srs_info (" hls decode avc payload in ibmf format." );
502+ } else {
503+ // One or more NALUs (Full frames are required)
504+ // try "AnnexB" from H.264-AVC-ISO_IEC_14496-10.pdf, page 211.
505+ if ((ret = avc_demux_annexb_format (stream, sample)) != ERROR_SUCCESS) {
506+ return ret;
507+ }
508+ srs_info (" hls decode avc payload in annexb format." );
486509 }
487510 } else {
488511 // ignored.
0 commit comments