Bläddra i källkod

AudioDecode 支持linux下编译

huihui 5 år sedan
förälder
incheckning
70627c4be4

+ 8 - 5
source/AudioDecode/AudioDecode.pro

@@ -112,18 +112,20 @@ DEFINES += NDEBUG WIN32 _CONSOLE __WINDOWS_ASIO__ __WINDOWS_DS__ __WINDOWS_WASAP
 
 }
 
-
+DEFINES += NDEBUG _CONSOLE __LINUX_ALSA__
 unix{
     contains(QT_ARCH, i386) {
         message("32-bit, 请自行编译32位库!")
     } else {
         message("64-bit")
         INCLUDEPATH += $$PWD/lib/linux/ffmpeg/include \
-                       $$PWD/lib/linux/sdl2/include \
+                       $$PWD/lib/linux/SDL2/include/SDL2 \
+                       $$PWD/lib/linux/alsa/include \
                        $$PWD/src
 
-        LIBS += -L$$PWD/lib/linux/ffmpeg/lib  -lavformat  -lavcodec -lavdevice -lavfilter -lavutil -lswresample -lswscale
-
+        LIBS += -L$$PWD/lib/linux/ffmpeg/lib  -lavformat  -lavcodec -lavdevice -lavfilter -lavutil -lswresample -lswscale -lpostproc
+        LIBS += -L$$PWD/lib/linux/SDL2/lib -lSDL2
+        LIBS += -L$$PWD/lib/linux/alsa/lib -lasound
         LIBS += -lpthread -ldl
     }
 
@@ -133,5 +135,6 @@ unix{
 #解压库文件
 #QMAKE_PRE_LINK += "cd $$PWD/lib/linux && tar xvzf ffmpeg.tar.gz "
 system("cd $$PWD/lib/linux && tar xvzf ffmpeg.tar.gz")
-
+system("cd $$PWD/lib/linux && tar xvzf SDL2.tar.gz")
+system("cd $$PWD/lib/linux && tar xvzf alsa.tar.gz")
 }

+ 23 - 1
source/AudioDecode/lib/RtAudio/RtAudio.pri

@@ -3,6 +3,8 @@ INCLUDEPATH += $$PWD/src
 
 INCLUDEPATH += $$PWD/include
 
+win32{
+
 HEADERS += \
     $$PWD/include/asio.h \
     $$PWD/include/asiodrivers.h \
@@ -26,9 +28,29 @@ SOURCES += \
     $$PWD/src/RtAudio.cpp \
     $$PWD/src/rtaudio_c.cpp
 
-win32{
     LIBS += -lAdvapi32 -luser32 -lole32 -ldsound
 }
 
+unix{
+
+HEADERS += \
+    $$PWD/include/asio.h \
+    $$PWD/include/asiodrivers.h \
+    $$PWD/include/asiodrvr.h \
+    $$PWD/include/asiolist.h \
+    $$PWD/include/asiosys.h \
+    $$PWD/include/dsound.h \
+    $$PWD/include/functiondiscoverykeys_devpkey.h \
+    $$PWD/include/ginclude.h \
+    $$PWD/include/soundcard.h \
+    $$PWD/src/RtAudio.h \
+    $$PWD/src/rtaudio_c.h
+
+SOURCES += \
+    $$PWD/src/RtAudio.cpp \
+    $$PWD/src/rtaudio_c.cpp
+
+}
+
 DISTFILES += \
     $$PWD/src/rtaudio.pc.in

BIN
source/AudioDecode/lib/linux/SDL2.tar.gz


BIN
source/AudioDecode/lib/linux/alsa.tar.gz


BIN
source/AudioDecode/lib/linux/ffmpeg.tar.gz


+ 14 - 0
source/AudioDecode/lib/linux/库源码/README.md

@@ -0,0 +1,14 @@
+# 1.编译alsa  
+./configure --prefix=/root/Desktop/alsa --enable-static=yes --enable-shared=no  
+make -j16  
+make install  
+  
+  
+# 2.编译SDL  
+./configure --prefix=/root/Desktop/SDL2 --enable-alsa --with-alsa-prefix=/root/Desktop/alsa/lib  --with-alsa-inc-prefix=/root/Desktop/alsa/include  
+make -j16  
+make install  
+
+# 3.编译ffmpeg  
+编译ffmpeg参考:https://github.com/yundiantech/FFMPEG_DEMO/tree/master/ffmpeg-src
+

BIN
source/AudioDecode/lib/linux/库源码/SDL2-2.0.3.tar.gz


BIN
source/AudioDecode/lib/linux/库源码/alsa-lib-1.2.1.tar.bz2


+ 1 - 2
source/AudioDecode/src/AudioReader/AAC/AACReader.cpp

@@ -129,9 +129,8 @@ AACFramePtr AACReader::getNextFrame()
     /// 把后一帧数据覆盖上来
     int pos_2 = pos + buffersize;
     int leftSize = mBufferSize - pos_2;
-    memcpy(mAACBuffer, mAACBuffer + pos_2, leftSize);
+    memmove(mAACBuffer, mAACBuffer + pos_2, leftSize);
     mBufferSize = leftSize;
 
     return framePtr;
 }
-

+ 2 - 2
source/AudioDecode/src/AudioReader/ReadAudioFileThread.cpp

@@ -173,8 +173,8 @@ void ReadAudioFileThread::run()
                 std::list<float> righttChannelDbValues;
 
                 ///记录当前帧的所有采样点db值总和
-                u_int64 leftChannelTotal = 0;
-                u_int64 rightChannelTotal = 0;
+                uint64_t leftChannelTotal = 0;
+                uint64_t rightChannelTotal = 0;
 
                 /// 计算分贝 音频数据与大小
                 /// 首先我们分别累加每个采样点的数值,除以采样个数,得到声音平均能量值。

+ 20 - 17
source/AudioDecode/src/MainWindow.cpp

@@ -153,32 +153,35 @@ void MainWindow::onUpdatePlayingValue(const float &leftChannel,
         mRightChannelDbValueList.removeFirst();
     }
 
-    FunctionTransfer::runInMainThread([=]()
+    auto showDbValues = [=](QChartView  *chartView, const QList<std::list<float>> &channelDbValueList)
     {
-        ui->progressBar_left->setValue(leftChannel*100);
-        ui->progressBar_right->setValue(rightChannel*100);
+        QList<QPointF> valueList;
 
-        auto showDbValues = [=](QChartView  *chartView, const QList<std::list<float>> &channelDbValueList)
+        int i=0;
+        for (const std::list<float> &channelDbValues : channelDbValueList)
         {
-            QList<QPointF> valueList;
-
-            int i=0;
-            for (const std::list<float> channelDbValues : channelDbValueList)
+            for(const float &value : channelDbValues)
             {
-                for(const float value : channelDbValues)
-                {
-                    valueList.append(QPointF(i, value));
-                    i++;
-                }
+                valueList.append(QPointF(i, value));
+                i++;
             }
+        }
 
+        FunctionTransfer::runInMainThread([=]()
+        {
             chartView->chart()->axisX()->setRange(0, i);
-
             ((QLineSeries*)chartView->chart()->series().first())->replace(valueList);
-        };
+        });
+
+    };
+
+    showDbValues(mCurrentChartView_Left,  mLeftChannelDbValueList);
+    showDbValues(mCurrentChartView_Right, mRightChannelDbValueList);
 
-        showDbValues(mCurrentChartView_Left,  mLeftChannelDbValueList);
-        showDbValues(mCurrentChartView_Right, mRightChannelDbValueList);
+    FunctionTransfer::runInMainThread([=]()
+    {
+        ui->progressBar_left->setValue(leftChannel*100);
+        ui->progressBar_right->setValue(rightChannel*100);
 
         ///设置进度
         {

+ 3 - 2
source/VideoDecode/README.md

@@ -4,8 +4,9 @@ ffmpeg4.1解码h264和h265,并使用Qt的OpenGL显示播放的例子
 这是Qt的工程,建议使用Qt Creator 打开
 
 Qt5.6.2(vs2013/mingw) + ffmpeg4.1  
-1.程序可以在linux下直接编译使用。  
-2.已经编译好的库为centos6.5(64位)(gcc 版本 4.4.7)下编译的,如需32位的库请自行编译。 
+1.程序可以在windows/linux下直接编译使用。
+2.windows下的库为官网直接下载的。  
+3.linux下已经编译好的库为centos6.5(64位)(gcc 版本 4.4.7)下编译的,如需32位的库请自行编译。 
 
 
 关于代码的解释 请参考:  

+ 3 - 2
source/VideoEncode/README.md

@@ -3,8 +3,9 @@
 这是Qt的工程,建议使用Qt Creator 打开
 
 Qt5.6.2(vs2013/mingw) + ffmpeg4.1  
-1.程序可以在linux下直接编译使用。  
-2.已经编译好的库为centos7.4(64位)(gcc 版本 4.8.5)下编译的,如需32位的库请自行编译。 
+1.程序可以在windows/linux下直接编译使用。
+2.windows下的库为官网直接下载的。  
+3.linux下已经编译好的库为centos7.4(64位)(gcc 版本 4.8.5)下编译的,如需32位的库请自行编译。 
 
 # 注:由于采集的图片帧率是不固定的,因此保存后的264或265文件直接播放,速度会不对,属于正常现象。