XMux
XMux.h 继承于XFormat 作用:处理多媒体文件的封装,提供了一系列函数用于打开封装上下文、写入数据包、写入头信息和结束信息,同时处理音视频的时间基准。 12345678910111213141516171819202122232425262728293031#pragma once#include "xformat.h"class XMux : public XFormat{public: static AVFormatContext *Open(const char *url, AVCodecParameters *video_para = nullptr, AVCodecParameters *audio_para = nullptr ); bool WriteHead(); bool Write(AVPacket *pkt); bool WriteEnd(); void set_src_video_time_base(AVRational *tb); void...
XFormat
XFormat.h 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273#pragma once#include "xtools.h"#include <mutex>struct AVFormatContext;struct AVCodecParameters;struct AVPacket;struct AVCodecContext;struct XRational{ int num; int den;};class XFormat{public: bool CopyPara(int stream_index, AVCodecParameters *dst); /* 重载!! 由于 AVCodecParameters* 和 AVCodecContext*...
XDecode
XDecode.h Send 函数用于向解码器发送编码数据包。 Recv 函数用于从解码器接收解码后的帧数据。 InitHW 函数用于初始化硬件加速设备。 End 函数用于获取解码器中剩余的所有帧数据。 123456789101112131415#pragma once#include "xcodec.h"struct AVBufferRef;class XDecode :public XCodec{public: bool Send(const AVPacket* pkt); bool Recv(AVFrame* frame); std::vector<AVFrame*> End(); // 初始化硬件加速 // 默认AV_HWDEVICE_TYPE_DXVA2 值为4 bool InitHW(int type = 4); }; AVHWDeviceType:int type = 4代表AV_HWDEVICE_TYPE_DXVA2 123456789101112131415enum AVHWDeviceType...
XEncode
XEncode.h 作用:继承于XCodec,用于编码 12345678910#pragma once#include "xcodec.h"class XEncode:public XCodec{public: AVPacket *Encode(const AVFrame* frame); std::vector<AVPacket *> End();}; AVPacket 是 FFmpeg 库中的一个数据结构,主要用于存储编码后的音频或视频数据包。 在多媒体处理中,数据包通常包含一个完整的编码帧或部分编码帧的比特流数据。 这些数据包可以用于传输、存储或进一步处理,如解码。 123456789101112131415161718typedef struct AVPacket { uint8_t *data; // 指向实际存储编码数据的缓冲区 int size; // 缓冲区中数据的大小,以字节为单位 int64_t pts; // 显示时间戳 int64_t dts; //...
XCodec
XCodec 作用:编码和解码的基类 1234567891011121314151617181920212223242526272829303132#pragma once#include <mutex>#include <vector>extern "C" {#include <libavcodec/avcodec.h>#include <libavutil/avutil.h>}struct AVCodecContext;struct AVPacket;struct AVFrame;class XCodec{public: static AVCodecContext* Create(int codec_id, bool is_encode); void set_c(AVCodecContext* c); bool SetOpt(const char* key, const char* val); bool SetOpt(const char* key, int...
XSDL
SDL介绍 SDL(Simple DirectMedia Layer)是一个跨平台的多媒体开发库,广泛用于游戏开发和多媒体应用的创建。它提供了对音频、键盘、鼠标、游戏控制器、图形和窗口的底层访问,从而使开发者能够编写高性能的多媒体应用程序。SDL被许多流行的游戏和软件项目所使用。 SDL的主要特点 跨平台支持: SDL支持多个操作系统,包括Windows、Mac OS、Linux、iOS和Android等,使得开发者能够编写一次代码,运行在多个平台上。 简化多媒体处理: SDL提供了对音频、视频、输入设备、计时器等多媒体功能的简化接口,使开发者不需要处理底层系统的细节。 硬件加速: SDL支持使用OpenGL、Direct3D等图形库进行硬件加速,从而提高图形渲染的性能。 模块化设计: SDL的功能被划分为多个模块,如视频、音频、事件处理、线程、文件I/O等,开发者可以按需使用。 XSDL.h 12345678910111213141516171819202122232425262728293031#pragma once#include...
XVideoView
XVideoView.h 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182#ifndef XVIDEO_VIEW_H#define XVIDEO_VIEW_H#include <mutex>#include <fstream>#include "xtools.h"struct AVFrame;class XVideoView{public: enum Format { YUV420P = 0, NV12 = 23, ARGB = 25, RGBA = 26, BGRA = 28 }; enum RenderType { SDL = 0 }; static XVideoView* Create(RenderType...
ffmpeg
基础配置 头文件 include 库文件 lib lib/x86 x64 动态库文件 dll bin/x86 x64 调式执行和pdb路径 bin/x86 x64 源码项目路径 src/first_ffmpeg ffmpeg源码 tools 将文件配置进入项目中 (以Visual Studio 2017为例) YUV格式 YUV444 表示$4:4:4$的YUV取样。 每个像素都有独立的Y、U、V分量。 每一个像素Y占一个字节,U占一个字节,V占一个字节,因此每个像素占: $$1 (Y)×8 bits+1 (U)×8 bits+1 (V)×8 bits=24 bits/pixel (bpp)$$ 以$2\times 2$的图像为例 1234像素1:Y1, U1, V1像素2:Y2, U2, V2像素3:Y3, U3, V3像素4:Y4, U4, V4 YUV422 表示$4:2:2$的YUV取样。 每相邻两个像素每个像素占一个Y,共享一个U和一个V,因此两个像素占: $$2 (Y)×8 bits+1 (U)×8 bits+1 (V)×8 bits=32...
Qt
第一章:认识Qt 如何添加第三方库 Qt Creater在pro文件下进行添加 Vs2019在右键属性Qt设置里添加 QMake与CMake qmake:qt独有的代码构建工具 cmake:C++通用的代码构建工具,绝大部分C++开源项目都是使用cmake管理代码,如obs,jsoncpp 总结: 如果你主要在开发Qt应用程序,尤其是当你不需要复杂的自定义构建逻辑时,QMake可能是更简单直接的选择。 如果你的项目需要跨平台支持,或者你需要一种更灵活、功能更强大的构建系统,CMake可能是更好的选择。 Qt的三个窗口 QMainWindow:是Qt提供的一个主窗口类,它为应用程序提供了一个带有菜单栏、工具栏、状态栏、和可选的停靠窗口(dock...
AcWing Web课
html基础标签 有疑问查询MDN:https://developer.mozilla.org/zh-CN/ html文件结构 文档结构 html的所有标签为树形结构,例如: 1234567891011<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Web应用课</title></head><body> ...