##问题描述
在开发中使用某摄像头的SDK,只能获取到一帧帧的 H264 视频数据,不知道视频流地址,需要自己解码出图像并播放。
##问题解决

编译FFmpeg

此处省略,这里有 编译好的库,上传到Github了。

开发环境配置

1、 配置 AndroidStudio 的 NDK 路径。
2、 配置 app 的 build.gradle ,添加 CMake 参数

android {defaultConfig {externalNativeBuild {    cmake {        cppFlags "-std=c++11 -frtti -fexceptions"            abiFilters 'armeabi', 'armeabi-v7a', 'x86',"arm64-v8a"            }        }}}    externalNativeBuild {        cmake {            path "CMakeLists.txt"        }    }}

3、在 app/src/main 下新建 jniLibs 文件夹,将编译后的 ffmpeg 库的 .so 文件拷贝进来,拷贝后如下:

4、在 app/src/main 下新建 cpp 文件夹,
5、在app/src/main/cpp下新建 include 文件夹,将编译后的 ffmpeg 的 include 拷贝进来。拷贝后的目录结构如下:

6、在app/src/main 下新建 jni ,这里放自自己的 C 代码。
7、 在app的根目录新建 CMakeLists.txt,输入类似下面的代码

cmake_minimum_required(VERSION 3.4.1)#工程绝对路径set(pathToProject  我的工程根目录的绝对路径)#新建的cpp目录的路径set(pathToCpp ${pathToProject}/app/src/main/cpp)#新建的jni目录的路径set(pathToJni ${pathToProject}/app/src/main/jni)#jniLibs 目录的路径set(pathToJniLibs ${pathToProject}/app/src/main/jniLibs)#ffmpeg include 目录set(pathToInclude ${pathToCpp}/include)# 我的源文件路径(这里只需要写 .c 或者 .cpp 即可,他们依赖的 .h 会被自动引入)set(pathOfSource  ${pathToJni}/converter.c  ${pathToJni}/decoder.c  ${pathToJni}/render.c  ${pathToJni}/looper.c  ${pathToJni}/h264_render.c  ${pathToJni}/jni_h264_render.c)#设置include include_directories(${pathToInclude}/${ANDROID_ABI})#导入ffmpeg 库add_library( libavcodec SHARED IMPORTED)add_library( libavdevice SHARED IMPORTED)add_library( libavfilter SHARED IMPORTED)add_library( libavformat SHARED IMPORTED)add_library( libavutil SHARED IMPORTED)add_library( libpostproc SHARED IMPORTED)add_library( libswresample SHARED IMPORTED)add_library( libswscale SHARED IMPORTED)set_target_properties(libavcodec  PROPERTIES IMPORTED_LOCATION ${pathToJniLibs}/${ANDROID_ABI}/libavcodec-57.so)set_target_properties(libavdevice  PROPERTIES IMPORTED_LOCATION ${pathToJniLibs}/${ANDROID_ABI}/libavdevice-57.so)set_target_properties(libavfilter  PROPERTIES IMPORTED_LOCATION ${pathToJniLibs}/${ANDROID_ABI}/libavfilter-6.so)set_target_properties(libavformat  PROPERTIES IMPORTED_LOCATION ${pathToJniLibs}/${ANDROID_ABI}/libavformat-57.so)set_target_properties(libavutil  PROPERTIES IMPORTED_LOCATION ${pathToJniLibs}/${ANDROID_ABI}/libavutil-55.so)set_target_properties(libpostproc PROPERTIES IMPORTED_LOCATION ${pathToJniLibs}/${ANDROID_ABI}/libpostproc-54.so)set_target_properties(libswresample PROPERTIES IMPORTED_LOCATION ${pathToJniLibs}/${ANDROID_ABI}/libswresample-2.so)set_target_properties(libswscale PROPERTIES IMPORTED_LOCATION ${pathToJniLibs}/${ANDROID_ABI}/libswscale-4.so)#声明自己的C代码编译后产出的soadd_library( decoder SHARED ${pathOfSource} )#自己的so库的link配置target_link_libraries( decoder    #NDK日志库,提供日志输出   log   #NDK的Native Android API                        android                       #FFmpeg库                       libavcodec                       libavdevice                       libavfilter                       libavformat                       libavutil                       libpostproc                       libswresample                       libswscale                                              )

更多相关文章

  1. (转)CrossWalk - android 动态加载so库文件实践
  2. Android(安卓)SDK 离线下载安装更新至4.0.3(目前最新)
  3. Android(安卓)Studio 配置忽略文件
  4. Android(安卓)2.2 源码结构分析
  5. Android(安卓)Studio 使用Gradle引入第三方库文件的总结
  6. SQLite的使用
  7. android Uri使用
  8. Android系统启动流程分析
  9. Ubuntu 下搭建 Android(安卓)开发环境

随机推荐

  1. [闲话杂谈] Android(安卓)跟 Linux 是有
  2. 转载:谁说程序员不浪漫---Android爱心表白
  3. Android平板电脑远程控制PC机教程
  4. Android音频编辑之音频合成功能
  5. 浅谈android的mount命令
  6. [置顶] 搜集整理的一些博客导航
  7. Android(安卓)- 小功能 - Android中dp和p
  8. Android工程引用另外一个工程的正确/错误
  9. Android真机测试,Find Explorer无法打开da
  10. Android混合开发(一)——移动端与前端交互