增加windows端屏幕捕获编码demo

This commit is contained in:
2025-12-18 23:07:14 +08:00
parent 30f45f8397
commit e13885266b
10 changed files with 688 additions and 48 deletions

View File

@@ -0,0 +1,38 @@
#pragma once
#include <d3d11.h>
#include <wrl/client.h>
#include <vector>
#include <cstdint>
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavutil/imgutils.h>
#include <libavutil/opt.h>
#include <libswscale/swscale.h>
}
using Microsoft::WRL::ComPtr;
class VideoEncoder {
public:
VideoEncoder();
~VideoEncoder();
bool Initialize(ID3D11Device* device, int width, int height, int fps, int bitrate);
bool EncodeFrame(ID3D11Texture2D* texture, std::vector<uint8_t>& outputData, bool& isKeyFrame);
private:
ID3D11Device* device_ = nullptr;
ID3D11DeviceContext* context_ = nullptr;
ComPtr<ID3D11Texture2D> stagingTexture_;
AVCodecContext* codecContext_ = nullptr;
AVFrame* frame_ = nullptr;
AVPacket* packet_ = nullptr;
SwsContext* swsContext_ = nullptr;
int width_ = 0;
int height_ = 0;
int pts_ = 0;
};