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相关推荐

  1. linux下安装安装jdk和安装android studio

    linux下安装安装jdk和安装android studio 闲聊 今天尝试在ubuntu16.04lts安装jdk-8u5-linux-x64.tar.gz,并配置环境变量,献给新手,或者纠结想用u ...

  2. PHP编译为静态库,Linux下将Tinyxml编译为静态库

    转载请注明来源:Linux下将Tinyxml编译为静态库 一个应用需要在linux服务器上运行,不能保证每个服务器都有应用依赖的库,又懒得每个服务器都去安装下,也不太现实,于是就将应用所用到的库全部编 ...

  3. vc6可编译的 linux 源码,Linux 下源码编译FFMEG

    1. 安装依赖关系 $ sudo apt-get update $ sudo apt-get -y install autoconf automake build-essential libass-d ...

  4. automake linux,Linux下automake软件编译与发布快速入门

    Linux下automake软件编译与发布快速入门 2008-04-22 eNet&Ciweek 进入编辑界面,输入内容如下: AUTOMAKE_OPTIONS=foreign bin_PRO ...

  5. linux ortp 编译,Linux下oSIP的编译使用应该是很简单的,其Install说明文档.doc

    Linux下oSIP的编译使用应该是很简单的,其Install说明文档.doc Linux下oSIP的编译使用应该是很简单的,其Install说明文档里也介绍的比较清楚,本文主要就oSIP在Windo ...

  6. windows和linux下源码编译7-Zip(7za)

    windows和linux下源码编译7-Zip(7za) 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 文章目录 windows和l ...

  7. 【OpenCV】Linux 下用 g++ 编译 OpenCV 程序

    编译命令: g++ gaussianBlur.cpp -o test `pkg-config --cflags --libs opencv` 执行编译生成的可执行文件: ./test gaussian ...

  8. Python 3.10版本及其依赖项 Linux下源码编译 安装到指定路径/目录

    Python 3.10版本及其依赖项 Linux下源码编译 安装到指定路径/目录 安装需求 准备工作 Python及其依赖项 libffi glibc GDBM mpdecimal bz2 xz re ...

  9. linux下qt静态编译_自由出土文物的空间_百度空间

    linux下qt静态编译_自由出土文物的空间_百度空间 linux下qt静态编译_自由出土文物的空间_百度空间 linux下qt静态编译 2012-04-09 13:10 测试通过,贴一下过程,仅用来 ...

  10. linux下源码编译升级ssh版本,ssh打补丁过程

    linux下源码编译升级ssh版本过程 记录打补丁之ssh源码编译升级过程 安装前软件准备 升级步骤 结尾及一些坑 记录打补丁之ssh源码编译升级过程 应安全报告要求需要修复操作系统中的ssh协议,原 ...

最新文章

  1. 利用Injection插件加快Xcode编译速度
  2. Mysql sq优化(二)
  3. 力拎30磅!波士顿动力物流机器人Handle亮相,还会摆货架
  4. 极客编程日历桌面版for mac开发笔记[swift]
  5. 专家:人工智能开始对现实世界产生重大影响​​
  6. 《2018年云上挖矿态势分析报告》发布,非Web类应用安全风险需重点关注
  7. chrome charset使用_使用JWT保护你的Spring Boot应用 Spring Security实战
  8. PHP之mb_strrpos使用
  9. 为何HDFS是大数据分析的软肋
  10. 搞定短视频!批量下载快手视频(附源码)
  11. URI和URL、URN的作用和区别
  12. 几种ESB(企业服务总线)介绍
  13. jQuery boxy弹出层插件中文演示及讲解(转)
  14. 【装机】将mbr硬盘转换为gpt
  15. 基于JavaGUI的中英文打字训练测试软件设计
  16. addon游戏_addon_game_mode游戏基本情况设置
  17. 朴素贝叶斯详解及中文舆情分析(附代码实践)
  18. Qt之文件保存的技巧
  19. 那些android你需要知道的事
  20. OpenCV的区域分割、轮廓检测和阈值处理

热门文章

  1. oracle与mysql语法区别_mysql和oracle语法异同
  2. Unity-TA 成长之路(一)初识渲染管线
  3. html 抽签分小组代码,JavaScript实现班级抽签小程序
  4. 可变数据(VDP)软件 数码印刷和传统印刷的区别
  5. 暗黑3 外挂开发资料
  6. 熵权法求权重的Matlab实现
  7. Grad-CAM在语义分割中的pytorch实现
  8. 数字图像处理-知识点总结
  9. 计算机科普小知识大全,电脑小白知识科普 10个Win10实用技巧科普
  10. 微信小程序密码显示隐藏(小眼睛)