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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

librtmp linux下 编译,LibRtmp编译并导入Android Studio

發布時間:2023/12/31 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。