mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-07-03 08:57:32 +08:00
Merge remote-tracking branch 'origin/master' into zqsong
This commit is contained in:
@@ -41,7 +41,7 @@ void MediaSink::addTrack(const Track::Ptr &track_in) {
|
||||
if(!strongSelf){
|
||||
return;
|
||||
}
|
||||
if(strongSelf->_allTrackReady){
|
||||
if(!strongSelf->_anyTrackUnReady){
|
||||
strongSelf->onTrackFrame(frame);
|
||||
}
|
||||
}));
|
||||
@@ -53,6 +53,7 @@ void MediaSink::addTrack(const Track::Ptr &track_in) {
|
||||
if(track->ready()){
|
||||
lam();
|
||||
}else{
|
||||
_anyTrackUnReady = true;
|
||||
_allTrackReady = false;
|
||||
_trackReadyCallback[codec_id] = lam;
|
||||
_ticker.resetTime();
|
||||
@@ -79,7 +80,7 @@ void MediaSink::inputFrame(const Frame::Ptr &frame) {
|
||||
|
||||
if(!_allTrackReady && (_trackReadyCallback.empty() || _ticker.elapsedTime() > MAX_WAIT_MS)){
|
||||
_allTrackReady = true;
|
||||
|
||||
_anyTrackUnReady = false;
|
||||
if(!_trackReadyCallback.empty()){
|
||||
//这是超时强制忽略未准备好的Track
|
||||
_trackReadyCallback.clear();
|
||||
|
||||
@@ -99,6 +99,7 @@ private:
|
||||
map<int,Track::Ptr> _track_map;
|
||||
map<int,function<void()> > _trackReadyCallback;
|
||||
bool _allTrackReady = false;
|
||||
bool _anyTrackUnReady = false;
|
||||
Ticker _ticker;
|
||||
};
|
||||
|
||||
|
||||
@@ -79,6 +79,16 @@ void MP4Muxer::onTrackFrame(const Frame::Ptr &frame) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(!_started){
|
||||
//还没开始
|
||||
if(frame->getTrackType() != TrackVideo || !frame->keyFrame()){
|
||||
//如果首帧是音频或者是视频但是不是i帧,那么不能开始写文件
|
||||
return;
|
||||
}
|
||||
//开始写文件
|
||||
_started = true;
|
||||
}
|
||||
|
||||
int with_nalu_size ;
|
||||
switch (frame->getCodecId()){
|
||||
case CodecH264:
|
||||
|
||||
@@ -80,6 +80,7 @@ private:
|
||||
uint32_t start_pts = 0;
|
||||
};
|
||||
map<CodecId,track_info> _codec_to_trackid;
|
||||
bool _started = false;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -89,10 +89,8 @@ void Mp4Maker::createFile() {
|
||||
try {
|
||||
_muxer = std::make_shared<MP4MuxerFile>(strFileTmp.data());
|
||||
for(auto &track :_tracks){
|
||||
if(track){
|
||||
//添加track
|
||||
_muxer->addTrack(track);
|
||||
}
|
||||
//添加track
|
||||
_muxer->addTrack(track);
|
||||
}
|
||||
_strFileTmp = strFileTmp;
|
||||
_strFile = strFile;
|
||||
|
||||
Reference in New Issue
Block a user