mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-06-22 08:52:20 +08:00
进一步抽象ts/ps解析代码
This commit is contained in:
@@ -11,31 +11,66 @@
|
||||
#ifndef ZLMEDIAKIT_DECODER_H
|
||||
#define ZLMEDIAKIT_DECODER_H
|
||||
|
||||
#if defined(ENABLE_RTPPROXY)
|
||||
#include <stdint.h>
|
||||
#include <memory>
|
||||
#include <functional>
|
||||
#include "Decoder.h"
|
||||
#include "Common/MediaSink.h"
|
||||
|
||||
using namespace std;
|
||||
namespace mediakit {
|
||||
|
||||
class Decoder {
|
||||
public:
|
||||
typedef std::shared_ptr<Decoder> Ptr;
|
||||
typedef enum {
|
||||
decoder_ts = 0,
|
||||
decoder_ps
|
||||
}Type;
|
||||
|
||||
typedef std::function<void(int stream,int codecid,int flags,int64_t pts,int64_t dts,const void *data,int bytes)> onDecode;
|
||||
virtual int input(const uint8_t *data, int bytes) = 0;
|
||||
virtual void setOnDecode(const onDecode &decode) = 0;
|
||||
static Ptr createDecoder(Type type);
|
||||
protected:
|
||||
Decoder() = default;
|
||||
virtual ~Decoder() = default;
|
||||
};
|
||||
|
||||
/**
|
||||
* 合并一些时间戳相同的frame
|
||||
*/
|
||||
class FrameMerger {
|
||||
public:
|
||||
FrameMerger() = default;
|
||||
~FrameMerger() = default;
|
||||
void inputFrame(const Frame::Ptr &frame,const function<void(uint32_t dts,uint32_t pts,const Buffer::Ptr &buffer)> &cb);
|
||||
private:
|
||||
List<Frame::Ptr> _frameCached;
|
||||
};
|
||||
|
||||
class DecoderImp{
|
||||
public:
|
||||
typedef enum {
|
||||
decoder_ts = 0,
|
||||
decoder_ps
|
||||
}Type;
|
||||
|
||||
typedef std::shared_ptr<DecoderImp> Ptr;
|
||||
~DecoderImp() = default;
|
||||
|
||||
static Ptr createDecoder(Type type, const MediaSinkInterface::Ptr &sink);
|
||||
int input(const uint8_t *data, int bytes);
|
||||
|
||||
protected:
|
||||
void onTrack(const Track::Ptr &track);
|
||||
void onFrame(const Frame::Ptr &frame);
|
||||
|
||||
private:
|
||||
DecoderImp(const Decoder::Ptr &decoder, const MediaSinkInterface::Ptr &sink);
|
||||
void onDecode(int stream,int codecid,int flags,int64_t pts,int64_t dts,const void *data,int bytes);
|
||||
|
||||
private:
|
||||
Decoder::Ptr _decoder;
|
||||
MediaSinkInterface::Ptr _sink;
|
||||
FrameMerger _merger;
|
||||
int _codecid_video = 0;
|
||||
int _codecid_audio = 0;
|
||||
};
|
||||
|
||||
}//namespace mediakit
|
||||
#endif//defined(ENABLE_RTPPROXY)
|
||||
#endif //ZLMEDIAKIT_DECODER_H
|
||||
|
||||
Reference in New Issue
Block a user