librtmp linux下 编译,LibRtmp编译并导入Android Studio
title: LibRTMP_Demo
date: 2017-06-13 15:40:15
tags: 學習
categories: android
[TOC]
LibRtmp編譯并導入Android Studio
簡介
做了好久的推流項目,但是沒有接觸過底層知識,所以只是相當于SDK的使用者。在工作不忙的時候,突然間想學一學LibRtmp。不求能完全學會,只希望能自己編譯出一個可以推流的庫。
編譯環境
LibRtmp編譯
Ubuntu 虛擬機:36~16.04.1-Ubuntu SMP Sun Feb 5 09:39:41 UTC 2017 i686 i686 i686 GNU/Linux
Android NDK:android-ndk-r10e,這里注意:我的系統是32位的,所以這個也是32位的
導入Android Studio
Android Studio:版本2.3
需要下載SDK Tools中的 CMake,LLDB,NDK.
LibRtmp的編譯
編譯步驟
保證你虛擬機中搭建了完整的環境,可以先編譯NDK中的Demo試試
編譯LibRtmp需要linux中安裝了Openssl。
安裝openssl
sudo apt-get install openssl
sudo apt-get install libssl-dev
需要注意: 我的ubuntu安裝完成后,openssl在/var/include/openssl中。執行命令
: openssl version
OpenSSL 1.0.2g 1 Mar 2016
下載librtmp
mkdir librtmp #選擇創建自己的目錄
git clone git://git.ffmpeg.org/rtmpdump
配置編譯環境。這一步主要是復制NDK中一些編譯腳本到特定的位置。
/home/xiaoqiang/android-ndk-r10e/build/tools/make-standalone-toolchain.sh
--toolchain=arm-linux-androideabi-4.9 --platform=android-14
--install-dir=/home/xiaoqiang/workspace/librtmp/utils
設置環境變量。把之前復制的腳本統一加入環境變量中
export PATH=/home/xiaoqiang/workspace/librtmp/utils/bin:$PATH
**
到了這一步,說明你的編譯環境已經OK了。接下來開始編譯工作。
編譯LibRtmp需要先編譯polarssl,所以我們開始polarssl的下載和編譯工作
**
下載polarssl并且做一個小改動
tar -zxvf polarssl-1.2.14-gpl.tgz #我下載的版本是1.2.14。
#改動
cd include/polarssl/config.h
#去掉 POLARSSL_HAVEGE_C 的注釋
#define POLARSSL_HAVEGE_C
polarssl編譯
1. 首先進入polarssl的目錄中
2. 執行編譯命令
make CC=arm-linux-androideabi-gcc APPS=
3. 執行安裝命令
make install DESTDIR=/home/xiaoqiang/workspace/librtmp/utils/sysroot
注意
1. 如果提示 arm-linux-androideabi-gcc 命令找不到,重復4,5步驟試試。如果還不行,可以使用絕對路徑(其他大神說的。我沒有出現這個問題)
2.安裝位置,必須是4,5步驟中設定的位置。否則會在編譯中提示:
error: cannot find -lpolarssl
我解決第二個問題解決了好久,一直搞不明白
編譯靜態庫
make SYS=android CROSS_COMPILE=arm-linux-androideabi- INC="-I/home/xiaoqiang/workspace/librtmp/utils/sysroot/include" CRYPTO=POLARSSL
9.編譯共享庫
make SYS=android CROSS_COMPILE=arm-linux-androideabi- INC="-I/home/xiaoqiang/workspace/librtmp/utils/sysroot/include" CRYPTO=POLARSSL SHARED=
注意
1.我成功編譯出了librtmp.a文件。但是在編譯.so的時候出現了問題。并沒有成功生成,也沒有任何的提示。
可能的原因是:
網上有大神說是需要加入-shared參數
我找到所有的MAKEFILE文件,然后在LD_FLAGS參數后面加入了-shared。
很遺憾沒有成功。
通過ndk-build編譯共享庫
編寫兩個Android.mk文件
在rtmpdump目錄中,文件內容如下
LOCAL_PATH := $(call my-dir)
subdirs := $(addprefix $(LOCAL_PATH)/,$(addsuffix /Android.mk, \ librtmp \ ))
SSL := /home/blueberry/developer/android_tools/armeabi-4.9/sysroot
ifndef SSL
$(error "You must define SSL before starting")
endif
include $(subdirs)
在rtmpdump/librtmp目錄中,新建一個Android.md文件。內容如下
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := polarssl
LOCAL_EXPORT_C_INCLUDES := $(SSL)/include
LOCAL_SRC_FILES := $(SSL)/lib/libpolarssl.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_C_INCLUDES += $(NDK_PROJECT_PATH)/librtmp \
$(SSL)/include
LOCAL_SRC_FILES:= \
amf.c \
hashswf.c \
log.c \
parseurl.c \
rtmp.c
LOCAL_STATIC_LIBRARIES = polarssl
LOCAL_CFLAGS += -I$(SSL)/include -DUSE_POLARSSL
LOCAL_LDLIBS += -L$(SSL)/lib -L$(SSL)/usr/lib
LOCAL_LDLIBS += -lz
LOCAL_MODULE := librtmp
include $(BUILD_SHARED_LIBRARY)
新建jni/Application.mk文件。內容如下
NDK_TOOLCHAIN_VERSION := 4.9
APP_PLATFORM := android-21
APP_CPPFLAGS += -DANDROID
APP_ABI := armeabi-v7a
APP_PROJECT_PATH := $(shell pwd)
APP_BUILD_SCRIPT := $(APP_PROJECT_PATH)/Android.mk
導入Android Studio
新建一個Android項目,注意選擇include c++ support。
運行demo,看看你的環境是不是OK的。在我這邊是直接可以運行的。demo中SO也動態替我編譯出來了
復制編譯出來的librtmp.so到libs目錄下。
在build.gradle中增加如下配置。
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
在cpp目錄下新建一個include目錄。并吧需要用到的rtmp頭文件拷貝進去。最終目錄結構如下圖
image
打開CMakeLists.txt文件,增加關于librtmp的配置
1.add RTMP庫
add_library( rtmp-lib
SHARED
IMPORTED)
2. 設置RTMP庫位置
set_target_properties( # Specifies the target library.
rtmp-lib
# Specifies the parameter you want to define.
PROPERTIES IMPORTED_LOCATION
# Provides the path to the library you want to import.
/Users/xiaoqiang/workspace/codec/workspace/RtmpDemo/app/libs/${ANDROID_ABI}/librtmp.so )
3. 增加頭文件位置。這樣就可以代碼提示,如果沒有代碼提示真的寫不習慣程序
include_directories( src/main/cpp/include )
注意:第二部設定的位置,必須是絕對路徑,不能是相對路徑,負責會報錯
6.引用librtmp庫
target_link_libraries( # Specifies the target library.
native-lib
rtmp-lib # 這里就是使用libRTMP
# Links the target library to the log library
# included in the NDK.
${log-lib} )
在build.gradle中增加ndk的設定
defaultConfig {
XXXXXXXX
ndk {
abiFilters 'armeabi-v7a'
}
}
8.增加測試代碼
image
在手機中運行。很好,沒有崩潰!!!!
代碼已經上傳到github.在后期我可能會進行其他的改動!!
總結
以上是生活随笔為你收集整理的librtmp linux下 编译,LibRtmp编译并导入Android Studio的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这15个网站,为设计师提供用不完的免费素
- 下一篇: 在浏览器环境下,用Excel.js读取e