
音视频
音视频学习
qq_52484093
这个作者很懒,什么都没留下…
展开
-
XThread线程类和日志宏
代码XTools.h#pragma once#include <thread>#include <mutex>#include <iostream>#define LOG_MIN_LEVEL LOG_LEVEL_DEBUG#define LOG(level, str) if(((level) >= LOG_MIN_LEVEL) && ((level) < LOG_LEVEL_MAX)) \ {原创 2022-04-29 14:09:31 · 1635 阅读 · 0 评论 -
RTSP协议
RTSP协议 Real Time Streaming ProtocolRTSP状态RTSP URLRTSP协议分析RTSP鉴权方式 BasicRTSP鉴权方式 Digest大华和海康摄像机rtsp地址大华相机设置海康配置rtsp命令通信 554端口海康开始接收数据...原创 2022-04-29 11:09:23 · 269 阅读 · 0 评论 -
视频重编码为h265重新封装MP4并截断
MP4 重编码重封装-分辨率和编码格式(转为h265)调整XFormat.h#pragma once#include <mutex>struct AVFormatContext;struct AVCodecParameters;struct AVPacket;struct AVCodecContext;void PrintError(int err);struct Rational { int num; ///< Numerator int den; /原创 2022-04-27 13:57:53 · 1543 阅读 · 3 评论 -
重封装剪切中间10秒视频并重新计算pts_dts
封装视频封装MP4 创建上下文和流avio_open 打开输出avformat_write_headerPTS计算av_write_frame 写入帧控制播放进度 av_seek_frame重新封装 截断后10秒代码示例123_test_remux.cpp#include <iostream>using namespace std;extern "C" // 指定函...原创 2022-04-25 20:03:25 · 451 阅读 · 0 评论 -
ffmpeg解封装代码示例
视频封装概述MP4 格式分析解封装流程AVFormatContextnb_streams: 有多少条流,比如视频流、音频流streams: 流的相关信息AVStreamAVCodecParametersavformat_open_input 打开文件或者网络地址avformat_find_stream_infoav_read_frame 读取一帧数测试代码121_...原创 2022-04-23 17:47:56 · 3068 阅读 · 0 评论 -
重构XEncode添加基类XCodec并完成XDecode封装
XCodec 封装重构XDecode 封装XCodec.h#pragma once#include <mutex>#include <vector>struct AVCodec;struct AVCodecContext;struct AVFrame;struct AVPacket;void PrintError(int err);class XCodec{public: XCodec(); ///////////////原创 2022-04-22 22:02:03 · 2057 阅读 · 0 评论 -
硬件GPU加速编码DXVA2并进行渲染
解码硬件加速 DXVA2XVideoView.cppbool XVideoView::drawAVFrame(AVFrame* frame){ bool ret = (frame != nullptr); if (ret) { m_count++; if (m_beginMs == 0) { m_beginMs = NowMs(); // 开始计时 } else if ((NowMs() - m_beginMs >= 1000)) // 1s原创 2022-04-20 22:29:58 · 3673 阅读 · 0 评论 -
解码后视频渲染并测试多线程帧率
118_test_decode_view.cpp#include <iostream>#include <fstream>#include "XVideoView.h"#include "XSDL.h"using namespace std;extern "C" // 指定函数是 C 语言函数,函数目标名不包含重载标识,C++ 中调用 C 函数需要使用 extern "C"{ // 引用 ffmpeg 头文件 #include "libavcodec/av原创 2022-04-19 21:21:13 · 1603 阅读 · 0 评论 -
ffmpeg解码
avcodec_send_packetavcodec_receive_frameH264 帧分割ffmpeg -i v1080.mp4 -s 400x300 test.h264我们使用这个命令生成一个编码后的 h264 文件。基于 ffmpeg 接口完成视频解码117_test_decode.cpp#include <iostream>#include <fstream>using namespace std...原创 2022-04-19 20:20:38 · 1438 阅读 · 0 评论 -
XEocode编码封装
XEncode.h#pragma once#include <mutex>#include <vector>struct AVCodec;struct AVCodecContext;struct AVFrame;struct AVPacket;class XEncode{public: ////////////////////////////////////////// /// 创建编码上下文 /// @para codec_id 编码器ID号,对原创 2022-04-17 15:16:09 · 798 阅读 · 0 评论 -
H264编码介绍和参数设置
视频h264编码流程宏块划分 Macro Block帧内预测 I帧帧间预测和GOP P帧和B帧DCT离散余弦变换量化熵编码preset 预设编码器预设编码器比特率控制恒定比特率(CBR)恒定速率因子(CRF)H264码流中NALU sps pps IDR帧的分析NALU的类型SPSPPS代码...原创 2022-04-14 21:29:25 · 4060 阅读 · 0 评论 -
最简单的ffmpeg视频编码
AVPacket结构体和接口AVPacket 使用方法和 AVFrame 类似,里面也有一个缓冲区,采用引用计数的方式。pts:时间戳data:压缩后的数据size:压缩后的数据大小stream_index:用于表示数据流是音频的还是视频的flags:压缩后帧的标识,比如:关键帧FFmpeg编码接口查找编码器编码上下文参数设定打开编码器发送原始帧接收压缩帧最少参数配置的视频编码代...原创 2022-04-13 10:12:23 · 2330 阅读 · 1 评论 -
视频编码概述
之所以可以进行压缩是因为视频中的每个图像帧之间存在相似的数据,这些数据可以共用一份,可以极大的减少数据量,这就是帧间压缩。由于后续帧的数据依赖于在它前面帧的数据,所有如果在它前面的帧的数据丢失了,则后续帧的数据也就没用了,这样就需要关键帧,每 n 帧之间有一个关键帧,其他 n-1 帧都依赖这个关键帧,即使这个关键帧的数据丢失了,也只影响与之关联的帧,并不会影响所有的帧。压缩后的数据无法还原成原始的数据,这就是有损压缩。...原创 2022-04-11 17:28:31 · 307 阅读 · 0 评论 -
多路YUV_RGB文件播放器
渲染接口设计说明界面端说明代码XVideoView.h#ifndef XVIDEOVIEW_H#define XVIDEOVIEW_H#include <mutex>#include <fstream>struct AVFrame;void MSleep(int ms);long long NowMs();/* * 视频渲染接口类 * 隐藏SDL实现 * 渲染方案可替代 * 线程安全 */class XVideoV.原创 2022-04-11 15:16:52 · 399 阅读 · 0 评论 -
sws_scale像素格式转换RGBA转YUV420P
FFmpeg 像素格式和尺寸转换函数双线性过滤(Bilinear_filtering)代码test_sws_scale.cpp#include <iostream>#include <fstream>extern "C"{#include "libswscale/swscale.h"}#pragma comment(lib, "swscale.lib")#define YUVFILE "400_300_25.yuv"#d.原创 2022-04-04 22:56:47 · 3535 阅读 · 0 评论 -
多线程控制帧率渲染AVFrame的YUV数据
代码XVideoView.cppvoid MSleep(int ms){ auto beg = clock(); for (int i = 0; i < ms; i++) { this_thread::sleep_for(1ms); if ((clock() - beg) / (CLOCKS_PER_SEC / 1000) >= ms) { break; } }}bool XVideoView::drawAVFrame(AVFrame* fra原创 2022-04-03 22:50:00 · 1724 阅读 · 0 评论 -
帧率的控制
帧率控制test_sleep_fps.cpp#include <iostream>#include <ctime>#include <thread>#include <Windows.h>using namespace std;void MySleep(int ms){ auto beg = clock(); for (int i = 0; i < ms; i++) { this_thread::sleep原创 2022-03-29 21:40:21 · 590 阅读 · 1 评论 -
使用SDL渲染AVFrame
XVideoView.cppbool XVideoView::drawAVFrame(AVFrame* frame){ bool ret = (frame != nullptr); if (ret) { switch (frame->format) { case AV_PIX_FMT_ARGB: case AV_PIX_FMT_RGBA: ret = draw(frame->data[0], frame->linesize[0]); ...原创 2022-03-29 20:47:50 · 3271 阅读 · 0 评论 -
测试AVFrame的空间分配和引用计数接口
AVFrame 结构体分析AVFrame 相关函数AVFrame 引用计数测试代码Test_AVFrame.cpp#include <iostream>using namespace std;extern "C" // 指定函数是 C 语言函数,函数目标名不包含重载标识,C++ 中调用 C 函数需要使用 extern "C"{ // 引用 ffmpeg 头文件 #include "libavcodec/avcodec.h"}..原创 2022-03-28 21:05:45 · 2596 阅读 · 0 评论 -
使用工厂模式封装SDL接口
代码XVideoView.h#ifndef XVIDEOVIEW_H#define XVIDEOVIEW_H#include <mutex>/* * 视频渲染接口类 * 隐藏SDL实现 * 渲染方案可替代 * 线程安全 */class XVideoView{public: enum PixelFormat { RGBA = 0, ARGB, YUV420P }; enum ViewType { VIEW_SDL = 0 ...原创 2022-03-27 21:10:49 · 2099 阅读 · 0 评论 -
YUV格式讲解并使用ffmpeg生产YUV文件
YUV 格式分析Y、U、V 各占一个字节YUV444 : 每4个像素点为一组,这4个像素点包含4个Y、4个U、4个V,每个像素点占用3个字节。YUV422 : 每4个像素点为一组,这4个像素点包含4个Y、2个U、2个V,每个像素点占用2个字节。YUV420 : 每4个像素点为一组,这4个像素点包含4个Y、1个U、1个V,每个像素点占用1.5个字节。H264 和 H265 中默认使用的像素点格式为 YUV420。ffmpeg工具生成YUV格式的视频素材SDL播放YU原创 2022-03-26 16:27:44 · 1141 阅读 · 0 评论 -
合并两幅图像
实例代码SdlQtRGB.h#pragma once#include <QtWidgets/QWidget>#include "ui_SdlQtRGB.h"class SdlQtRGB : public QWidget{ Q_OBJECTpublic: SdlQtRGB(QWidget *parent = Q_NULLPTR); ~SdlQtRGB();private: Ui::SdlQtRGBClass ui; .原创 2022-03-26 14:25:40 · 265 阅读 · 0 评论 -
SDL渲染RGB数据到Qt中的控件
用到的知识SDL渲染RGB数据到Qt中的控件通过定时器刷新SdlQtRGB.h#pragma once#include <QtWidgets/QWidget>#include "ui_SdlQtRGB.h"class SdlQtRGB : public QWidget{ Q_OBJECTpublic: SdlQtRGB(QWidget *parent = Q_NULLPTR); ~SdlQtRGB();private: U.原创 2022-03-26 11:19:29 · 836 阅读 · 0 评论 -
SDL2渲染RGB图像
SDL 的相关函数使用 SDL 渲染 RGB 图像#include <iostream>#include <memory>#include <sdl/SDL.h>#undef main#pragma comment(lib, "SDL2.lib")using namespace std;int main(){ const int w = 800; const int h = 600; // 1. 初始化 SDL...原创 2022-03-23 21:35:56 · 933 阅读 · 0 评论 -
使用Qt渲染RGB数据
渲染 RGB 数据TestRGB.h#pragma once#include <QtWidgets/QWidget>#include "ui_TestRGB.h"class TestRGB : public QWidget{ Q_OBJECTpublic: TestRGB(QWidget *parent = Q_NULLPTR); void paintEvent(QPaintEvent* event) override; // 绘制图...原创 2022-03-21 22:35:02 · 2885 阅读 · 0 评论