diff --git a/src/Common/MediaSink.cpp b/src/Common/MediaSink.cpp index 95aa4681..b9d3be98 100644 --- a/src/Common/MediaSink.cpp +++ b/src/Common/MediaSink.cpp @@ -29,7 +29,7 @@ namespace mediakit{ void MediaSink::addTrack(const Track::Ptr &track_in) { - lock_guard lck(_mtx); + lock_guard lck(_mtx); //克隆Track,只拷贝其数据,不拷贝其数据转发关系 auto track = track_in->clone(); @@ -57,7 +57,7 @@ void MediaSink::addTrack(const Track::Ptr &track_in) { } void MediaSink::inputFrame(const Frame::Ptr &frame) { - lock_guard lck(_mtx); + lock_guard lck(_mtx); auto codec_id = frame->getCodecId(); auto it = _track_map.find(codec_id); if (it == _track_map.end()) { @@ -84,7 +84,7 @@ bool MediaSink::isAllTrackReady() const { } Track::Ptr MediaSink::getTrack(TrackType type) const { - lock_guard lck(_mtx); + lock_guard lck(_mtx); for (auto &pr : _track_map){ if(pr.second->getTrackType() == type){ return pr.second; diff --git a/src/Common/MediaSink.h b/src/Common/MediaSink.h index 5cc0d056..a57dac2b 100644 --- a/src/Common/MediaSink.h +++ b/src/Common/MediaSink.h @@ -93,7 +93,7 @@ protected: */ virtual void onTrackFrame(const Frame::Ptr &frame) {}; private: - mutable mutex _mtx; + mutable recursive_mutex _mtx; map _track_map; map > _trackReadyCallback; bool _allTrackReady = false; diff --git a/src/MediaFile/Mp4Maker.cpp b/src/MediaFile/Mp4Maker.cpp index 34396be2..9e579b4f 100644 --- a/src/MediaFile/Mp4Maker.cpp +++ b/src/MediaFile/Mp4Maker.cpp @@ -113,7 +113,7 @@ void Mp4Maker::inputAAC(void *pData, uint32_t ui32Length, uint32_t ui32TimeStamp void Mp4Maker::inputH264_l(void *pData, uint32_t ui32Length, uint32_t ui32Duration) { GET_CONFIG_AND_REGISTER(uint32_t,recordSec,Record::kFileSecond); - auto iType = ((uint8_t*)pData)[0] & 0x1F; + auto iType = ((uint8_t*)pData)[4] & 0x1F; if(iType == 5 && (_hMp4 == MP4_INVALID_FILE_HANDLE || _ticker.elapsedTime() > recordSec * 1000)){ //在I帧率处新建MP4文件 //如果文件未创建或者文件超过10分钟则创建新文件 diff --git a/src/Player/Track.h b/src/Player/Track.h index 81fea5c9..7ecb2058 100644 --- a/src/Player/Track.h +++ b/src/Player/Track.h @@ -238,28 +238,32 @@ public: case 5:{ //I if(!_sps.empty()){ - if(!_spsFrame){ + if(!_spsFrame) + { H264Frame::Ptr insertFrame = std::make_shared(); - insertFrame->timeStamp = frame->stamp(); insertFrame->type = 7; - insertFrame->buffer.assign("\x0\x0\x0\x1"); + insertFrame->timeStamp = frame->stamp(); + insertFrame->buffer.assign("\x0\x0\x0\x1",4); insertFrame->buffer.append(_sps); insertFrame->iPrefixSize = 4; _spsFrame = insertFrame; } + _spsFrame->timeStamp = frame->stamp(); VideoTrack::inputFrame(_spsFrame); } if(!_pps.empty()){ - if(!_ppsFrame){ + if(!_ppsFrame) + { H264Frame::Ptr insertFrame = std::make_shared(); - insertFrame->timeStamp = frame->stamp(); insertFrame->type = 8; - insertFrame->buffer.assign("\x0\x0\x0\x1"); + insertFrame->timeStamp = frame->stamp(); + insertFrame->buffer.assign("\x0\x0\x0\x1",4); insertFrame->buffer.append(_pps); insertFrame->iPrefixSize = 4; _ppsFrame = insertFrame; } + _ppsFrame->timeStamp = frame->stamp(); VideoTrack::inputFrame(_ppsFrame); } VideoTrack::inputFrame(frame);