​第20课 在Android Native开发中加入新的C++类

这篇具有很好参考价值的文章主要介绍了​第20课 在Android Native开发中加入新的C++类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

​这节课我们开始利用ffmpeg和opencv在Android环境下来实现一个rtmp播放器,与第2课在PC端实现播放器的思路类似,只不过在处理音视频显示和播放的细节略有不同。

1.压缩备份上节课工程文件夹并修改工程文件夹为demo20,将demo20导入到Eclipse或者在原工程上继续下列的开发步骤。

2.右单击工程目录下的jni节点并添加一个新的C++类fmlp,如下图所示:

​第20课 在Android Native开发中加入新的C++类,ffmpeg,opencv,C++,android,c++,开发语言

​第20课 在Android Native开发中加入新的C++类,ffmpeg,opencv,C++,android,c++,开发语言

3.删除工程中的其它按钮,并添加id为startBtn的按钮:

<Button

        android:id="@+id/startBtn"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentBottom="true"

        android:layout_centerHorizontal="true"

        android:onClick="start"

        android:text="Start"

     />

在MainActivity.java中添加以下代码:

Button startBtn;

startBtn=(Button)findViewById(R.id.startBtn);                

public native String startFF(String rtmpURL);

public native String stopFF();

4.绑定单击事件start用于启动C++中的FFmpeg线程:

public void start(View view){ 

backWidth = Integer.toString(320);

          backHeight=Integer.toString(240);

rtmpURL = "rtmp://192.168.0.100/vod/2.mp4";

msgTxt.setText(startFF(rtmpURL));                

} 

5.在jni目录下添加fmlp类:

fmlp.h内容如下:

class fmlp {

public:

fmlp();

virtual ~fmlp();

string init();

};

fmlp.cpp内容如下:

std::stringfmlp::init() {

    return"Hello fmlp...";

}

6.在demo.cpp中添加启动FFmpeg的代码:

JNIEXPORT jstring JNICALL Java_com_example_demo_MainActivity_startFF(JNIEnv *env, jobject obj) {

if(myFmlp==NULL){

          myFmlp =new fmlp();

}

std::string str=myFmlp->init();

return env->NewStringUTF(str.c_str());

}

7.在Android.mk中添加fmlp编译选项以使fmlp.cpp被编译,完整的Android.mk内容如下

LOCAL_PATH := $(call my-dir)

#ffmpeg lib

include$(CLEAR_VARS)

LOCAL_MODULE := avcodec

LOCAL_SRC_FILES := lib/libavcodec.so

include$(PREBUILT_SHARED_LIBRARY)



include$(CLEAR_VARS)

LOCAL_MODULE := avdevice

LOCAL_SRC_FILES := lib/libavdevice.so

include$(PREBUILT_SHARED_LIBRARY)



include$(CLEAR_VARS)

LOCAL_MODULE := avfilter

LOCAL_SRC_FILES := lib/libavfilter.so

include$(PREBUILT_SHARED_LIBRARY)



include$(CLEAR_VARS)

LOCAL_MODULE := avformat

LOCAL_SRC_FILES := lib/libavformat.so

include$(PREBUILT_SHARED_LIBRARY)



include$(CLEAR_VARS)

LOCAL_MODULE := avutil

LOCAL_SRC_FILES := lib/libavutil.so

include$(PREBUILT_SHARED_LIBRARY)





include$(CLEAR_VARS)

LOCAL_MODULE := postproc

LOCAL_SRC_FILES := lib/libpostproc.so

include$(PREBUILT_SHARED_LIBRARY)



include$(CLEAR_VARS)

LOCAL_MODULE := swresample

LOCAL_SRC_FILES := lib/libswresample.so

include$(PREBUILT_SHARED_LIBRARY)



include$(CLEAR_VARS)

LOCAL_MODULE := swscale

LOCAL_SRC_FILES := lib/libswscale.so

include$(PREBUILT_SHARED_LIBRARY)



#x264 lib

include$(CLEAR_VARS)

LOCAL_MODULE := libx264

LOCAL_SRC_FILES := lib/libx264.161.so

include$(PREBUILT_SHARED_LIBRARY)



#opencv lib

include$(CLEAR_VARS)

LOCAL_MODULE := opencv

LOCAL_SRC_FILES :=lib/libopencv_java3.so

include$(PREBUILT_SHARED_LIBRARY)



#demo

include$(CLEAR_VARS)

LOCAL_MODULE    := demo

LOCAL_SRC_FILES := fmlp.cpp demo.cpp



LOCAL_C_INCLUDES += $(LOCAL_PATH)/include

##-landroid参数 for native windows

LOCAL_LDLIBS := -llog -landroid

#LOCAL_LDLIBS := -llog -lz

LOCAL_SHARED_LIBRARIES :=opencv libx264 avcodec avdevice avfilter avformat avutil postproc swresample swscale



include$(BUILD_SHARED_LIBRARY)

调试运行,能正确返回信息"Hello fmlp..."则表示程序运行正常。

​第20课 在Android Native开发中加入新的C++类,ffmpeg,opencv,C++,android,c++,开发语言文章来源地址https://www.toymoban.com/news/detail-823004.html

到了这里,关于​第20课 在Android Native开发中加入新的C++类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FFmpeg 开发(14):Android FFmpeg + MediaCodec 实现视频硬解码

    FFmpeg 开发系列连载: FFmpeg 开发(01):FFmpeg 编译和集成 FFmpeg 开发(02):FFmpeg + ANativeWindow 实现视频解码播放 FFmpeg 开发(03):FFmpeg + OpenSLES 实现音频解码播放 FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放 FFmpeg 开发(05):FFmpeg + OpenGLES 实现视频解码播放和视频滤镜 FFmpeg 开发

    2024年02月09日
    浏览(39)
  • react native android环境搭建,使用夜神模拟器进行开发(适用于0.73+版本)

    前言 本文基于:“react-native” : “^0.73.0” 1.安装 Node Node.js,下载时选择 = 18 版本 2.下载并安装 JDK Java SE Development Kit (JDK),下载时选择 17 版本 安装 验证是否安装成功 打开命令提示符输入 javac -version 回车 3.安装 Android Studio 下载并安装 Android Studio ,获取编译 Android 应用所需

    2024年01月23日
    浏览(65)
  • FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库

    ​ 《FFmpeg开发实战:从零基础到短视频上线》一书的“12.1.2  交叉编译Android需要的so库”介绍了如何在Windows环境交叉编译Android所需FFmpeg的so库,接下来介绍如何在Linux环境交叉编译Android所需FFmpeg的so库。 登录Linux服务器(比如华为云的欧拉系统),依次执行下面的命令。 重

    2024年03月24日
    浏览(46)
  • FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库

    ​ 《FFmpeg开发实战:从零基础到短视频上线》一书的例程主要测试本地的音视频文件,当然为了安全起见,很多网络视频都采用了https地址。FFmpeg若要访问https视频,就必须集成第三方的openssl库,但编译FFmpeg时却默认关闭了openssl。为了让App能够播放采用https的在线视频,需要

    2024年04月22日
    浏览(36)
  • 【android开发-20】android中notification的用法讲解

    1, notification的基本用法 在Android中,通知(Notification)是一种在状态栏上显示的消息提示,用户点击通知后可以展开更多详细信息。以下是基本的通知用法: 1,创建通知 创建通知需要使用Notification类,可以通过以下代码创建一个简单的通知: 2,创建通知通道 从Android 8.0开

    2024年02月04日
    浏览(45)
  • FFmpeg开发笔记(九)Linux交叉编译Android的x265库

    ​ 《FFmpeg开发实战:从零基础到短视频上线》一书的“12.1.2  交叉编译Android需要的so库”介绍了如何在Windows环境交叉编译Android所需FFmpeg的so库,前文又介绍了如何在Linux环境交叉编译Android所需FFmpeg的so库,接下来介绍如何在Linux环境交叉编译Android所需x265的so库。 执行以下命

    2024年04月08日
    浏览(68)
  • 第19课 在Android环境中使用FFmpeg和openCV进行开发的一般步骤

    在上节课,根据模板文件我们对在Android环境中使用FFmpeg和openCV进行开发有了一个初步的体验,这节课,我们来具体看一下其工作流程。 1.程序的入口 与VS2013程序开发类似,Android程序开发也有一个入口,在这个模板中,它的入口文件是MainActivity.java,具体路径是:E:jProdemo

    2024年01月18日
    浏览(42)
  • Android中加载一张大图,如何正常显示且不发生OOM ?

    问题 在 Android 中,获取一个 1000*20000 ( 宽1000px,高20000px )的大图,如何正常加载显示且不发生 OOM 呢? 分析 Android 系统会为应用分配一定大小的堆内存 而如果遇到高分辨率图片时,如果它的配置为 ARGB (每个像素占 4Byte ) 那么它要消耗的内存为 1000200004=800000000 ,大约是 80MB 这样

    2024年02月11日
    浏览(37)
  • android native hook简介

    Android中的 Native Hook是一个非常吸引人的技术节点,诱使开发人员产生绚烂多彩的想法,并带来精彩的体验。在软件调试、逆向、安全等场景中得到采用,各大知名软件公司如byte dance、baidu、tencent等都有自己的开源注入和hook项目。 本文代码来自github,只做了适当的剪裁和优化

    2024年02月11日
    浏览(40)
  • Android 13添加自定义native服务

    欢迎加入我的知识星球Android系统开发指南 欢迎关注微信公众号 无限无羡 欢迎关注知乎账号 无限无羡 native服务就是用c++写的系统服务,通过init进程启动,可以实现binder接口供client调用。 下面我们以实现一个beanserver的后台服务为例: 首先需要写一个rc文件 写服务的main函数

    2024年02月12日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包