diff --git a/src/Extension/H264.cpp b/src/Extension/H264.cpp index 7a7acd33..ec220ea7 100644 --- a/src/Extension/H264.cpp +++ b/src/Extension/H264.cpp @@ -15,7 +15,10 @@ using namespace toolkit; namespace mediakit{ -static bool getAVCInfo(const char * sps,size_t sps_len,int &iVideoWidth, int &iVideoHeight, float &iVideoFps){ +static bool getAVCInfo(const char *sps, size_t sps_len,int &iVideoWidth, int &iVideoHeight, float &iVideoFps){ + if (sps_len < 4) { + return false; + } T_GetBitContext tGetBitBuf; T_SPS tH264SpsInfo; memset(&tGetBitBuf,0,sizeof(tGetBitBuf)); @@ -157,7 +160,10 @@ void H264Track::inputFrame(const Frame::Ptr &frame) { } void H264Track::onReady(){ - getAVCInfo(_sps,_width,_height,_fps); + if (!getAVCInfo(_sps, _width, _height, _fps)) { + _sps.clear(); + _pps.clear(); + } } Track::Ptr H264Track::clone() { diff --git a/src/Extension/H264Rtmp.cpp b/src/Extension/H264Rtmp.cpp index 3cd4d04f..ca58472a 100644 --- a/src/Extension/H264Rtmp.cpp +++ b/src/Extension/H264Rtmp.cpp @@ -221,6 +221,10 @@ void H264RtmpEncoder::inputFrame(const Frame::Ptr &frame) { } void H264RtmpEncoder::makeVideoConfigPkt() { + if (_sps.size() < 4) { + WarnL << "sps长度不足4字节"; + return; + } int8_t flags = FLV_CODEC_H264; flags |= (FLV_KEY_FRAME << 4); bool is_config = true; diff --git a/src/Extension/H265.cpp b/src/Extension/H265.cpp index db670bc5..48132a1d 100644 --- a/src/Extension/H265.cpp +++ b/src/Extension/H265.cpp @@ -186,7 +186,11 @@ void H265Track::inputFrame_l(const Frame::Ptr &frame) { } void H265Track::onReady() { - getHEVCInfo(_vps, _sps, _width, _height, _fps); + if (!getHEVCInfo(_vps, _sps, _width, _height, _fps)) { + _vps.clear(); + _sps.clear(); + _pps.clear(); + } } Track::Ptr H265Track::clone() {