音視頻有關的部分都是使用標准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; }