日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

mp3lame linux 编译,ubantu-16+ndk-r14b 编译 ffmpeg-4.0.2+lame_mp3-3.99.5

發(fā)布時(shí)間:2023/12/16 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mp3lame linux 编译,ubantu-16+ndk-r14b 编译 ffmpeg-4.0.2+lame_mp3-3.99.5 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、環(huán)境和軟件版本

ubantu-16.4.1

ndk-r14b

ffmpeg-4.0.2

lame_mp3-3.99.5

2、廢話(huà)

因?yàn)槲乙彩切率?#xff0c;對(duì)linux不熟悉,對(duì)編譯不熟悉,最喜歡的動(dòng)作就是拿來(lái)主義,研究不深,所以不敢保證本文所有的操作都是一步到位沒(méi)有問(wèn)題,再者,即使跑不通,也可以給大家提供個(gè)思路。

根據(jù)我上一篇博客(https://my.oschina.net/u/1462828/blog/1860847)的編譯步驟,已經(jīng)可以編譯出來(lái)Android平臺(tái)運(yùn)行的so文件了,但是還存在的問(wèn)題就是,因?yàn)榘鏅?quán)問(wèn)題,所以ffmpeg是不包含MP3的編碼器的,所以我們只能是自己再編譯一個(gè)lamemp3到ffmpeg里面。

我們可以先嘗試編譯一個(gè)ubantu下可以直接運(yùn)行的ffmpeg帶MP3的,很簡(jiǎn)單。首先安裝lamemp3(ubantu命令:sudo apt-get install libmp3lame-dev),然后下載ffmpeg源碼并解壓,然后cd到源碼目錄,運(yùn)行ubantu命令三部曲:

1:./configure --enable-libmp3lame

2:make

3:make install

完了之后可以直接運(yùn)行ffmpeg -version,就可以看到ffmpeg的版本信息了,然后再找個(gè)音樂(lè),測(cè)試一下命令:ffmpeg -i 1.wav 2.mp3

命令如果運(yùn)行成功,成功的生成了2.MP3,那就證明MP3編碼器已經(jīng)集成成功了。

然后,就這么簡(jiǎn)單?

顯然,不可能這么簡(jiǎn)單,如果這么簡(jiǎn)單的話(huà),我也不用專(zhuān)門(mén)寫(xiě)個(gè)帖子了。

我用上一篇博客編譯的腳本,加上了--enable-libmp3lame 這一句,然后運(yùn)行編譯,一直在報(bào)錯(cuò):

找到ffbuild/config.log之后,天書(shū)……不懂的情況下生啃日志,總是一件讓人感到禿頂?shù)氖虑椤?/p>

最后字里行間,找到了一些蛛絲馬跡:

于是乎,初步懷疑是ffmpeg沒(méi)有定位到安裝的lameMP3目錄的原因,于是乎各種百度,找到的都是“apt-get install libmp3lame-dev”這句,很顯然這樣是不行的,至于原因后面會(huì)說(shuō)。

之后,各種騷操作都來(lái)了一波,外加中間絕望得放下了鍵盤(pán),拿起手機(jī)打了幾把吃雞游戲。

腦子清醒了之后再來(lái),終于定位到了問(wèn)題的關(guān)鍵所在:

-cflags是要定位到include目錄,前面加-I(大寫(xiě)i),ldflags是要定位到lib目錄,前面加-L

理論上是這樣,但是我換了七七四四九種打開(kāi)的方式和九九八十一個(gè)運(yùn)行命令的姿勢(shì),均換回來(lái)了一句冷冰冰的:

ERROR: libmp3lame >= 3.98.3 not found

無(wú)奈,網(wǎng)上的帖子也基本上都是h264+aac的,搞直播的那幫人都不用mp3了,于是只能是找了個(gè)ffmpeg的群,群里也不是很活躍,索性還是有大神常駐的,大神雖然沒(méi)有提供到最直接的幫助,但是也給了一個(gè)思路,就是用用ndk編譯lamemp3。

意思是,既然用的ndk編譯ffmpeg,是不是需要導(dǎo)入的lame也是需要用ndk來(lái)編譯。

說(shuō)剛就剛……但是,這個(gè)怎么用ndk編譯lamemp3?直接套用ffmpeg的那個(gè)腳本好像也不行,路徑上都沒(méi)有crpss-prefix等標(biāo)簽。

那就百度吧,沒(méi)辦法的事情,找了好久也沒(méi)有頭緒,后來(lái)靈光一閃,ffmpeg+h264+aac不也是一樣的道理么?于是乎找了一個(gè)帖子,然后把編譯aac的腳本搞了下來(lái),魔改了一番,經(jīng)過(guò)了七七四十九種打開(kāi)方式和九九八十一個(gè)不同姿勢(shì),終于編譯成功了。

然后在改了一下ffmpeg的-cflags標(biāo)簽,心中無(wú)限的憧憬和希望,感覺(jué)世界充滿(mǎn)了友愛(ài)與和諧,唯獨(dú)比較刺眼的就是那句紅色的,冷冰冰的代碼:

……

再檢查了一下過(guò)程,原來(lái)是cflags、ldflags的路徑少了一層,虛驚一場(chǎng)。

編譯完成后,拷貝so包出來(lái),米6真機(jī)測(cè)試,沒(méi)問(wèn)題。

果然,世界還是友愛(ài)的,和諧的。

3、編譯過(guò)程

1、源碼下載

lamemp3:http://lame.sourceforge.net/download.php

ffmpeg:http://ffmpeg.org/

切記在ubantu環(huán)境下下載,我這邊的軟件解壓目錄為:

lamemp3:? ? /home/xiaoyu/lame-3.99.5

ndk:? ? /home/xiaoyu/ndk

ffmpeg:? ? /home/xiaoyu/ffmpeg/ffmpeg-4.2.0/

還是忍不住吐槽一下lame的版本命名,最新版本是3.100,上一版是3.99.5,然后ffmpeg支持的是3.98.3以上的。最開(kāi)始的時(shí)候安裝和下載的是3.100,顯示已經(jīng)是最新版本了,這個(gè)最新版本是3.1為何ffmpeg那邊是要3.9,后來(lái)網(wǎng)上找了一下,下載了個(gè)3.99.5的,現(xiàn)在回過(guò)頭一看,這他媽,哪門(mén)子3.1,分明是三點(diǎn)一百……

2、編譯lamemp3

下載,解壓,略……

然后是執(zhí)行編譯的腳本build.sh

#!/bin/bash

NDK_HOME=/home/xiaoyu/ndk/android-ndk-r14b

ANDROID_API=android-21

SYSROOT=$NDK_HOME/platforms/$ANDROID_API/arch-arm

ANDROID_BIN=$NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/

CROSS_COMPILE=${ANDROID_BIN}/arm-linux-androideabi-

export PATH=$PATH:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools

ARM_INC=$SYSROOT/usr/include

ARM_LIB=$SYSROOT/usr/lib

LDFLAGS=" -nostdlib -Bdynamic -Wl,--whole-archive -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,nocopyreloc -Wl,-soname,/system/lib/libz.so -Wl,-rpath-link=$ARM_LIB,-dynamic-linker=/system/bin/linker -L$NDK_HOME/sources/cxx-stl/gnu-libstdc++/libs/armeabi -L$NDK_HOME/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/arm-linux-androideabi/lib -L$ARM_LIB -lc -lgcc -lm -ldl "

FLAGS="--host=arm-linux --enable-static --disable-shared"

export CXX="${CROSS_COMPILE}g++ --sysroot=${SYSROOT}"

export LDFLAGS="$LDFLAGS"

export CC="${CROSS_COMPILE}gcc --sysroot=${SYSROOT}"

CPU=armv7-a

./configure $FLAGS \

--prefix=$(pwd)/android/$CPU

cd到lame-3.99.5目錄

chmod +x build.sh

./build.sh

make

make install

編譯完成后,會(huì)在lame-3.99.5目錄下看到一個(gè)android/armv7-a的目錄

里面就是我們需要的東西。

2、編譯ffmpeg

build.sh腳本與上一篇博客的基本一致,只是加上了一句--enbale-libmp3lame 和修改了cflags、ldfags標(biāo)簽

#!/bin/bash

NDK=/home/xiaoyu/ndk/android-ndk-r14b

SYSROOT=$NDK/platforms/android-21/arch-arm/

CPU=armv7-a

TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64

PREFIX=$(pwd)/android/$CPU

ADDI_CFLAGS="-marm"

OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "

function build_android

{

./configure \

--prefix=$PREFIX \

--enable-neon \

--enable-hwaccels \

--enable-shared \

--enable-libmp3lame \

--enable-jni \

--enable-mediacodec \

--enable-decoder=h264_mediacodec \

--disable-static \

--disable-doc \

--enable-ffmpeg \

--disable-ffplay \

--disable-ffprobe \

--enable-avdevice \

--disable-doc \

--disable-symver \

--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \

--target-os=android \

--arch=arm \

--cpu=armv7-a \

--enable-cross-compile \

--sysroot=$SYSROOT \

--extra-cflags="-Os -fpic $ADDI_CFLAGS" \

--extra-ldflags="$ADDI_LDFLAGS" \

$ADDITIONAL_CONFIGURE_FLAG

}

ADDI_CFLAGS="-I/home/xiaoyu/lame/include"

ADDI_LDFLAGS="-L/home/xiaoyu/llame/lib"

build_android

老規(guī)矩,cd到ffmpeg-4.0.2目錄

chmod +x build.sh

./build.sh

make

make install

完成之后會(huì)在ffmpeg-4.0.2目錄下找到一個(gè)android/armv7-a目錄

到這里,就大功告成了,自己動(dòng)手吧,編譯好的我就不發(fā)出來(lái)了。

總結(jié)

以上是生活随笔為你收集整理的mp3lame linux 编译,ubantu-16+ndk-r14b 编译 ffmpeg-4.0.2+lame_mp3-3.99.5的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。