mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-29 14:45:55 +08:00
优化时间戳修正逻辑
This commit is contained in:
parent
e7727e7e9b
commit
43608585a1
@ -76,8 +76,6 @@ void FlvMuxer::start(const EventPoller::Ptr &poller,const RtmpMediaSource::Ptr &
|
|||||||
}
|
}
|
||||||
|
|
||||||
void FlvMuxer::onWriteFlvHeader(const RtmpMediaSource::Ptr &mediaSrc) {
|
void FlvMuxer::onWriteFlvHeader(const RtmpMediaSource::Ptr &mediaSrc) {
|
||||||
CLEAR_ARR(_aui32FirstStamp);
|
|
||||||
|
|
||||||
//发送flv文件头
|
//发送flv文件头
|
||||||
char flv_file_header[] = "FLV\x1\x5\x0\x0\x0\x9"; // have audio and have video
|
char flv_file_header[] = "FLV\x1\x5\x0\x0\x0\x9"; // have audio and have video
|
||||||
bool is_have_audio = false,is_have_video = false;
|
bool is_have_audio = false,is_have_video = false;
|
||||||
@ -158,20 +156,9 @@ void FlvMuxer::onWriteFlvTag(uint8_t ui8Type, const Buffer::Ptr &buffer, uint32_
|
|||||||
}
|
}
|
||||||
|
|
||||||
void FlvMuxer::onWriteRtmp(const RtmpPacket::Ptr &pkt) {
|
void FlvMuxer::onWriteRtmp(const RtmpPacket::Ptr &pkt) {
|
||||||
auto modifiedStamp = pkt->timeStamp;
|
int64_t dts_out;
|
||||||
auto &firstStamp = _aui32FirstStamp[pkt->typeId % 2];
|
_stamp[pkt->typeId % 2].revise(pkt->timeStamp, 0, dts_out, dts_out);
|
||||||
if(!firstStamp){
|
onWriteFlvTag(pkt, dts_out);
|
||||||
firstStamp = modifiedStamp;
|
|
||||||
}
|
|
||||||
if(modifiedStamp >= firstStamp){
|
|
||||||
//计算时间戳增量
|
|
||||||
modifiedStamp -= firstStamp;
|
|
||||||
}else{
|
|
||||||
//发生回环,重新计算时间戳增量
|
|
||||||
CLEAR_ARR(_aui32FirstStamp);
|
|
||||||
modifiedStamp = 0;
|
|
||||||
}
|
|
||||||
onWriteFlvTag(pkt, modifiedStamp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FlvMuxer::stop() {
|
void FlvMuxer::stop() {
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "Rtmp/Rtmp.h"
|
#include "Rtmp/Rtmp.h"
|
||||||
#include "Rtmp/RtmpMediaSource.h"
|
#include "Rtmp/RtmpMediaSource.h"
|
||||||
#include "Network/Socket.h"
|
#include "Network/Socket.h"
|
||||||
|
#include "MediaFile/Stamp.h"
|
||||||
using namespace toolkit;
|
using namespace toolkit;
|
||||||
|
|
||||||
namespace mediakit {
|
namespace mediakit {
|
||||||
@ -52,7 +53,8 @@ private:
|
|||||||
void onWriteFlvTag(uint8_t ui8Type, const Buffer::Ptr &buffer, uint32_t ui32TimeStamp);
|
void onWriteFlvTag(uint8_t ui8Type, const Buffer::Ptr &buffer, uint32_t ui32TimeStamp);
|
||||||
private:
|
private:
|
||||||
RtmpMediaSource::RingType::RingReader::Ptr _ring_reader;
|
RtmpMediaSource::RingType::RingReader::Ptr _ring_reader;
|
||||||
uint32_t _aui32FirstStamp[2] = {0};
|
//时间戳修整器
|
||||||
|
Stamp _stamp[2];
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user