mirror of
https://github.com/ossrs/srs.git
synced 2025-02-14 12:21:55 +00:00
refine the hls, ignore packet when no sequence header. 2.0.179
This commit is contained in:
parent
3b65af9bd2
commit
b54f9b0f94
4 changed files with 30 additions and 17 deletions
|
@ -344,6 +344,7 @@ Remark:
|
|||
|
||||
### SRS 2.0 history
|
||||
|
||||
* v2.0, 2015-07-20, refine the hls, ignore packet when no sequence header. 2.0.179
|
||||
* v2.0, 2015-07-16, for [#441](https://github.com/simple-rtmp-server/srs/issues/441) use 30s timeout for first msg. 2.0.178
|
||||
* v2.0, 2015-07-14, refine hls disable the time jitter, support not mix monotonically increase. 2.0.177
|
||||
* v2.0, 2015-07-01, fix [#433](https://github.com/simple-rtmp-server/srs/issues/433) fix the sps parse bug. 2.0.176
|
||||
|
|
|
@ -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 178
|
||||
#define VERSION_REVISION 179
|
||||
|
||||
// server info.
|
||||
#define RTMP_SIG_SRS_KEY "SRS"
|
||||
|
|
|
@ -423,6 +423,16 @@ SrsAvcAacCodec::~SrsAvcAacCodec()
|
|||
srs_freep(pictureParameterSetNALUnit);
|
||||
}
|
||||
|
||||
bool SrsAvcAacCodec::is_avc_codec_ok()
|
||||
{
|
||||
return avc_extra_size > 0 && avc_extra_data;
|
||||
}
|
||||
|
||||
bool SrsAvcAacCodec::is_aac_codec_ok()
|
||||
{
|
||||
return aac_extra_size > 0 && aac_extra_data;
|
||||
}
|
||||
|
||||
int SrsAvcAacCodec::audio_aac_demux(char* data, int size, SrsCodecSample* sample)
|
||||
{
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
@ -441,7 +451,7 @@ int SrsAvcAacCodec::audio_aac_demux(char* data, int size, SrsCodecSample* sample
|
|||
// audio decode
|
||||
if (!stream->require(1)) {
|
||||
ret = ERROR_HLS_DECODE_ERROR;
|
||||
srs_error("audio codec decode sound_format failed. ret=%d", ret);
|
||||
srs_error("aac decode sound_format failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -468,13 +478,13 @@ int SrsAvcAacCodec::audio_aac_demux(char* data, int size, SrsCodecSample* sample
|
|||
// only support aac
|
||||
if (audio_codec_id != SrsCodecAudioAAC) {
|
||||
ret = ERROR_HLS_DECODE_ERROR;
|
||||
srs_error("audio codec only support mp3/aac codec. actual=%d, ret=%d", audio_codec_id, ret);
|
||||
srs_error("aac only support mp3/aac codec. actual=%d, ret=%d", audio_codec_id, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!stream->require(1)) {
|
||||
ret = ERROR_HLS_DECODE_ERROR;
|
||||
srs_error("audio codec decode aac_packet_type failed. ret=%d", ret);
|
||||
srs_error("aac decode aac_packet_type failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -497,16 +507,15 @@ int SrsAvcAacCodec::audio_aac_demux(char* data, int size, SrsCodecSample* sample
|
|||
}
|
||||
} else if (aac_packet_type == SrsCodecAudioTypeRawData) {
|
||||
// ensure the sequence header demuxed
|
||||
if (aac_extra_size <= 0 || !aac_extra_data) {
|
||||
ret = ERROR_HLS_DECODE_ERROR;
|
||||
srs_error("audio codec decode aac failed, sequence header not found. ret=%d", ret);
|
||||
if (!is_aac_codec_ok()) {
|
||||
srs_warn("aac ignore type=%d for no sequence header. ret=%d", aac_packet_type, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Raw AAC frame data in UI8 []
|
||||
// 6.3 Raw Data, aac-iso-13818-7.pdf, page 28
|
||||
if ((ret = sample->add_sample_unit(stream->data() + stream->pos(), stream->size() - stream->pos())) != ERROR_SUCCESS) {
|
||||
srs_error("audio codec add sample failed. ret=%d", ret);
|
||||
srs_error("aac add sample failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
} else {
|
||||
|
@ -536,7 +545,7 @@ int SrsAvcAacCodec::audio_aac_demux(char* data, int size, SrsCodecSample* sample
|
|||
};
|
||||
}
|
||||
|
||||
srs_info("audio decoded, type=%d, codec=%d, asize=%d, rate=%d, format=%d, size=%d",
|
||||
srs_info("aac decoded, type=%d, codec=%d, asize=%d, rate=%d, format=%d, size=%d",
|
||||
sound_type, audio_codec_id, sound_size, sound_rate, sound_format, size);
|
||||
|
||||
return ret;
|
||||
|
@ -636,7 +645,7 @@ int SrsAvcAacCodec::video_avc_demux(char* data, int size, SrsCodecSample* sample
|
|||
// video decode
|
||||
if (!stream->require(1)) {
|
||||
ret = ERROR_HLS_DECODE_ERROR;
|
||||
srs_error("video codec decode frame_type failed. ret=%d", ret);
|
||||
srs_error("avc decode frame_type failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -650,21 +659,21 @@ int SrsAvcAacCodec::video_avc_demux(char* data, int size, SrsCodecSample* sample
|
|||
// ignore info frame without error,
|
||||
// @see https://github.com/simple-rtmp-server/srs/issues/288#issuecomment-69863909
|
||||
if (sample->frame_type == SrsCodecVideoAVCFrameVideoInfoFrame) {
|
||||
srs_warn("video codec igone the info frame, ret=%d", ret);
|
||||
srs_warn("avc igone the info frame, ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
// only support h.264/avc
|
||||
if (codec_id != SrsCodecVideoAVC) {
|
||||
ret = ERROR_HLS_DECODE_ERROR;
|
||||
srs_error("video codec only support video h.264/avc codec. actual=%d, ret=%d", codec_id, ret);
|
||||
srs_error("avc only support video h.264/avc codec. actual=%d, ret=%d", codec_id, ret);
|
||||
return ret;
|
||||
}
|
||||
video_codec_id = codec_id;
|
||||
|
||||
if (!stream->require(4)) {
|
||||
ret = ERROR_HLS_DECODE_ERROR;
|
||||
srs_error("video codec decode avc_packet_type failed. ret=%d", ret);
|
||||
srs_error("avc decode avc_packet_type failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
int8_t avc_packet_type = stream->read_1bytes();
|
||||
|
@ -680,9 +689,8 @@ int SrsAvcAacCodec::video_avc_demux(char* data, int size, SrsCodecSample* sample
|
|||
}
|
||||
} else if (avc_packet_type == SrsCodecVideoAVCTypeNALU){
|
||||
// ensure the sequence header demuxed
|
||||
if (avc_extra_size <= 0 || !avc_extra_data) {
|
||||
ret = ERROR_HLS_DECODE_ERROR;
|
||||
srs_error("avc decode failed, sequence header not found. ret=%d", ret);
|
||||
if (!is_avc_codec_ok()) {
|
||||
srs_warn("avc ignore type=%d for no sequence header. ret=%d", avc_packet_type, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -738,7 +746,7 @@ int SrsAvcAacCodec::video_avc_demux(char* data, int size, SrsCodecSample* sample
|
|||
// ignored.
|
||||
}
|
||||
|
||||
srs_info("video decoded, type=%d, codec=%d, avc=%d, cts=%d, size=%d",
|
||||
srs_info("avc decoded, type=%d, codec=%d, avc=%d, cts=%d, size=%d",
|
||||
frame_type, video_codec_id, avc_packet_type, composition_time, size);
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -608,6 +608,10 @@ public:
|
|||
public:
|
||||
SrsAvcAacCodec();
|
||||
virtual ~SrsAvcAacCodec();
|
||||
public:
|
||||
// whether avc or aac codec sequence header or extra data is decoded ok.
|
||||
virtual bool is_avc_codec_ok();
|
||||
virtual bool is_aac_codec_ok();
|
||||
// the following function used for hls to build the sample and codec.
|
||||
public:
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue