GrabBag/Module/FFMediaStream/Inc/IVrFFMediaPusher.h

128 lines
2.8 KiB
C
Raw Normal View History

#pragma once
#include <cstdint>
#include <cstddef>
#include <string>
#include <memory>
2026-06-08 17:36:13 +08:00
// FFMediaStream 现为静态库CONFIG += staticlib不使用 DLL 导入/导出修饰,
// 否则 MSVC 会以 __imp_ 方式查找符号导致 LNK2019。
#define VR_FFMEDIA_API
/**
* @brief
*/
enum class EFFPushPixelFormat
{
NV12 = 0, // 4:2:0 半平面 (Y + UV)
YUV420P, // 4:2:0 平面
BGR24, // OpenCV 默认
RGB24,
BGRA32,
RGBA32,
};
/**
* @brief
*/
enum class EFFEncodeType
{
H264 = 0,
H265,
MJPEG,
};
/**
* @brief
*/
enum class EFFRcMode
{
CBR = 0,
VBR,
};
/**
* @brief
*/
struct VrFFPushConfig
{
// 帧参数
unsigned int width{1920};
unsigned int height{1080};
EFFPushPixelFormat pixelFormat{EFFPushPixelFormat::NV12};
// 编码参数
EFFEncodeType encodeType{EFFEncodeType::H264};
unsigned int fps{30};
unsigned int gop{60};
unsigned int bitrateKbps{4096}; // 码率 (kbps)
EFFRcMode rcMode{EFFRcMode::CBR};
// RTSP 服务参数
2026-06-08 17:36:13 +08:00
std::string rtspHost{"127.0.0.1"}; // mediamtx 服务端 IP主动推流目标
std::string rtspPath{"/live/stream"}; // URL 路径
unsigned short rtspPort{8554};
std::string authRealm;
std::string authUser;
std::string authPass;
};
/**
* @brief IVrFFMediaPusher
*
2026-06-08 17:36:13 +08:00
* MPP + FFmpeg libavformat RTSP -> swscale -> MPP -> RTSP
*
*
* IVrFFMediaPusher* pusher = nullptr;
* IVrFFMediaPusher::CreateObject(&pusher);
* pusher->Init(cfg);
* pusher->Start();
* pusher->PushFrame(data, size);
* ...
* pusher->Stop();
* delete pusher;
*/
class VR_FFMEDIA_API IVrFFMediaPusher
{
public:
virtual ~IVrFFMediaPusher() = default;
// 工厂
static bool CreateObject(IVrFFMediaPusher** ppPusher);
/**
* @brief
* @return 0
*/
virtual int Init(const VrFFPushConfig& config) = 0;
/**
* @brief RTSP
*/
virtual int Start() = 0;
/**
* @brief
* @param data
* @param size
* @param ptsUs PTS 0
* @return 0
*/
virtual int PushFrame(const void* data, size_t size, int64_t ptsUs = 0) = 0;
/**
* @brief
*/
virtual int Stop() = 0;
/**
* @brief
*/
virtual int UnInit() = 0;
/**
* @brief URL IP//
*/
virtual std::string GetRtspUrl(const std::string& localIp) const = 0;
};