完成AAC RTMP编解码类

This commit is contained in:
xiongziliang
2018-10-24 14:21:59 +08:00
parent 6c9d50b04b
commit f4bce611ef
10 changed files with 209 additions and 21 deletions

View File

@@ -0,0 +1,69 @@
//
// Created by xzl on 2018/10/24.
//
#ifndef ZLMEDIAKIT_AACRTMPCODEC_H
#define ZLMEDIAKIT_AACRTMPCODEC_H
#include "RtmpCodec.h"
namespace ZL{
namespace Rtmp {
/**
* aac Rtmp转adts类
*/
class AACRtmpDecoder : public RtmpCodec , public ResourcePoolHelper<AACFrame> {
public:
typedef std::shared_ptr<AACRtmpDecoder> Ptr;
AACRtmpDecoder();
~AACRtmpDecoder() {}
/**
* 输入Rtmp并解码
* @param Rtmp Rtmp数据包
* @param key_pos 此参数内部强制转换为false,请忽略之
*/
bool inputRtmp(const RtmpPacket::Ptr &Rtmp, bool key_pos = false) override;
TrackType getTrackType() const override{
return TrackAudio;
}
CodecId getCodecId() const override{
return CodecAAC;
}
protected:
void onGetAAC(const char* pcData, int iLen, uint32_t ui32TimeStamp);
AACFrame::Ptr obtainFrame();
protected:
AACFrame::Ptr _adts;
string _aac_cfg;
};
/**
* aac adts转Rtmp类
*/
class AACRtmpEncoder : public AACRtmpDecoder , public ResourcePoolHelper<RtmpPacket> {
public:
typedef std::shared_ptr<AACRtmpEncoder> Ptr;
AACRtmpEncoder();
~AACRtmpEncoder() {}
/**
* 输入aac 数据必须带dats头
* @param frame 带dats头的aac数据
*/
void inputFrame(const Frame::Ptr &frame) override;
private:
void makeAudioConfigPkt();
};
}//namespace Rtmp
}//namespace ZL
#endif //ZLMEDIAKIT_AACRTMPCODEC_H