ZLMediaKit/src/RtmpCodec/H264RtmpCodec.h
2018-10-24 14:21:59 +08:00

68 lines
1.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// Created by xzl on 2018/10/24.
//
#ifndef ZLMEDIAKIT_H264RTMPCODEC_H
#define ZLMEDIAKIT_H264RTMPCODEC_H
#include "RtmpCodec.h"
#include "Util/ResourcePool.h"
using namespace ZL::Rtmp;
/**
* h264 Rtmp解码类
*/
class H264RtmpDecoder : public RtmpCodec ,public ResourcePoolHelper<H264Frame> {
public:
typedef std::shared_ptr<H264RtmpDecoder> Ptr;
H264RtmpDecoder();
~H264RtmpDecoder() {}
/**
* 输入264 Rtmp包
* @param rtmp Rtmp包
* @param key_pos 此参数忽略之
*/
bool inputRtmp(const RtmpPacket::Ptr &rtmp, bool key_pos = true) override;
TrackType getTrackType() const override{
return TrackVideo;
}
CodecId getCodecId() const override{
return CodecH264;
}
protected:
bool decodeRtmp(const RtmpPacket::Ptr &Rtmp);
void onGetH264_l(const char *pcData, int iLen, uint32_t ui32TimeStamp);
void onGetH264(const char *pcData, int iLen, uint32_t ui32TimeStamp);
H264Frame::Ptr obtainFrame();
protected:
H264Frame::Ptr m_h264frame;
string m_sps;
string m_pps;
};
/**
* 264 Rtmp打包类
*/
class H264RtmpEncoder : public H264RtmpDecoder, public ResourcePoolHelper<RtmpPacket> {
public:
typedef std::shared_ptr<H264RtmpEncoder> Ptr;
H264RtmpEncoder();
~H264RtmpEncoder() {}
/**
* 输入264帧,需要指出的是必须输入sps pps帧
* @param frame 帧数据
*/
void inputFrame(const Frame::Ptr &frame) override;
private:
void makeVideoConfigPkt();
};
#endif //ZLMEDIAKIT_H264RTMPCODEC_H