Android移植ffmpeg.so实现屏幕录制功能(下)
来源:互联网 发布:选装修公司 知乎 编辑:程序博客网 时间:2024/06/05 06:56
由于赶项目原因耽误了段时间才更新,忽然发现人的记忆真是经不起时间的折腾,哎。。话不多说,接上篇!
拿到编译好的ffmpeg.so文件,就可以使用里面的函数方法进行做屏幕录制的操作,但是经过查找和询问,发现ffmpeg在android设备上不支持屏幕录制,但是可以实现图片和音频合成,但是我对ffmpeg函数不熟悉,于是又到网络搜索一番,发现一篇文章给的提示: http://bbs.rg4.net/thread-13410-1-1.html
把ffmpeg.c的main函数该函数接口,用命令来实现我的所有需要的功能,类似,如果没有用过的朋友可以到网上去寻找ffmpeg.exe文件在windows系统下用dos测试使用,附上ffmpeg.exe下载地址:http://download.csdn.net/detail/liu8297036/6766189
下面介绍更改ffmpeg.c接口实现步骤:
1,现在开始要转换到windows下的eclipse实现编译,首先要先去官网下载NDK http://developer.android.com/tools/sdk/ndk/index.html (注意 这次是windows下的版本 我的是android-ndk-r9-windows-x86版本)
把linux下的hello-jni项目导入到eclipse中.
2,在jni目录下建立一个Android.mk文件(把之前的Android.mk文件删掉,或者重命名),内容如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) PATH_TO_FFMPEG_SOURCE:=$(LOCAL_PATH)/ffmpeg LOCAL_C_INCLUDES += $(PATH_TO_FFMPEG_SOURCE) LOCAL_LDLIBS := -lffmpeg -ljnigraphics -lz -ldl -lgcc -llog LOCAL_MODULE := ffmpeg-test LOCAL_SRC_FILES := ffmpeg-test.c ffmpeg/cmdutils.h ffmpeg/cmdutils.c ffmpeg/ffmpeg.h ffmpeg/ffmpeg_opt.c ffmpeg/ffmpeg_filter.c include $(BUILD_SHARED_LIBRARY)
如果你想在指定的系统版本或指定ABI生成机器代码可以加入Application.mk 内容如下://比如:为了在ARMv7的设备上支持硬件FPU指令。可以使用APP_ABI := armeabi-v7a//或者为了支持IA-32指令集,可以使用//APP_ABI := x86//或者为了同时支持这三种,可以使用//APP_ABI := armeabi armeabi-v7a x86//APP_PLATFORM := android-9 指定系统版本3,将linux下编译好的ffmpeg.so文件放进ffmpeg源码文件夹中,然后再jni根目录创建一个ffmpeg-test.c的文件,内容是源码中ffmpeg.c的内容,然后找到int main(int argc, char **argv)函数将其改名为ffmpeg_utils函数,然后在末尾在增加一个jni接口,内容如下:
intJava_com_example_hellojni_HelloJni_utilsFromJni(JNIEnv* env,jobject thiz,jstring jpgPath,jstring audioPath,jstring fileName){int a = 16;char *arg[16];arg[0] = "ffmpeg";arg[1] = "-i";arg[2] = jstringTostring(env,jpgPath);arg[3] = "-i";arg[4] = jstringTostring(env,audioPath);arg[5] = "-qscale";arg[6] = "1";arg[7] = "-r";arg[8] = "24";arg[9] = "-vcodec";arg[10] = "copy";arg[11] = "-acodec";arg[12] = "copy";arg[13] = "-vcodec";arg[14] = "mpeg4";arg[15] = jstringTostring(env,fileName);int ret = ffmpeg_utils(a,arg);return ret;}
接下来在集成ndk的eclipse中编译后运行,然后会在libs文件夹中出现一个ffmpeg-test.so。 然后你就可以使用ffmpeg的命令功能了。
最后在android上开个线程截取当前屏幕view保存成图片,然后再把图片和录音路径传给jni接口,就可以实现android屏幕录制功能!
下面我介绍在编译过程中遇到的问题:
在getutime函数中说没有定义struct rusage数据结构。storage size of 'rusage' isn't known
解决办法:在头文件找到
#if HAVE_SYS_RESOURCE_H
#include <sys/time.h>
#include <sys/types.h>
#include <sys/resource.h>
#elif HAVE_GETPROCESSTIMES
把#include <sys/resource.h> #include <sys/time.h> 放在if语句外面就可以了。顺便在cmdutils.c文件中,也把这两个头文件引进来。。
- Android移植ffmpeg.so实现屏幕录制功能(下)
- Android移植ffmpeg.so实现屏幕录制功能(上)
- 录制屏幕-ffmpeg
- 使用ffmpeg录制屏幕
- Android屏幕录制AS自带功能
- Android Lollipop (5.0) 屏幕录制实现
- Android录制屏幕的实现方法
- Android基于ffmpeg媒体库小视频录制功能
- android 移植ffmpeg后so库的使用
- android 移植ffmpeg后so库的使用
- android 移植ffmpeg后so库的使用
- android 移植ffmpeg后so库的使用
- android 移植ffmpeg后so库的使用
- android 移植ffmpeg后so库的使用
- android 移植ffmpeg后so库的使用
- android 移植ffmpeg后so库的使用
- IOS 一个很好的录制屏幕实现IOS功能
- 使用android自带的屏幕录制功能
- Go语言并发之美
- 精选85道Linux系统管理员常见笔试填空题(附答案)
- Java获取客户端真实IP地址 编辑
- ORA-12560: TNS: 协议适配器错误的解决方法
- ubuntu下安装Qt4的mysql驱动
- Android移植ffmpeg.so实现屏幕录制功能(下)
- make menuconfig配置文件解析
- 代理
- java serializable demo
- ofstream写、ifstream读
- Linux内核启动过程分析
- 在android中如何实现在应用首页按两次返回键(back)退出应用
- 十七周 被墨水污染的数字
- Linux引导过程内幕