音视频
文章平均质量分 57
郑文博Coding
人的一生中最光辉的一天,并非是功成名就那天,而是从悲叹与绝望中产生对人生的挑战,以勇敢迈向意志的那天。
展开
-
写一个QTAV的音乐播放器
关于QTAV的介绍和编译请看我之前的文章,直接上代码因为音乐播放器只有一个所以是个单例头文件:#pragma once#include <QObject>#include <QtAV/AVPlayer.h>#include <QtAVWidgets/GLWidgetRenderer2.h>using namespace QtAV;#define avplayer QtavPlayer::getInstance()class QtavPlayer :原创 2022-01-26 17:27:31 · 2246 阅读 · 0 评论 -
音视频 pts dts基本概念及理解
视频的播放过程可以简单理解为一帧一帧的画面按照时间顺序呈现出来的过程,就像在一个本子的每一页画上画,然后快速翻动的感觉。但是在实际应用中,并不是每一帧都是完整的画面,因为如果每一帧画面都是完整的图片,那么一个视频的体积就会很大,这样对于网络传输或者视频数据存储来说成本太高,所以通常会对视频流中的一部分画面进行压缩(编码)处理。由于压缩处理的方式不同,视频中的画面帧就分为了不同的类别,其中包括:I 帧、P 帧、B 帧。I、P、B 帧I 帧、P 帧、B 帧的区别在于:I 帧(Intra coded fr转载 2021-03-31 13:46:08 · 1176 阅读 · 0 评论 -
OBS源码分析(八)分析libobs几个主要的线程
最近一段时间再看OBS的几个重要的线程,通过不断的学习和结合一些大佬的博客终于相对搞明白了这几个线程,分别是采集渲染线程和编码线程,分析如下:struct obs_core_video几个关键变量的注释:// 主画布 渲染当前场景下sources的画布 // 渲染主窗口的窗口时 直接把这个纹理贴到display中gs_texture_t *render_texture; // output画布 如果直播录像时的宽高(output宽高)和主画布宽高不一样,// 需要在该画布上对render转载 2021-01-13 11:38:16 · 2208 阅读 · 1 评论 -
qt creator搭建ffmpeg开发环境
一、ffmpeg第三方开发库的下载ffmpeg官网和之前有了很大变化 如下图:点击下载二、环境配置新建一个qt creator 项目,在项目根目录下新建ffmpeg文件夹,里面是include和lib文件夹,如图:在Pro文件添加这两行代码如图:然后qmake三、测试是否搭建成功我新建的项目是widget项目#include "widget.h"#include "ui_widget.h"#include <QDebug>extern "C"{ #i原创 2021-01-04 17:05:40 · 308 阅读 · 0 评论 -
QTAV的编译
QTAV官网这样说的:QtAV 是一个基于 Qt 和 FFmpeg 的跨平台、高性能多媒体播放框架,能够帮助你轻而易举地编写出一个播放器。以下是QTAV的官网地址:官网地址:http://www.qtav.org/Github 地址:https://github.com/wang-bin/QtAV编译 QtAV:https://github.com/wang-bin/QtAV/wiki/Build-QtAV在项目中使用 QtAV:https://github.com/wang-bin/QtAV/w原创 2021-01-04 10:36:49 · 435 阅读 · 0 评论 -
OBS源码学习(六)-将当前视频画面推流到两个不同的RTMP服务器上
一、OBS本身的推流方法在OBS设置好推流地址后保存并应用地址点击保存之后会调用SaveStream1Settings函数void OBSBasicSettings::SaveStream1Settings(){ bool customServer = IsCustomService(); const char *service_id = customServer ? "rtmp_custom" : "rtmp_common"; obs_service_t *oldService = mai原创 2020-12-17 15:32:51 · 1134 阅读 · 0 评论 -
OBS源码学习(五)-将OBS自动更新功能迁移到公司自己的服务器上
一、实现自己运行程序的manifest.jsonstatic void GenerateJson(string path){ //path = "D:\\OBSUpdate\\obs-studio\\build\\rundir\\Release"; string runDirPath = path; char *p = const_cast<char *>(path.c_str()); fileSearch(p); //生成hash值 std::map<string, s原创 2020-12-17 11:17:55 · 899 阅读 · 1 评论 -
一文读懂 YUV 的采样与格式
YUV 是一种颜色编码方法,和它等同的还有 RGB 颜色编码方法。RGB 颜色编码RGB 三个字母分别代表了 红(Red)、绿(Green)、蓝(Blue),这三种颜色称为 三原色,将它们以不同的比例相加,可以产生多种多样的颜色。在图像显示中,一张 1280 * 720 大小的图片,就代表着它有 1280 * 720 个像素点。其中每一个像素点的颜色显示都采用 RGB 编码方法,将 RGB 分别取不同的值,就会展示不同的颜色。RGB 图像中,每个像素点都有红、绿、蓝三个原色,其中每种原色都占用 8转载 2020-12-17 10:30:17 · 197 阅读 · 2 评论 -
OBS源码学习(四)-插件模块加载流程
一、OBS Studio在架构上采用的是微内核+插件的形式开发的,至于微内核的介绍请自行百度。OBS开源社区这样写的目的是为了提高项目的可维护性,也让新功能的扩展变得更加简单,OBS内部开发了一些常用的插件如下图:在OBS启动初始化void OBSBasic::OBSInit()时,会调用AddExtraModulePaths函数,这个函数的目的是设置插件的路径static void AddExtraModulePaths(){ char base_module_dir[512];#if defi原创 2020-12-16 11:05:30 · 3324 阅读 · 9 评论 -
OBS源码学习(三)-编译updater工程
由于项目要求要将OBS更新功能迁到公司自己的服务器上,OBS默认的是不编译updater工程,现将OBS更新工程编译步骤如下:一、下载解压并使用 CMake 生成编译 zlib https://download.csdn.net/download/XiaoStore/12315404二、编译版本 obs-studio-26.0.8三、CMake 生成配置文件时去掉勾选 DISABLE_UPDATE_MODULE四、添加环境变量 STATIC_ZLIB_PATH D:\OBSUpdate\zlib五原创 2020-12-15 18:05:13 · 536 阅读 · 1 评论 -
OBS源码学习(二)-如何添加新的ui文件
OBS 上层界面是用QT+C++11来完成的,我们对OBS进行二次开发的时候避免不了添加自己新的ui界面,以下是添加ui的过程。一、用Qt creator创建一个ui界面,如下图:二、将sencewidget.cpp和sencewidget.h复制到D:\OBSUpdate\obs-studio\UI 目录中,将sencewidget.ui文件复制到D:\OBSUpdate\obs-studio\UI\forms目录中。然后修改D:\OBSUpdate\obs-studio\UI\CMakeList原创 2020-12-15 17:07:15 · 1651 阅读 · 9 评论