Qt+FFmpeg+opengl从零制作视频播放器-1.项目介绍

news/2024/7/10 20:35:17 标签: 音视频, qt, ffmpeg, opengl

1.简介

学习音视频开发,首先从做一款播放器开始是比较合理的,每一章节,我都会将源码贴在最后,此专栏你将学习到以下内容:

1)音视频的解封装、解码;

2)Qt+opengl如何渲染视频;

3)音视频同步,如何seek到指定时间;

4)学习FFmpeg常用接口;

5)学习opengl的渲染原理;

6)Qt界面开发以及QSS样式表加载;

7)网络视频流的加载;

8)播放器跨平台移植;

9)Windows打包为exe包发布。

本项目使用Qt+ffmpeg+opengl实现视频播放器开发。

适合对音视频方向感兴趣以及想提升自己技术的同学。

视频播放器的基础流程简介如下:

视频播放器播放原理:

  • 视频文件(MP4、flv、mkv等)进行播放,这些文件格式是封装好的格式。
  • 首先要解封装,将视频流和音频流单独处理,解封装完成之后,音频得到的压缩数据aac、MP3等;视频得到的压缩数据H.264、H.265等数据。
  • 然后解码,音频解码后的原始数据PCM,音频需要重采样,以适应各种音频设备;视频解码后原始数据YUV,需要转换为RGB进行渲染。
  • 最后视频呈现,使用Qt来播放音频数据,opengl来渲染视频数据,音视频同步。

2.目录

专栏分为以下几个部分进行循序渐进介绍视频播放器的实现。

  • 开发环境的准备
  • ffmpeg视频处理原理和实现
  • Qt界面设计以及opengl绘制视频
  • ffmpeg音频处理原理和实现
  • Qt音频播放
  • 音视频同步、seek

3.软件展示界面

右键打开本地视频文件。 

 播放列表

打开网络流。 

4.更多参考

https://sunnnnnn666.blog.csdn.net/article/details/103455766


http://www.niftyadmin.cn/n/5407900.html

相关文章

【XR806开发板试用】Console流程解析以及添加自定义指令

写在前面的话 基于串口的指令调试总是作为基础功能出现在各个项目中。而这一小小的功能却已经包括了中断注册,回调函数,互斥量等嵌入式系统基本的软件逻辑。本文将从以下两个方面介绍XR806 SDK中Console系统。 Console初始化流程添加自定义指令 Conso…

【LeetCode打卡】Day26|39. 组合总和、40.组合总和II、131.分割回文串

学习目标: 39. 组合总和 40.组合总和II 131.分割回文串 学习内容: 39. 组合总和 题目链接&&文章讲解 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 …

测试环境搭建整套大数据系统-问题篇(一:实时遇到的问题)

1. java.io.IOException: Failed to deserialize JSON ‘{“age”:867,“sex”:“fba8c074f9”,“t_insert_time”:“2024-03-04 14:12:24.821”}’ 解决方式 修改数据类型。将TIMESTAMP_LTZ改为TIMESTAMP。 2. java. lang,classNotFoundException: org,apache.flink,streami…

Ai-WB2-32S在window下使用vs 和 msys2编译以及烧录

文章目录 前言一、使用前准备第一步 安装vscode第二步 安装msys2 二、使用步骤1.打开MSYS2 MINGW64(1)在开始栏中找到MSYS2 MINGW64并打开(2)安装git(3)安装make(4)安装好之后的文件…

关于程序员如何选择职业赛道

程序员作为一个独具特色的职业群体,面临着诸多挑战和机遇。在选择职业赛道方面,程序员需要考虑自身兴趣、技能、发展前景等因素,以便找到最适合自己的发展路径。本文将从不同角度探讨程序员如何选择职业赛道。 首先,程序员应该认…

网络编程中的响应之道:探索 Reactor 和 Proactor 模式

前言 让服务器服务多个客户端,那么最直接的方式就是为每一条连接创建线程。而为了避免频繁的创建和销毁线程,可以通过线程池来进行优化,达到「资源复用」。不过,这样又引来一个新的问题,线程怎样才能高效地处理多个连接…

C语言5道编程题简单介绍(四)

1、交换两个变量的值 &#xff08;1&#xff09;使用变量 代码如下&#xff1a; #include <stdio.h> int main() {double x, y, z;printf("输入两个数字\n");scanf("%lf %lf", &x,&y);// 将第一个数的值赋值给 zz x;// 第二个数的值赋值…

【c++】函数的默认参数

函数的默认参数是指定义函数时&#xff0c;可以给输入的参数指定某些默认值&#xff0c;但需要注意以下两点&#xff1a; 1. 如果某个位置已经有默认参数&#xff0c;那么从这个位置往后的参数都必须有默认值&#xff08;防止歧义&#xff09; 比如&#xff1a; int func(int …