diff --git a/trunk/src/kernel/srs_kernel_codec.cpp b/trunk/src/kernel/srs_kernel_codec.cpp index 906bf46c1..116cfe754 100644 --- a/trunk/src/kernel/srs_kernel_codec.cpp +++ b/trunk/src/kernel/srs_kernel_codec.cpp @@ -696,7 +696,19 @@ int SrsAvcAacCodec::video_avc_demux(char* data, int size, SrsCodecSample* sample // One or more NALUs (Full frames are required) // try "AnnexB" from H.264-AVC-ISO_IEC_14496-10.pdf, page 211. if ((ret = avc_demux_annexb_format(stream, sample)) != ERROR_SUCCESS) { - return ret; + // ok, we guess out the payload is annexb, but maybe changed to ibmf. + if (ret != ERROR_HLS_AVC_TRY_OTHERS) { + srs_error("avc demux for annexb failed. ret=%d", ret); + return ret; + } + + // try "ISO Base Media File Format" from H.264-AVC-ISO_IEC_14496-15.pdf, page 20 + if ((ret = avc_demux_ibmf_format(stream, sample)) != ERROR_SUCCESS) { + return ret; + } else { + payload_format = SrsAvcPayloadFormatIbmf; + srs_warn("hls avc payload change from annexb to ibmf format."); + } } srs_info("hls decode avc payload in annexb format."); }