整理代码

This commit is contained in:
蒲爽 2026-09-28 21:33:04 +08:00
commit c7b4e178ec
364 changed files with 59691 additions and 0 deletions

View file

@ -0,0 +1,97 @@
#ifndef E3F40CBC_D6F1_4B8F_B90E_6765659CF90F
#define E3F40CBC_D6F1_4B8F_B90E_6765659CF90F
/*
*******************************************************************************
* INCLUDE
*******************************************************************************
*/
#include "../core/Demuxer.h"
extern "C"
{
#include <media-server/librtmp/rtmp-client.h>
#include <media-server/libflv/flv-demuxer.h>
#include <media-server/libflv/flv-proto.h>
#include <media-server/libflv/opus-head.h>
#include <media-server/libflv/mpeg4-aac.h>
#include <media-server/libflv/amf0.h>
#include <media-server/libflv/mpeg4-avc.h>
#include <media-server/libflv/mpeg4-hevc.h>
#include <avcodec/h264/bitstream.h>
#include <avcodec/h264/h264-nal.h>
#include <avcodec/h264/h264-sps.h>
#include <avcodec/h264/h264-pps.h>
#include <avcodec/h264/h264-util.h>
#include <avcodec/h264/h264-internal.h>
#include <avcodec/h265/h265-parser.h>
#include <sdk/include/sockutil.h>
}
namespace Video
{
namespace MediaServer
{
/*
*******************************************************************************
* CLASS DECLARE
*******************************************************************************
*/
class RTMPDemuxHandler: public Core::DemuxHandler
{
public:
RTMPDemuxHandler(const std::string& url);
~RTMPDemuxHandler();
public:
void run(Core::VideoEncoder::Ptr pVideoEncoder, Core::AudioEncoder::Ptr pAudioEncoder, const Post& post,
std::atomic<bool>& isCancelled) override;
protected:
int parseFLVMetaData(const uint8_t* pData, size_t length);
int processH264Data(const void* data, size_t bytes, uint32_t pts, uint32_t dts, int flags);
int processH265Data(const void* data, size_t bytes, uint32_t pts, uint32_t dts, int flags);
int processASCData(const void* data, size_t bytes, uint32_t pts, uint32_t dts, int flags);
int processAACData(const void* data, size_t bytes, uint32_t pts, uint32_t dts, int flags);
int processOpusHeadData(const void* data, size_t bytes, uint32_t pts, uint32_t dts, int flags);
int processOpusData(const void* data, size_t bytes, uint32_t pts, uint32_t dts, int flags);
int processG711AData(const void* data, size_t bytes, uint32_t pts, uint32_t dts, int flags);
int processG711UData(const void* data, size_t bytes, uint32_t pts, uint32_t dts, int flags);
void enqueueVideoPacket(const void* data, size_t bytes, uint32_t pts, uint32_t dts, int flags);
void enqueueAudioPacket(const void* data, size_t bytes, uint32_t pts, uint32_t dts, int flags);
inline const uint8_t* annexBStartcode(const uint8_t* data, size_t bytes);
bool isH264BFrame(const void* h264, size_t bytes);
void adjustTimestamp(uint64_t& pts, uint64_t& dts);
void updateTimeline(uint64_t ts);
void seek(uint64_t) override;
private:
socket_t _socket;
rtmp_client_t* _pCient;
flv_demuxer_t* _pDemuxer;
bool _audioInfoParsed;
bool _videoInfoParsed;
uint32_t _iFrameLength;
Core::VideoEncoder::Ptr _pVideoEncoder;
Core::AudioEncoder::Ptr _pAudioEncoder;
Post _post;
union
{
struct mpeg4_avc_t avc;
struct mpeg4_hevc_t hevc;
} _v;
protected:
static int clientSend(void* param, const void* header, size_t len, const void* data, size_t bytes);
static int clientOnAudio(void* param, const void* data, size_t bytes, uint32_t timestamp);
static int clientOnVideo(void* param, const void* data, size_t bytes, uint32_t timestamp);
static int clientOnScript(void* param, const void* data, size_t bytes, uint32_t timestamp);
static int flvDemuxerHandler(void* param, int codec, const void* data, size_t bytes, uint32_t pts, uint32_t dts,
int flags);
static void h264NALhandler(void* param, const uint8_t* nalu, size_t bytes);
static void h265NALhandler(void* param, const uint8_t* nalu, size_t bytes);
};
}
}
#endif