当前位置: 首页 > news >正文

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

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

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

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

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

<Buttonandroid: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 libinclude$(CLEAR_VARS)LOCAL_MODULE := avcodecLOCAL_SRC_FILES := lib/libavcodec.soinclude$(PREBUILT_SHARED_LIBRARY)include$(CLEAR_VARS)LOCAL_MODULE := avdeviceLOCAL_SRC_FILES := lib/libavdevice.soinclude$(PREBUILT_SHARED_LIBRARY)include$(CLEAR_VARS)LOCAL_MODULE := avfilterLOCAL_SRC_FILES := lib/libavfilter.soinclude$(PREBUILT_SHARED_LIBRARY)include$(CLEAR_VARS)LOCAL_MODULE := avformatLOCAL_SRC_FILES := lib/libavformat.soinclude$(PREBUILT_SHARED_LIBRARY)include$(CLEAR_VARS)LOCAL_MODULE := avutilLOCAL_SRC_FILES := lib/libavutil.soinclude$(PREBUILT_SHARED_LIBRARY)include$(CLEAR_VARS)LOCAL_MODULE := postprocLOCAL_SRC_FILES := lib/libpostproc.soinclude$(PREBUILT_SHARED_LIBRARY)include$(CLEAR_VARS)LOCAL_MODULE := swresampleLOCAL_SRC_FILES := lib/libswresample.soinclude$(PREBUILT_SHARED_LIBRARY)include$(CLEAR_VARS)LOCAL_MODULE := swscaleLOCAL_SRC_FILES := lib/libswscale.soinclude$(PREBUILT_SHARED_LIBRARY)#x264 libinclude$(CLEAR_VARS)LOCAL_MODULE := libx264LOCAL_SRC_FILES := lib/libx264.161.soinclude$(PREBUILT_SHARED_LIBRARY)#opencv libinclude$(CLEAR_VARS)LOCAL_MODULE := opencvLOCAL_SRC_FILES :=lib/libopencv_java3.soinclude$(PREBUILT_SHARED_LIBRARY)#demoinclude$(CLEAR_VARS)LOCAL_MODULE    := demoLOCAL_SRC_FILES := fmlp.cpp demo.cppLOCAL_C_INCLUDES += $(LOCAL_PATH)/include##-landroid参数 for native windowsLOCAL_LDLIBS := -llog -landroid#LOCAL_LDLIBS := -llog -lzLOCAL_SHARED_LIBRARIES :=opencv libx264 avcodec avdevice avfilter avformat avutil postproc swresample swscaleinclude$(BUILD_SHARED_LIBRARY)

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

相关文章:

  • 听神经瘤的听力学表现
  • 【JavaEE】_基于UDP实现网络通信
  • 虚拟歌姬学习:DiffSinger,让GitHub下载快的方法!
  • 在人工智能时代,如何利用AI达到行业领先地位?
  • DophineScheduler通俗版
  • BOSS直聘推荐搜索系统工程师校招面经
  • mybatis类型转换器处理MYSQL数据库geometry类型转换
  • 免费的 UI 设计资源网站 Top 8
  • Java面试题136-150
  • LeeCode 3. 无重复字符的最长子串
  • Kafka(二)【文件存储机制 生产者】
  • 2024 年入局大模型:是否为时已晚?
  • 3.Eureka注册中心
  • 【C/C++】C/C++编程——C++ 开发环境搭建
  • Vue3+TS+dhtmlx-gantt实现甘特图
  • 【css3】浏览器内核及其兼容性
  • ES6之路之模块详解
  • Linux链接文件
  • PHP的类修饰符与访问修饰符
  • React+TypeScript入门
  • Redis的resp协议
  • Redux 中间件分析
  • Sass 快速入门教程
  • Spring Boot MyBatis配置多种数据库
  • Terraform入门 - 3. 变更基础设施
  • Webpack 4x 之路 ( 四 )
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 前端之React实战:创建跨平台的项目架构
  • 使用common-codec进行md5加密
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 双管齐下,VMware的容器新战略
  • 网页视频流m3u8/ts视频下载
  • 学习ES6 变量的解构赋值
  • 《天龙八部3D》Unity技术方案揭秘
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #include
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #每天一道面试题# 什么是MySQL的回表查询
  • (a /b)*c的值
  • (LeetCode C++)盛最多水的容器
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (独孤九剑)--文件系统
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转载)OpenStack Hacker养成指南
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .net mvc 获取url中controller和action
  • .Net Redis的秒杀Dome和异步执行
  • .net反编译的九款神器
  • .net生成的类,跨工程调用显示注释
  • .NET中的Exception处理(C#)