前言
關于Opus,我相信能找到這篇文章的人都應該知道他是用來干啥的了,這里我就不多做解釋了,寫這篇文章是為了加深記憶,也方便有需要的人
Opus音頻編解碼庫的官方描述如下:
Opus是一款完全開放蒂秘,沒有版權費用移必,并且功能強大的音頻編解碼器巩梢。無論是互聯(lián)網(wǎng)上的交互式語音和音樂傳輸裂垦,還是流媒體應用它都同樣適用副瀑。它所遵循的標準為RFC 6716舱污,其中包含Skype的SILK編解碼器和Xiph.Org的CELT編解碼器的技術。
Opus的優(yōu)點
比特率從6 kb / s到510 kb / s
采樣率從8 kHz(窄帶)到48 kHz(全頻段)
幀大小從2.5毫秒到60毫秒
支持恒定比特率(CBR)和可變比特率(VBR)
從窄帶到全頻帶的音頻帶寬
支持語音和音樂
支持單聲道和立體聲
支持多達255個通道(多流幀)
動態(tài)可調(diào)比特率粱栖,音頻帶寬和幀大小
良好的損耗穩(wěn)健性和丟包隱藏(PLC)
浮點和定點實現(xiàn)
(以上信息來自Google翻譯)
源碼下載
你可以從Opus的官網(wǎng)下載libopus的源碼包,傳送門: http://www.opus-codec.org/downloads/
截至目前最新版本為 1.2.1
編譯配置
Opus的編譯沒有系統(tǒng)要求,在 Windows , Linux 還是 Mac 上編譯都可以
- 在編譯之前,你需要保證你的電腦上有安裝 Android NDK 并且添加到了 PATH 環(huán)境變量中
- 源碼下載下來后是一個tar.gz的壓縮包,首先我們先將它解壓出來,放在任意位置都行
- 進入源碼目錄,在源碼目錄下新建一個out文件夾(當然其他名稱也可以,沒有固定要求)
- 在out目錄下新建一個 Android.mk 文件,并 打開編輯
- 將這一段復制到 Android.mk 文件中并保存
LOCAL_PATH := $(call my-dir)/..
include $(CLEAR_VARS)
# 編譯所有平臺 armeabi , armeabi-v7a , arm64-v8a , x86 , x86_64 , mips , mips64
APP_ABI := all
# 使用C++11標準編譯
APP_CPPFLAGS +=-std=c++11
APP_STL := gnustl_shared
# 指定API等級
APP_PLATFORM :=android-19
include $(LOCAL_PATH)/celt_sources.mk
include $(LOCAL_PATH)/silk_sources.mk
include $(LOCAL_PATH)/opus_sources.mk
# 輸出的文件名稱 libopus.so
LOCAL_MODULE := opus
SILK_SOURCES += $(SILK_SOURCES_FIXED)
CELT_SOURCES += $(CELT_SOURCES_ARM)
SILK_SOURCES += $(SILK_SOURCES_ARM)
# 指定源碼文件
LOCAL_SRC_FILES := \
$(CELT_SOURCES) $(SILK_SOURCES) $(OPUS_SOURCES) $(OPUS_SOURCES_FLOAT)
LOCAL_LDLIBS := -lm -llog
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/include \
$(LOCAL_PATH)/silk \
$(LOCAL_PATH)/silk/fixed \
$(LOCAL_PATH)/celt
# 編譯參數(shù)配置
LOCAL_CFLAGS := -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64
LOCAL_CFLAGS += -Drestrict='' -D__EMX__ -DOPUS_BUILD -DFIXED_POINT -DUSE_ALLOCA -DHAVE_LRINT -DHAVE_LRINTF -O3 -fno-math-errno
LOCAL_CPPFLAGS := -DBSD=1
LOCAL_CPPFLAGS += -ffast-math -O3 -funroll-loops
include $(BUILD_SHARED_LIBRARY)
編譯Opus
其實吧,很簡單,打開你的命令行,切換到out目錄,然后執(zhí)行
ndk-build
之后等待編譯完成,編譯完成后會在out目錄生成一個 libs 文件夾,里邊就是你要的東西
附錄
為了方便各位操作,此處列出一些常用的命令行操作
Windows 常識
- Win+R 打開CMD命令窗口
- 直接輸入 盤符+冒號 然后回車,切換到其他磁盤
- dir 命令查看當前目錄下的所有文件和文件夾
- cd+空格+文件夾名 進入到該文件夾內(nèi),如果只記得文件夾的首字母,那就輸入一個首字母然后按 Tab 即可自動補全
Linux & Mac 常識
- Ctrl+Alt+T 打開終端(僅限Ubuntu,Debian等Linux發(fā)行版,我窮逼買不起蘋果,所以蘋果什么快捷鍵我就不知道了)
- ls 查看當前目錄下的所有文件夾和文件(不包括隱藏的文件),如果需要查看隱藏文件則后邊加一個 -a
- cd+空格+文件夾名 進入到該文件夾內(nèi),同理Windows,如果只記得首字母,輸入一個,然后按 Tab