目录

音视频7安卓硬编推送到rtmp服务器之librtmp导入

音视频7——安卓硬编推送到rtmp服务器之librtmp导入

音视频开发路线:

demo地址:

一.RTMP协议

rtmp协议主要应用在音视频的传输上的一套协议,跟Http、蓝牙等协议一样都是在某种应用状态下的使用规范,rtmp协议由C编写,源码很少,出去RTMPZ之外,常用的还有RTSP,主要应用于安防领域,相比与RTMP他更安全可靠,尽量的去避免产生丢帧等事情的发生,但是连接数量有限,RTMP不会对连接数有要求,广泛应用于直播领域,RTMP协议的实现库下载地址为:

此处直接下载源码即可:

https://i-blog.csdnimg.cn/blog_migrate/c36c2125d005008d5cf142bf136c601a.png

二.AndroidStudio配置NDK开发

AndroidStudio新建Native项目,新版的studio都是使用CMarke来实现NDK的开发,构建好ndk项目后,记得配置ndk路径

https://i-blog.csdnimg.cn/blog_migrate/e81829f10e5d88a77db674b3a85ca717.png

如果当前电脑没下载过ndk,先去下载一下

https://i-blog.csdnimg.cn/blog_migrate/b299bf60182536ffbc73221b2640298d.png

将我们下载好的rtmp源码解压之后得到librtmp目录,将该目录全部添加到cpp文件夹下:

https://i-blog.csdnimg.cn/blog_migrate/f6ae5fb96ffd3a6c665ab5de618b9ff6.png

在librtmp目录下新建CMakeLists.txt,将librtmp的源码添加到编译路径中

https://i-blog.csdnimg.cn/blog_migrate/0940128e25f454bf4ecfbe8a115751ab.png

编写CMake代码,以下代码的目的是将librtmp目录下的.c文件编译成名为 rtmp 的静态库

#关闭ssl验证,不让rtmp进行加密验证
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNO_CRYPTO")

#将后缀名是.c结尾的代码放到 rtmp_source 中
file(GLOB rtmp_source *.c)

#将remp_source的代码 生成 rtmp 静态库
add_library(
        rtmp
        STATIC
        ${rtmp_source}
)

在cpp目录下的CMake中将librtmp编译成的rtmp库引入到项目中

cmake_minimum_required(VERSION 3.10.2)

project("rtmpdemo2")

#添指向librtmp文件夹,编译该文件夹下的文件
add_subdirectory(librtmp)


add_library(
        native-lib
        SHARED
        native-lib.cpp)


find_library(
        log-lib
        log)


target_link_libraries(
        native-lib
        rtmp  #将rtmp添加进来
        ${log-lib})

好了,到此我们就成功导入了rtmp源码,先导入rtmp:

#include <jni.h>
#include <string>

extern "C" {
#include "librtmp/rtmp.h"
}

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_rtmpdemo2_MainActivity_stringFromJNI(
        JNIEnv *env,
        jobject /* this */) {

    RTMPPacket rtmpPacket;
    
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());

}