Android 下使用 FFmpeg 命令行工具与问题排查
目录
- FFmpeg 命令行工具
- 将相关文件加入到项目中
- 修改 ffmpeg 源码
- 问题排查
上一篇文章 中,我们已经成功编译了 FFmpeg 的主要库并集成到了我们的 Android 应用中。我们暂时不需要知道这些库具体的作用和用法是什么,FFmpeg 已经为我们提供了方便的命令行工具来进行音视频操作,这个工具就在源码文件夹的 fftools
目录下,将其集成到 Android 应用中,我们便可方便快捷地使用 FFmpeg 来进行音视频操作。
如果你还不清楚命令行工具如何使用,不如看看 这里。
在完成了前文的编译与集成后,我们在原工程的基础上继续。
FFmpeg 命令行工具
FFmpeg 命令行工具的主体是源码 fftools/ffmpeg.c
中的 main
函数,我们只需要将命令及命令的长度传入 main
函数即可,ffmpeg.c
还依赖其他文件中的其他函数,我们也要一并加入到项目中。
将相关文件加入到项目中
进入源码目录(而非编译后输出库文件的目录),将
fftools
文件夹复制到项目的cpp
目录下(其他目录也可以,只要能保证 CMake 找得到相关文件)。编辑
CMakeLists.txt
:……include_directories(${CMAKE_SOURCE_DIR}/fftools) #引入ffmpeg.h与cmdutils.hadd_library(ffmpegSHAREDfftools/cmdutils.cfftools/ffmpeg.cfftools/ffmpeg_filter.cfftools/ffmpeg_hw.cfftools/ffmpeg_opt.c )target_link_libraries(ffmpegavfilteravformatavdeviceavcodecavutilswresampleswscalepostproc${log-lib})target_link_libraries(ffmpegtestffmpeg${log-lib})
说明:
前文中,我们将我们编写的 ffmpegtest.cpp
与 ffmpeg
的依赖库链接到一起,实际上我们在实际使用中不需要直接访问这些库的函数,只需要调用 ffmpeg.c
的命令行工具即可,这里我们将 fftools
中的 c 文件编译成 libffmpeg.so
库,使其与依赖库建立链接,再将我们编写的实现了 JNI 的代码(ffmpegtest 库)与 ffmpeg 库建立链接,即可达成预期功能。
打开
ffmpeg.h
与ffmpeg.c
添加函数方便我们调用int ffmpeg_exec(int argc, char **argv);
int ffmpeg_exec(int argc, char **argv){return main(argc,argv); }
将 Java 类中 native 函数修改为
public native void run(String[] commands)
,在ffmpegtest.cpp
中生成相应函数,添加函数体及头文件。#include <jni.h> #include <android/log.h> extern "C"{#include "fftools/ffmpeg.h"JNIEXPORT void JNICALL Java_com_example_anotherffmpegtest_MainActivity_run(JNIEnv *env, jobject thiz, jobjectArray commands) {int argc = (*env).GetArrayLength(commands);char *argv[argc];int i;for (i = 0; i < argc; i++) {auto js = (jstring) (*env).GetObjectArrayElement(commands, i);argv[i] = (char*) (*env).GetStringUTFChars(js, 0);}ffmpeg_exec(argc, argv); //这里就是我们的 main 函数 }}
build 一下,程序大量报错,不要害怕,这是头文件缺失引起的,找到报错说明,将报错的头文件从源码文件夹中找到,一个一个地复制进我们的
include
文件夹的相应目录内,这里记录我报错缺失之后复制的头文件:config.h libavutil/thread.h compat/va_copy.h libavutil/libm.h libavutil/internal.h libavutil/timer.h //这里我直接把所有架构的文件夹都复制了进去 libavcodec/mathops.h libavutil/reverse.h libavformat/os_support.h
复制完头文件之后我这边还提示了两个语法错误,按照提示修改即可。
修改 ffmpeg 源码
懒得写了,请参考 王英豪 的这两篇博客,写得很好:
Android 集成 FFmpeg (二) 以命令方式调用 FFmpeg
(此文编译使用的 ndk-build 现已过时,故本文使用目前较为推荐的 CMake)
Android 集成 FFmpeg (三) 获取 FFmpeg 执行进度
问题排查
- ffmpeg.c 所依赖的 .c 文件与头文件是否添加,是否在
CMakeLists.txt
中正确添加库与链接 - 报错后从源码复制的头文件是否放置到了正确路径,是否在
CMakeLists.txt
中 include 进去 - 如果运行命令时闪退,在
main()
函数中输出 log 来排查故障
Android 下使用 FFmpeg 命令行工具与问题排查相关推荐
- FFmpeg命令行工具系列二---转码流程及过滤器
一.概述 在FFmpeg命令行工具系列一中,对FFmpeg的命令行工具FFmpeg.exe进行了简单的介绍,并举出了几个简单的例子.在这一章中,将进行一次详细的介绍,主要是对转码过程和过滤器进行介绍. ...
- [总结]FFMPEG命令行工具之ffmpeg详解
目录 0 前言 1 语法 Synopsis 2 描述 Description 3 详细描述 Detailed description 3.1 滤镜 Filtering 3.1.1 简单滤镜图 Simp ...
- [总结]FFMPEG命令行工具之ffplay详解
目录 0 前言 1 语法 Synopsis 2 描述 Description 3 选项 Options 3.1 流指定器 Stream specifiers 3.2 通用选项 Generic opti ...
- [总结]FFMPEG命令行工具之ffprobe详解
目录 0 前言 1 语法 Synopsis 2 描述 Description 3 选项 Options 3.1 流指定器 Stream specifiers 3.2 通用选项 Generic opt ...
- FFmpeg命令行工具学习(一):查看媒体文件头信息工具ffprobe
一.简述 ffprobe是ffmpeg命令行工具中相对简单的,此命令是用来查看媒体文件格式的工具. 二.命令格式 在命令行中输入如下格式的命令: ffprobe [文件名] 三.使用ffprobe查看 ...
- linux下的安装命令行工具下载,本地安装DEB包的3种命令行工具(适合Debian体系)
1. 前言 在本教程中,我们将学习如何使用三种不同的命令行工具(dpkg.apt和gdebi)在Debian及其衍生产品(如Ubuntu和Linux Mint)中安装本地软件包(. deb). 这对那 ...
- FFmpeg命令行工具-实用命令
目录 help命令使用 流选择选项 视频封装解封装 3.1 视频格式转换 3.2 分离/合并视频音频流 3.3 截取视频片段 3.4 视频转换为m3u8格式 3.5 把视频文件推送到rtmp服务器 3 ...
- FFmpeg命令行工具学习(三):媒体文件转换工具ffmpeg
一.简述 ffmpeg是一个非常强大的工具,它可以转换任何格式的媒体文件,并且还可以用自己的AudioFilter以及VideoFilter进行处理和编辑.有了它,我们就可以对媒体文件做很多我们想做的 ...
- 【Android】玩转命令行工具-apkanalyzer
文章目录 1 打印App ID.版本信息 2 打印apk的文件大小 3 打印apk的download大小 4 打印apk用到的feature 5 比较两个apk的大小 6 打印apk中的文件列表 7 ...
最新文章
- 转://点评Oracle11g新特性之动态变量窥视
- 【html 及 HTML5所有标签汇总】★★★
- 【正一专栏】《神秘巨星》总有一种真诚让你泪流满面
- Ⅵ:zookeeper的Watcher事件监听机制
- 【android】3.0以后系统给广播默认加上FLAG_EXCLUDE_STOPPED_PACKAGES标记
- Android下拉刷新-SwipeRefreshLayout
- 8k分辨率需要多大带宽_又一支持8K分辨率的接口标准发布
- matlab画图显示中文
- 施一公又火了!曾突然回国震惊所有美国人,如今所创公司IPO在即,还有基金大佬重仓加盟!...
- selenium模拟登陆去哪儿网
- Bootstrap3 工具提示插件的使用方法
- 【SAS BASE】PROC SORT
- 补丁生成与应用工具 V1.5.4
- php样式优美的错误提示框,弹出框美化 alert样式美化
- 用游戏外挂的方式修复有道云笔记的BUG
- oracle中两个日期相减
- A3的PDF试卷怎么对半拆分成A4打印?
- 电脑突然变成繁体字,格式化代码快捷键失灵
- 【解惑】女生适合干计算机什么方面的工作
- vue2之v-for详解