音視頻有關的部分都是使用標准C++的,只有界面的部分才會使用Qt的內容。這樣也是為了方便以后移植到其他系統上。
音視頻開發中最常做的就是編解碼的操作。以H.264為例:如果想要自己實現編碼h.264,需要對H.264非常的了解。可以選擇去看H.264的文檔,也可以使用別人已經寫好的源代碼。
主流的H.264編碼器:x264、t264等
但對於新手來說,由於對h.264不是很了解,因此在使用x264上有點困難,出了問題通常不知道如何解決。並且這些庫都只能編碼一種格式,所以一開始不推薦使用。 而是推薦使用FFMPEG。
FFMPEG
FFMPEG是一個集成了各種編解碼器的庫,可以說是一個全能型的工具,從視頻采集、視頻編碼到視頻傳輸(包括RTP、RTCP、RTMP、RTSP等等協議)都可以直接使用FFMPEG來完成,更重要的一點FFMPEG是跨平台的,Windows、Linux、Aandroid、IOS這些主流系統通吃。因此初期強烈建議直接使用FFMPEG。
1、下載FFMPEG:https://ffmpeg.zeranoe.com/builds/
- Static :靜態庫版本
- Shared:動態庫版本
- Dev:提供給開發者用的lib文件
下載Dev文件和Shared文件

只留下include和lib這2個文件夾,其他的都刪了

創建Qt的純C++項目,在.pro文件中鏈接庫文件(在dev文件的lib文件夾下)

再將shared/bin文件夾中的dll文件,復制到當前qt工程debug文件中

測試一下,輸出版本號
#pragma execution_character_set("utf-8")
#include <iostream>
using namespace std;
extern "C"
{
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libswscale/swscale.h"
#include "libavdevice/avdevice.h"
}
///而FFMPEG是C的庫
///由於我們建立的是C++的工程
///編譯的時候使用的C++的編譯器編譯
///因此這里需要加上extern "C"
///否則會提示各種未定義
int main(int argc, char *argv[])
{
cout << "Test FFmpeg!" << endl;
av_register_all();
unsigned version = avcodec_version();
cout << "version :" << version;
return 0;
}

