ffmpeg android 平臺移植
之前曾寫過一篇《FFmpeg在Linux下安裝編譯過程》,今天有空就用Android Studio編譯FFmpeg庫並移植,並附上呼叫ffmpeg簡單示例,看下Agenda如下:
- 下載FFmpeg 3.1.3
- 下載NDK
- 配置ndk環境
- 編譯FFmpeg
- 移植到Android平臺
- 呼叫編譯的so示例
下載FFmpeg 3.1.3
雙擊解壓如下,得到一個資料夾:
下載NDK
- 供參考下載地址見本文最下面,也可自行下載。
- 雙擊解壓如下,同樣得到一個資料夾:
配置ndk環境
- 啟動終端Terminal
- 進入當前使用者的home目錄
- 輸入cd ~ 或 /Users/YourUserName
- 建立.bash_profile
- 輸入touch .bash_profile
-
編輯.bash_profile檔案
- 輸入open -e .bash_profile
因為是為了配置NDK開發環境,輸入Android NDK下目錄,前面是android sdk的,可以不用動它,最終.bash_profile檔案如下:
export PATH=$(PATH):/Users/hejunlin/android-sdks/platform-tools export NDK_ROOT=/Users/hejunlin/Downloads/android-ndk-r10e export PATH=$PATH:$NDK_ROOT
- 1
- 2
- 3
- 1
- 2
- 3
- 儲存檔案,關閉.bash_profile
- 更新剛配置的環境變數
輸入source .bash_profile - 看看剛剛設定的環境變數
離開了編輯器後,在終端輸入 $PATH 並且按enter鍵來確認是否編輯成功,此時應該會出現所有的環境變數(以:號相分隔)
表明配置成功
接下來·開始進行測試ndk是否能正常編譯jni
(1) 終端進入到 NDK下面的 samples 目錄下。
(2) 輸入 cd hello-jni/ ,回車,然後執行 ndk-build
出現以下介面代表配置成功。
編譯FFmpeg
- 在編譯前,在原始碼中,修改FFmpeg的configure
- 下載FFmpeg原始碼之後,首先需要對原始碼中的configure檔案進行修改。由於編譯出來的動態庫檔名的版本號在.so之後(例如“libavcodec.so.5.100.1”),而android平臺不能識別這樣檔名,所以需要修改這種檔名。在configure檔案中找到下面幾行程式碼(在3209-3212行):
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
替換為下面內容:
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
接下來開始寫shell指令碼
這裡有一個坑:我用記事本寫了個sh指令碼,一直報如下錯誤:
這種情況應該有兩種原因:
- 1.在WIN底下用文字編輯工具修改過引數變數,在儲存的時候沒注意編碼格式造成的,
- 2.也有可能是在VIM裡修改,第一行末尾按到ctrl+v
這裡避開這個彎,我找到FFmpeg下一個version.sh的shell指令碼,複製了一份
重新命名為build_android.sh。指令碼如下:
#!/bin/sh
NDK=/Users/hejunlin/Downloads/android-ndk-r10e
SYSROOT=$NDK/platforms/android-21/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
如果大家要編譯,記得改下前三行,對應自己機器上的環境
接著開始執行這個shell指令碼,在終端輸入 ./ build_android.sh , 如圖:
開始進行自動編譯:
中間過程:
喝杯咖啡時間,就編譯好了,結果如下:
這時會發現 FFmpeg下多了一個資料夾android:
開啟如下:
這樣我們要的so就有了,當然,這只是基本的。
移植到Android平臺
接下來寫在Android studio寫一個示例,呼叫ffmpeg中方法
建一個工程:在src/main下建一個jni目錄
把前面編譯好的android目錄移植過來
simplest_ffmpeg_helloworld.c程式碼如下:
Android.mk檔案內容如下:
本文出自逆流的魚yuiop:http://blog.csdn.net/hejjunlin/article/details/52661331
開始編譯目標so,在Studio中的Terminal面板中:執行ndk-build
(在此之前記得要在local.properties下配置ndk目錄)
會在libs下面生成一些so,也可以看到我們目標so:
然後建立一個jniLibs資料夾,把這些so拷貝進去
呼叫編譯的so示例
接著寫MainActivity程式碼,如下:
最終效果如圖:
本文轉載自:http://blog.csdn.net/hejjunlin/article/details/52661331
[天天寫程式碼快變木頭人了,來關注我的微信公眾號“蹲坑兒旁騖”或者我的頭條號“蹲坑兒”,我們一起蹲坑兒、解悶兒、為生活添料!]
相關推薦
ffmpeg android 平臺移植
之前曾寫過一篇《FFmpeg在Linux下安裝編譯過程》,今天有空就用Android Studio編譯FFmpeg庫並移植,並附上呼叫ffmpeg簡單示例,看下Agenda如下: 下載FFmpeg 3.1.3下載NDK配置ndk環境編譯FFmpeg移植到Android平臺
FFMPEG研究: FFmpeg的Android平臺移植編譯
摘要:本文主要介紹將FFmpeg音視訊編解碼庫移植到Android平臺上的編譯和基本測試過程。 環境準備: Ubuntu12.04 TLS android-ndk-r9d-linux-x86_64.tar.bz2 adt-bundle-windows-x86_
FFmpeg的Android平臺移植及使用
參考部落格 http://blog.csdn.net/gobitan/article/details/22750719 原始碼下載:http://download.csdn.net/detail/h291850336/9166229 失敗多了就成功了..... 環境
FFmpeg的Android平臺移植—編譯篇
摘要:本文主要介紹將FFmpeg音視訊編解碼庫移植到Android平臺上的編譯和基本測試過程。 環境準備: Ubuntu12.04 TLS android-ndk-r9d-linux-x86_64.tar.bz2 ffmpeg3.0 第一步:下載 1.配置ubunt
Android平臺移植ffmpeg的一些筆記
首先: 是要編譯libjnivideo.so和libjniaudio.so 這兩個so因為不同的版本或者修改過的framework是不一樣的,所以需要在android原始碼中 編譯出自己的so。我的android 2.1原始碼是從官網下載回來的,沒有經過修改。 編譯主要
Cocos2d-x v3.0正式版嘗鮮體驗【2】 Android平臺移植
生成 ble ack nts 做的 導入 eclipse so文件 腳本 今天沒事又嘗試了下3.0正式版關於Android平臺的移植,把新建的項目移植了下。過程僅用了十分鐘左右,什麽概念?!好吧,事實上我想說,這個版本號真的移植非常輕松啊,只是還沒加上其它東西,只是就眼
Android平臺移植經驗小結
Android Studio使用經驗 快捷鍵 去某行 Ctrl+G 回到上一編輯位置 View | Toolbar duplicates當前行或選中塊 Ctrl+D 特性 Project頁面,便於檢視生成的
FFMEPG 平臺移植,介面簡化和外部模組接入 (四)ffmpeg android移植(ffmpeg 視訊編碼)
FFMPEG 視訊編碼最常見的H264,H265需要X264,X265外部模組支援,可以從我們開源平臺的FFMPEG編譯專案裡面獲取程式碼和配置進行一鍵式編譯:https://github.com/Car-eye-team/Car-eye-FFMPEG,我們下面的程式碼主要是為了簡化程式碼呼叫結構。只需要配置
Ubuntu下用NDK編譯移植FFmpeg 2.0(配置最新版x264)到Android平臺
將x264配置到ffmpeg中需要先編譯x264,生成靜態庫或動態庫。因為264的靜態庫本身不大(我編譯完成後是1.1M)且考慮到平臺移植問題,這裡選擇的是編譯生成靜態庫。 準備,新建工作空間 (1)建立總目錄FFmpeg-Android eg: mkdir workspace --> cd wor
FFMEPG 平臺移植,介面簡化和外部模組接入 (一)ffmpeg android移植(ndk 編譯)
Car-eye-FFMPEG專案是Car-eye 開源平臺的一個新專案,目的是在FFMPEG專案和其外部模組,如freetype,X264的基礎上建立一個多平臺編譯,介面呼叫簡單的工具集。本部落格是一個連載,首先從android開始寫吧。因為FFMPEG本身對android編譯
ubuntu移植libcurl到Android平臺
簡書排版 http://www.jianshu.com/p/332011ebd6e5 最近移植了很多C++平臺的庫,很多都是後臺開發的庫,因為NDK開發,以後很可能會使用,提前預研一下。 libcurl這個庫很有名,用的人比較多,下載原始碼,直接就可以編譯使用,以前在Windows平
ubuntu移植crypto++到Android平臺
簡書排版 http://www.jianshu.com/p/eaeeed899251 ubuntu移植crypto++到Android平臺 官方Wiki http://www.cryptopp.com/wiki/Android_(Command_Line) 這個移植比較簡單,
只能用Android studio做平臺移植了! 在Windows10下, 開發Android。
安裝好IDE後, 會一直顯示同步失敗, 看看如下步驟: 需要注意的是: -> 安裝NDK 自帶的NDK就是辣雞! 自己去下一個15版本的 -> 按照系統提示一步一步安裝其他未安裝的元
Mac環境下Android Studio移植FFmpeg
準備: 1. Android Studio 2. FFmpeg-2.8.4 3. android-ndk-r10e 一、ndk編譯ffmpeg 1.下載ffmpeg和ndk ffmpeg下載地址:http://
android平臺下基於ffmpeg和ANativeWindow實現簡單的視訊播放器
音視訊實踐學習 android全平臺編譯ffmpeg以及x264與fdk-aac實踐 ubuntu下使用nginx和nginx-rtmp-module配置直播推流伺服器 android全平臺編譯ffmpeg合併為單個庫實踐 android-studio使用c
android平臺下基於ffmpeg採集Camera資料編碼成H.264推流到RTMP伺服器
音視訊實踐學習 android全平臺編譯ffmpeg以及x264與fdk-aac實踐 ubuntu下使用nginx和nginx-rtmp-module配置直播推流伺服器 android全平臺編譯ffmpeg合併為單個庫實踐 android-studio使用c
android平臺下基於ffmpeg對相機採集的NV21資料編碼為MP4視訊檔案
音視訊實踐學習 android全平臺編譯ffmpeg以及x264與fdk-aac實踐 ubuntu下使用nginx和nginx-rtmp-module配置直播推流伺服器 android全平臺編譯ffmpeg合併為單個庫實踐 android-studio使用c
Tensor on Android學習筆記(三) ----將Yolo移植到android平臺
yolo v2移植到android已經有很多案例了專案地址在https://github.com/chentyjpm/DarknetDemoInAndroid不過原博主提供的apk是經過優化的,我自己編譯的還達不到原博主的效果,還需要再改善然後我們要做的就是將v3版本移植夠來
Android系統移植與平臺開發(五)- 編譯Android原始碼
2.3編譯Android原始碼 Android原始碼體積非常龐大,由Dalvik虛擬機器、Linux核心、編譯系統、框架程式碼、Android定製C庫、測試套件、系統應用程式等部分組成,在編譯Android原始碼之前,必須要先掌握Android原始碼的組成。 2.3.1An
Android系統移植與平臺開發(八)- HAL Stub框架分析
HAL stub的框架比較簡單,三個結構體、兩個常量、一個函式,簡稱321架構,它的定義在:@hardware/libhardware/include/hardware/hardware.h@hardware/libhardware/hardware.c/* 每一個硬體都通