mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-07-05 02:38:10 +08:00
时间戳改为64位
This commit is contained in:
@@ -28,7 +28,7 @@ using namespace std;
|
||||
|
||||
namespace mediakit {
|
||||
|
||||
bool DevChannel::inputYUV(char *yuv[3], int linesize[3], uint32_t cts) {
|
||||
bool DevChannel::inputYUV(char *yuv[3], int linesize[3], uint64_t cts) {
|
||||
#ifdef ENABLE_X264
|
||||
//TimeTicker1(50);
|
||||
if (!_pH264Enc) {
|
||||
@@ -54,7 +54,7 @@ bool DevChannel::inputYUV(char *yuv[3], int linesize[3], uint32_t cts) {
|
||||
#endif //ENABLE_X264
|
||||
}
|
||||
|
||||
bool DevChannel::inputPCM(char* pcData, int iDataLen, uint32_t uiStamp) {
|
||||
bool DevChannel::inputPCM(char* pcData, int iDataLen, uint64_t uiStamp) {
|
||||
#ifdef ENABLE_FAAC
|
||||
if (!_pAacEnc) {
|
||||
_pAacEnc.reset(new AACEncoder());
|
||||
@@ -77,11 +77,11 @@ bool DevChannel::inputPCM(char* pcData, int iDataLen, uint32_t uiStamp) {
|
||||
#endif //ENABLE_FAAC
|
||||
}
|
||||
|
||||
bool DevChannel::inputH264(const char *data, int len, uint32_t dts, uint32_t pts) {
|
||||
if(dts == 0){
|
||||
dts = (uint32_t)_aTicker[0].elapsedTime();
|
||||
bool DevChannel::inputH264(const char *data, int len, uint64_t dts, uint64_t pts) {
|
||||
if (dts == 0) {
|
||||
dts = _aTicker[0].elapsedTime();
|
||||
}
|
||||
if(pts == 0){
|
||||
if (pts == 0) {
|
||||
pts = dts;
|
||||
}
|
||||
|
||||
@@ -96,11 +96,11 @@ bool DevChannel::inputH264(const char *data, int len, uint32_t dts, uint32_t pts
|
||||
return inputFrame(frame);
|
||||
}
|
||||
|
||||
bool DevChannel::inputH265(const char *data, int len, uint32_t dts, uint32_t pts) {
|
||||
if(dts == 0){
|
||||
dts = (uint32_t)_aTicker[0].elapsedTime();
|
||||
bool DevChannel::inputH265(const char *data, int len, uint64_t dts, uint64_t pts) {
|
||||
if (dts == 0) {
|
||||
dts = _aTicker[0].elapsedTime();
|
||||
}
|
||||
if(pts == 0){
|
||||
if (pts == 0) {
|
||||
pts = dts;
|
||||
}
|
||||
|
||||
@@ -129,9 +129,9 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
bool DevChannel::inputAAC(const char *data_without_adts, int len, uint32_t dts, const char *adts_header){
|
||||
bool DevChannel::inputAAC(const char *data_without_adts, int len, uint64_t dts, const char *adts_header){
|
||||
if (dts == 0) {
|
||||
dts = (uint32_t) _aTicker[1].elapsedTime();
|
||||
dts = _aTicker[1].elapsedTime();
|
||||
}
|
||||
|
||||
if (!adts_header) {
|
||||
@@ -152,9 +152,9 @@ bool DevChannel::inputAAC(const char *data_without_adts, int len, uint32_t dts,
|
||||
|
||||
}
|
||||
|
||||
bool DevChannel::inputAudio(const char *data, int len, uint32_t dts){
|
||||
bool DevChannel::inputAudio(const char *data, int len, uint64_t dts){
|
||||
if (dts == 0) {
|
||||
dts = (uint32_t) _aTicker[1].elapsedTime();
|
||||
dts = _aTicker[1].elapsedTime();
|
||||
}
|
||||
return inputFrame(std::make_shared<FrameFromPtr>(_audio->codecId, (char *) data, len, dts, 0));
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ public:
|
||||
* @param dts 解码时间戳,单位毫秒;等于0时内部会自动生成时间戳
|
||||
* @param pts 播放时间戳,单位毫秒;等于0时内部会赋值为dts
|
||||
*/
|
||||
bool inputH264(const char *data, int len, uint32_t dts, uint32_t pts = 0);
|
||||
bool inputH264(const char *data, int len, uint64_t dts, uint64_t pts = 0);
|
||||
|
||||
/**
|
||||
* 输入265帧
|
||||
@@ -84,7 +84,7 @@ public:
|
||||
* @param dts 解码时间戳,单位毫秒;等于0时内部会自动生成时间戳
|
||||
* @param pts 播放时间戳,单位毫秒;等于0时内部会赋值为dts
|
||||
*/
|
||||
bool inputH265(const char *data, int len, uint32_t dts, uint32_t pts = 0);
|
||||
bool inputH265(const char *data, int len, uint64_t dts, uint64_t pts = 0);
|
||||
|
||||
/**
|
||||
* 输入aac帧
|
||||
@@ -93,7 +93,7 @@ public:
|
||||
* @param dts 时间戳,单位毫秒
|
||||
* @param adts_header adts头
|
||||
*/
|
||||
bool inputAAC(const char *data_without_adts, int len, uint32_t dts, const char *adts_header);
|
||||
bool inputAAC(const char *data_without_adts, int len, uint64_t dts, const char *adts_header);
|
||||
|
||||
/**
|
||||
* 输入OPUS/G711音频帧
|
||||
@@ -101,7 +101,7 @@ public:
|
||||
* @param len 帧数据长度
|
||||
* @param dts 时间戳,单位毫秒
|
||||
*/
|
||||
bool inputAudio(const char *data, int len, uint32_t dts);
|
||||
bool inputAudio(const char *data, int len, uint64_t dts);
|
||||
|
||||
/**
|
||||
* 输入yuv420p视频帧,内部会完成编码并调用inputH264方法
|
||||
@@ -109,7 +109,7 @@ public:
|
||||
* @param linesize yuv420p数据linesize
|
||||
* @param cts 采集时间戳,单位毫秒
|
||||
*/
|
||||
bool inputYUV(char *yuv[3], int linesize[3], uint32_t cts);
|
||||
bool inputYUV(char *yuv[3], int linesize[3], uint64_t cts);
|
||||
|
||||
/**
|
||||
* 输入pcm数据,内部会完成编码并调用inputAAC方法
|
||||
@@ -117,7 +117,7 @@ public:
|
||||
* @param len pcm数据长度
|
||||
* @param cts 采集时间戳,单位毫秒
|
||||
*/
|
||||
bool inputPCM(char *data, int len, uint32_t cts);
|
||||
bool inputPCM(char *data, int len, uint64_t cts);
|
||||
|
||||
private:
|
||||
MediaOriginType getOriginType(MediaSource &sender) const override;
|
||||
|
||||
@@ -137,7 +137,7 @@ int64_t Stamp::getRelativeStamp() const {
|
||||
return _relative_stamp;
|
||||
}
|
||||
|
||||
bool DtsGenerator::getDts(uint32_t pts, uint32_t &dts){
|
||||
bool DtsGenerator::getDts(uint64_t pts, uint64_t &dts){
|
||||
bool ret = false;
|
||||
if (pts == _last_pts) {
|
||||
//pts未变,说明dts也不会变,返回上次dts
|
||||
@@ -167,7 +167,7 @@ bool DtsGenerator::getDts(uint32_t pts, uint32_t &dts){
|
||||
|
||||
//该算法核心思想是对pts进行排序,排序好的pts就是dts。
|
||||
//排序有一定的滞后性,那么需要加上排序导致的时间戳偏移量
|
||||
bool DtsGenerator::getDts_l(uint32_t pts, uint32_t &dts){
|
||||
bool DtsGenerator::getDts_l(uint64_t pts, uint64_t &dts){
|
||||
if(_sorter_max_size == 1){
|
||||
//没有B帧,dts就等于pts
|
||||
dts = pts;
|
||||
|
||||
@@ -97,20 +97,20 @@ class DtsGenerator{
|
||||
public:
|
||||
DtsGenerator() = default;
|
||||
~DtsGenerator() = default;
|
||||
bool getDts(uint32_t pts, uint32_t &dts);
|
||||
bool getDts(uint64_t pts, uint64_t &dts);
|
||||
|
||||
private:
|
||||
bool getDts_l(uint32_t pts, uint32_t &dts);
|
||||
bool getDts_l(uint64_t pts, uint64_t &dts);
|
||||
|
||||
private:
|
||||
uint32_t _dts_pts_offset = 0;
|
||||
uint32_t _last_dts = 0;
|
||||
uint32_t _last_pts = 0;
|
||||
uint32_t _last_max_pts = 0;
|
||||
uint64_t _dts_pts_offset = 0;
|
||||
uint64_t _last_dts = 0;
|
||||
uint64_t _last_pts = 0;
|
||||
uint64_t _last_max_pts = 0;
|
||||
size_t _frames_since_last_max_pts = 0;
|
||||
size_t _sorter_max_size = 0;
|
||||
size_t _count_sorter_max_size = 0;
|
||||
std::set<uint32_t> _pts_sorter;
|
||||
std::set<uint64_t> _pts_sorter;
|
||||
};
|
||||
|
||||
class NtpStamp {
|
||||
|
||||
Reference in New Issue
Block a user