FFmpeg + qt 音视频播放器 C++ 跨平台实战

基于opengl shader绘制yuv

4.50 (46 reviews)
Udemy
platform
中文
language
Programming Languages
category
282
students
17.5 hours
content
May 2018
last update
$44.99
regular price

What you will learn

学会用C++和面向对象原则做一个多线程的实际项目

理解音视频音视频解码相关知识

学会使用ffmpeg解封装MP4文件或者RTMP等流媒体

学会用ffmpeg多线程解码音视频

熟悉QT界面编程

学会用QT播放音频并控制音频缓冲

学会用QT的opengl Shader 使用GPU将YUV转为RGB

使用QT显示视频并控制视频播放进度

Description

 这门课程给大家讲解的是基于当前最流行FFMpeg视频处理框架和最流行的QT跨平台库。开发的一个完整的视频播放器,不是基于视频播放控件开发,而是从底层全部实现。
   本课程从功能需求分析、基本原理讲解到代码实现演示,让您经历一个实际项目的全过程。
   特别适合有一定C或者C++基础,想要提高自己是实战能力学员,学完此门课,可以说你们项目经历里面就可以增加一项,开发过qt和ffmpeg的C++程序,实现了一个播放器的音视频全部功能。
   本课程同时也适合与想要学习ffmpeg和qt的同学,本课程学完之后你就已经将ffmpeg可以投入实际的项目应用,对于QT的基本原理你也非常清楚了,可以实现复杂的qt界面,您就可以独立开发出音视频的各种应用,包括无人机,安防,直播视频直播,视频会议,并能够开发出跨平台的应用.

 课程在XPlay1.0的基础上,添加了基础知识和使用qt的 opengl shader绘制yuv

Content

介绍

课程介绍
音视频基础知识mpeg4封装格式音视频编码格式讲解
音视频解封装和解码原理分析
图形像素格式RGB和YUV格式分析
PCM音频采样率_通道_planar等格式参数分析
MP4标准和h264格式的NAL的GOP分析

Qt开发环境准备

QT开发环境下载和安装
QtSDK路径目录文件说明
创建第一个qtcreator项目_并确定文件和目录的作用
在linux中安装qt及其依赖并编写测试项目
windows下qtcreator调试环境安装配置使用
vs创建QT项目并详细介绍vs项目设置
VS设置qt库版本导出为qtcreator项目

FFmpeg编译和开发环境准备

windows下ffmpeg库下载安装方法和库文件说明
VS2015配置开发显示ffmpeg配置信息测试项目
VS2015配置32位和64位通用的ffmpeg测试程序
QtCreator配置32位和64位windows通用的ffmpeg测试程序
项目移植到ubuntu中并配置跨平台的pro文件

FFmpeg解封装

ffmpeg SDK软硬解码流程说明
ffmpeg音视频解封装用到的函数和结构体详解
avformat_open_input函数详解
初始化解封装使用avformat_open_input打开MP4文件,并设置延时属性
AVFormatContext结构分析
avformat_close_input清理封装上下文
avformat_find_stream_info探测获取封装上下文的格式信息并打印
AVStream和AVCodecParameters分析
通过遍历获取AVStream音频流信息并打印参数
通过遍历和av_find_best_stream方法获取视频流信息并打印参数.
av_read_frame读取帧数据函数分析和产生的空间问题分析
AVPacket结构解析空间申请-初始化-复制-引用计数函数讲解
av_seek_frame改变播放进度函数详解
av_read_frame和av_seek_frame代码示例并分析内存占用和清理情况

FFmepg解码和像素格式、音频采样转换

AVCodecContext解码上下文初始化讲解
音视频解码上下文创建配置和打开avcodec_open2打开演示
AVFrame格式解析和空间处理函数
avcodec_send_packet和avcodec_receive_frame函数讲解
avcodec_send_packet和avcodec_receive_frame音视频解码代码演示
sws_getContext和sws_scale像素格式和尺寸转换函数讲解
sws_getContext像素格式上下文初始化代码演示
sws_scale像素格式转换代码演示
音频重采样SwrContext格式和swr_convert相关函数详解
swr_init音频重采样上下文初始化和swr_convert音频重采样代码示例

XPlay2 Qt音频及OpenGLShader显示YUV

Qt音频播放接口QAudioOutput详解
Qt播放音频代码演示(源码)
Qt的opengl编程分析及QOpenGLWidget使用方法
顶点和片元作色器原理讲解和yuv转rgb的glsl代码讲解
创建和显示材质glTexImage2D
创建QtOpengl项目提升窗口控件并重载QOpenGLWidget函数(源码)
shader代码并用QGLShaderProgram载入(源码)
写入顶点和材质坐标glVertexAttribPointer(源码)
完成材质的初始化和显存和内存空间分配glTexImage2D(源码)
完成对yuv文件使用OpenGLShader播放(源码)

XPlay2.0 播放器项目实战开发一

面向对象的五大原则
XPlay2.0项目类图分析
XDemu类Open接口开发并测试打开本地文件和香港卫视直播流(源码)
XDemu类Read接口开发测试并分析内存泄漏(源码)
AVCodecParameters音视频参数获取和复制(源码)
av_seek_frameXDemu类Seek接口和清理关闭接口完成(源码)
XDecode音视频解码器打开关闭和清理avcodec_open2(源码)
XDecode的音视频解码Send和Recv接口开发并测试(源码)
XVideoWidget初始化接口完成并测试调用(源码)
XVideoWidget显示完成并添加测试线程完成视频图像播放(源码)

XPlay2.0 播放器项目实战开发二

XResample音频重采样Open和Close接口完成(源码)
XResample接口完成并添加测试代码(源码)
XAudioPlay音频播放接口Open和Close接口完成并测试(源码)
XAudioPlay音频接口完成并测试音频播放成功(源码)
XAudioThread打开音频解码、重采样、播放成功(源码)
XAudioThread缓冲队列Push完成
XAudioThread完成功能并编写测试代码(源码)
XVideoThread视频解码线程和显示接口完成并测试(源码)
XDemuxThread的Open接口完成
XDemuxThread音视频播放测试完成(源码)

XPlay2.0 播放器项目实战开发三

音视频同步策略分析并计算出当前音频播放的pts
测试播放rtmp香港卫视直播解决视频显示的行对齐问题(源码)
通过QT界面选择打开视频文件(源码)
抽象出XDecodeThread类添加Push和Pop函数
XDecodeThread添加Clear清理接口清理音视频线程的缓冲队列(源码)
所有模块添加关闭线程和清理资源接口解决程序退出宕掉的bug(源码)
使用VS的诊断工具查看内存泄漏并修正音频播放线程内存泄漏(源码)
使用QSlider进度条显示播放的进度
窗口尺寸变化和双击全屏播放视频(源码)
各个模块添加暂停功能SetPause完成音视频播放暂停(源码)
完成了Seek视频进度跳转到关键帧位置(源码)
完成了音视频Seek封装功能
重构XDemuxThread和XDecode和ffmpeg解耦合
重载XSlider解决滑动条拖动bug并支持点击转到指定播放位置(源码)
系统移植到ubuntu的linux64位环境编译运行(源码)

Screenshots

FFmpeg + qt 音视频播放器 C++ 跨平台实战 - Screenshot_01FFmpeg + qt 音视频播放器 C++ 跨平台实战 - Screenshot_02FFmpeg + qt 音视频播放器 C++ 跨平台实战 - Screenshot_03FFmpeg + qt 音视频播放器 C++ 跨平台实战 - Screenshot_04

Charts

Price

FFmpeg + qt 音视频播放器 C++ 跨平台实战 - Price chart

Rating

FFmpeg + qt 音视频播放器 C++ 跨平台实战 - Ratings chart

Enrollment distribution

FFmpeg + qt 音视频播放器 C++ 跨平台实战 - Distribution chart
1634932
udemy ID
4/7/2018
course created date
5/3/2021
course indexed date
Bot
course submited by