ffmpeg音视频解码
ffmpeg音视频解码
- 一.编译ffmpeg
- 1.安装vmware虚拟机
- 2.vmware虚拟机安装linux操作系统
- 3.安装ftp和fshell软件
- 4.在Ubuntu(Linux)中编译Android平台的FFmpeg( arm和x86 )
- 5.解压FFmpeg
- 6.Android编译脚本
- (1)修改FFmpeg的configure文件
- 7.开始编译
- (1)执行configure文件生成makefile文件
- (2)执行android编译脚本
- 8.编译结果
- 二.封装格式和编码格式
- 三.ffmppeg+opensl es音频播放器
- 1.ffmpeg解码流程
- 2.生产者消费者
- 3.使用ffmpeg进行重采样
- 4.使用opensl-es播放音乐:
- 四.ffmppeg+opengl es 视频播放器
- 1.ffmpeg解码视频:
- 2.软解码:opengl es 渲染YUV数据
- 3.硬解码:使用MediaCodec直接解码AVpacet 用OpenGl sl渲染
- 4.难点:黑色闪屏
- 5.音视频不同步
一.编译ffmpeg
1.安装vmware虚拟机
2.vmware虚拟机安装linux操作系统
3.安装ftp和fshell软件
4.在Ubuntu(Linux)中编译Android平台的FFmpeg( arm和x86 )
(1)下载FFmpeg源码(v3.3.6)
下载地址( http://www.ffmpeg.org/download.html#releases )
(2)下载NDK(r14b)
下载地址( https://developer.android.google.cn/ndk/downloads/index.html)

(3)编写Android编译脚本
5.解压FFmpeg
(1)用ftp上传到Ubuntu中

(2)解压Ffmpeg(tar -zxvf ffmpeg-3.3.6.tar.gz)
(3)解压NDK(unzip android-ndk-r14b-linux-x86_64.zip)

6.Android编译脚本
(1)修改FFmpeg的configure文件
因为android只能加载*.so结尾的动态库,不能识别如*.so.57结尾的
#SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
#LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
#SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
#SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)’SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
(2)编写Android编译脚本
#!/bin/bash
export NDK_HOME=/usr/work/ndk/android-ndk-r14b
export PLATFORM_VERSION=android-9
function build
{echo "start build ffmpeg for $ARCH"./configure --target-os=linux \--prefix=$PREFIX --arch=$ARCH \--disable-doc \--enable-shared \--disable-static \--disable-yasm \--disable-asm \--disable-symver \--enable-gpl \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-ffserver \--cross-prefix=$CROSS_COMPILE \--enable-cross-compile \--sysroot=$SYSROOT \--enable-small \--extra-cflags="-Os -fpic $ADDI_CFLAGS" \--extra-ldflags="$ADDI_LDFLAGS" \$ADDITIONAL_CONFIGURE_FLAGmake cleanmakemake installecho "build ffmpeg for $ARCH finished"
}
#arm
ARCH=arm
CPU=arm
PREFIX=$(pwd)/android/$ARCH
TOOLCHAIN=$NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-
ADDI_CFLAGS="-marm"
SYSROOT=$NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH/
build#x86
ARCH=x86
CPU=x86
PREFIX=$(pwd)/android/$ARCH
TOOLCHAIN=$NDK_HOME/toolchains/x86-4.9/prebuilt/linux-x86_64
CROSS_COMPILE=$TOOLCHAIN/bin/i686-linux-android-
ADDI_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"
SYSROOT=$NDK_HOME/platforms/$PLATFORM_VERSION/arch-$ARCH/
build
7.开始编译
(1)执行configure文件生成makefile文件
chmod 777 configure(修改权限)
./configure(执行脚本)
(2)执行android编译脚本
chmod 777 build_android.sh(修改权限)
./build_android.sh(执行脚本)
8.编译结果

二.封装格式和编码格式

三.ffmppeg+opensl es音频播放器
1.ffmpeg解码流程

2.生产者消费者


3.使用ffmpeg进行重采样

4.使用opensl-es播放音乐:
opensl-es:嵌入式、跨平台、免费、音频处理库

四.ffmppeg+opengl es 视频播放器
1.ffmpeg解码视频:

2.软解码:opengl es 渲染YUV数据




3.硬解码:使用MediaCodec直接解码AVpacet 用OpenGl sl渲染


4.难点:黑色闪屏

5.音视频不同步




相关文章:
ffmpeg音视频解码
ffmpeg音视频解码 一.编译ffmpeg1.安装vmware虚拟机2.vmware虚拟机安装linux操作系统3.安装ftp和fshell软件4.在Ubuntu(Linux)中编译Android平台的FFmpeg( arm和x86 )5.解压FFmpeg6.Android编译脚本(1)修改…...
uniapp uni.chooseLocation调用走失败那里,错误码:112
问题:我配置了百度上所有能配置的,一直调用不成功,如下图配置的 1:第一个 配置 代码: "permission": {"scope.userLocation": {"desc": "你的位置信息将用于小程序位置接口的效果展示"}…...
第一次开发基于SpringBoot的Java应用
第一次开发基于SpringBoot的Java应用 一、 方式1:IDEA创建New Project Spring Boot官方文档的Getting Started1、IDEA创建New Project2、Spring Boot官方文档的Getting Started2.1 Creating the POM (实际是,更新pom.xml)2.2 Add…...
回归预测 | Matlab实现MSADBO-CNN-LSTM基于改进蜣螂算法优化卷积神经网络-长短期记忆神经网络多特征回归预测
回归预测 | Matlab实现MSADBO-CNN-LSTM基于改进蜣螂算法优化卷积神经网络-长短期记忆神经网络多特征回归预测 目录 回归预测 | Matlab实现MSADBO-CNN-LSTM基于改进蜣螂算法优化卷积神经网络-长短期记忆神经网络多特征回归预测预测效果基本描述程序设计参考资料 预测效果 基本描…...
数据结构--排序
参考【算法】排序算法之希尔排序 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/122632213 1. 排序的定义 2. 插入排序 2.1 直接插入排序 在插入第i(i>1)个记录时,前面的i-1个记录已经排好序 void insertSort(int r[],int n) {for(int i2;i<…...
Androidmanifest文件加固和对抗
前言 恶意软件为了不让我们很容易反编译一个apk,会对androidmanifest文件进行魔改加固,本文探索androidmanifest加固的常见手法以及对抗方法。这里提供一个恶意样本的androidmanifest.xml文件,我们学完之后可以动手实践。 1、Androidmanife…...
openssl3.2 - 官方demo学习 - cms - cms_denc.c
文章目录 openssl3.2 - 官方demo学习 - cms - cms_denc.c概述笔记END openssl3.2 - 官方demo学习 - cms - cms_denc.c 概述 将CMS数据结构写入PEM文件, 并将分离后的加密数据单独写到数据文件. 笔记 /*! \file cms_denc.c * \note openssl3.2 - 官方demo学习 - cms - cms_d…...
【Linux 命令】tree 对目录进行树形展示
目录 1、tree 命令功能展示 2、tree 命令安装 3、tree 命令语法及其参数功能 4、终止 tree 展开树命令 1、tree 命令功能展示 在 Linux 中,我们使用 ll 命令对目录的展示并不太方便我们查看,不太清晰明了,所以我们可以使用 tree 命令以…...
掌握Spring MVC拦截器整合技巧,实现灵活的请求处理与权限控制!
拦截器 1.1 拦截器概念1.2 拦截器入门案例1.2.1 环境准备1.2.2 拦截器开发步骤1:创建拦截器类步骤2:配置拦截器类步骤3:SpringMVC添加SpringMvcSupport包扫描步骤4:运行程序测试步骤5:修改拦截器拦截规则步骤6:简化SpringMvcSupport的编写 1.3 拦截器参数1.3.1 前置处理方法1.3…...
使用xbindkeys设置鼠标侧键
1.安装如下包 sudo apt install xbindkeys xautomation 2.生成配置文件 xbindkeys --defaults > $HOME/.xbindkeysrc 3.确定侧键键号 在终端执行下面的代码: xev | grep button 此时会出现如下窗口,将鼠标指针移动到这个窗口上: 单…...
跨站点请求伪造攻击 - Cross Site Request Forgery (CSRF)
什么是CSRF 最好理解CSRF攻击的方式是看一个具体的例子。 假设你的银行网站提供一个表单,允许当前登录用户将钱转账到另一个银行账户。例如,转账表单可能如下所示: <form method="post"action="/transfer"> <...
PLAN B KRYPTO ASSETS GMBH CO. KG 普兰资产管理公司
引领加密技术不断演进 PLAN B KRYPTO ASSETS普兰资产管理以其独创的「Trident Strategy三叉戟模型」技术为基础,持续推动加密技术的发展,打造 Schutz(舒茨盾) AI 金融隐私匿名公链。致力于提供高效的技术服务,基于机构…...
java接口和多态
1.接口 1.1黑马信息管理系统集合改进 (应用) 使用数组容器的弊端 容器长度是固定的,不能根据添加功能自动增长 没有提供用于赠删改查的方法 优化步骤 创建新的StudentDao类,OtherStudentDao 创建ArrayList集合容器对象 OtherStudentDao中的方法声明…...
C# 图解教程 第5版 —— 第22章 命名空间和程序集
文章目录 22.1 引用其他程序集22.2 命名空间22.2.1 命名空间名称22.2.2 命名空间的补充22.2.3 命名空间跨文件伸展22.2.4 嵌套命名空间 22.3 using 指令22.3.1 using 命名空间指令22.3.2 using 别名指令22.3.3 using static 指令 22.4 程序集的结构22.5 程序集标识符22.6 强命名…...
【Maven】008-Maven 私服搭建与使用
【Maven】008-Maven 私服搭建与使用 文章目录 【Maven】008-Maven 私服搭建与使用一、概述1、简介2、建立私服后依赖查找和下载逻辑第一步:请求本地仓库第二步:请求 Maven 私服第三步:请求外部远程仓库(远程中央仓库等)…...
TMDB电影数据分析(下)
TMDB电影数据分析(下) 本文对源自Kaggle TMDB电影数据集进行分析影响电影票房的因素,数据分析流程包含数据集概分析、数据清洗、数据统计以及分析影响电影票房的因素。影响票房因素可能是电影预算、电影类型、电影时长、受欢迎程度、电影评分…...
django后台手机号加密存储
需求: 1 :员工在填写用户的手机号时,直接填写,在django后台中输入 2:当员工在后台确认要存储到数据库时,后台将会把手机号进行加密存储,当数据库被黑之后,手机号字段为加密字符 3&am…...
三、Qt Creator 使用
关于Qt的安装及环境配置,在我的上一篇《二、QT下载、安装及问题解决(windows系统)》已经讲过了。 本章节有一个重点,在新建 工程文件时,所在路径不要有中文,否则编译及运行程序不能正常运行。 在使用Qt Creator(以下…...
css 边框渐变
需求: 普通的div 边框不好看,做一个渐变色 进程: 最简单的当然是做一个内部是白色的边框是渐变色的图,然后使用 background: url("back.jpg"),这样看起来就像是做了一个渐变的边框如果做不了图࿰…...
SofaMQ一些常用的API
SofaMQ的十五种常用的API 引言 SofaMQ作为阿里巴巴开源的消息中间件,提供了丰富的API以支持各种消息传递场景。在本文中,我们将介绍SofaMQ的十五种常用API,并通过实例演示其用法。 1. Producer相关API 1.1 SofaMQProducer SofaMQProduce…...
ArcGIS Desktop绘图工具条实战:从基础图形到专业地图注记的进阶指南
1. ArcGIS绘图工具条初探:你的地图设计起点 第一次打开ArcGIS Desktop的绘图工具条时,我就像拿到了一盒全新的彩色铅笔。这个看似简单的工具条,实际上包含了从基础绘图到专业地图注记的全套功能。绘图工具条位于软件界面顶部,右键…...
从零开始:如何用开源方案打造你的第一台六足机器人
从零开始:如何用开源方案打造你的第一台六足机器人 【免费下载链接】hexapod 项目地址: https://gitcode.com/gh_mirrors/hexapod5/hexapod 想要亲手制作一台能够自如行走的六足机器人吗?hexapod开源项目为你提供了一套完整的免费解决方案&#…...
如何用ABC系统三分钟搞定复杂电路优化:顺序逻辑综合与形式验证的完整指南
如何用ABC系统三分钟搞定复杂电路优化:顺序逻辑综合与形式验证的完整指南 【免费下载链接】abc ABC: System for Sequential Logic Synthesis and Formal Verification 项目地址: https://gitcode.com/gh_mirrors/ab/abc 在现代数字电路设计中,你…...
提升code-server前端性能的终极指南:渐进式图片加载高级技巧
提升code-server前端性能的终极指南:渐进式图片加载高级技巧 【免费下载链接】code-server VS Code in the browser 项目地址: https://gitcode.com/GitHub_Trending/co/code-server code-server作为一款能在浏览器中运行的VS Code实现,让开发者可…...
Mermaid在线编辑器:开源可视化工具的图表创作革命
Mermaid在线编辑器:开源可视化工具的图表创作革命 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-live-editor …...
Zotero文献管理终极指南:从混乱到高效的研究工作流
Zotero文献管理终极指南:从混乱到高效的研究工作流 【免费下载链接】zotero Zotero is a free, easy-to-use tool to help you collect, organize, annotate, cite, and share your research sources. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero Z…...
告别手动修改!用Env文件管理器一键配置Allegro SKILL加载路径(支持16.6/17.4)
告别手动修改!用Env文件管理器一键配置Allegro SKILL加载路径(支持16.6/17.4) 在PCB设计领域,Allegro作为行业标杆工具,其强大的可扩展性离不开SKILL脚本的支持。然而,随着项目复杂度提升,SKILL…...
简述双亲委派机制以及其优点
面试 概念:加载类的时候先交给自己的父类加载器执行,直到顶层的启动类加载器,如果父加载器能够完成加载,则交给父类加载器,否则自己尝试加载。 优点:保证类的加载的安全性,避免类的重复加载。...
解锁汽车ECU诊断新可能:ECUBus-Pro开源工具的全场景应用指南
解锁汽车ECU诊断新可能:ECUBus-Pro开源工具的全场景应用指南 【免费下载链接】ECUBus ECU bus tool, UDS over CAN, CAN-FD, Ethernet and so on. 项目地址: https://gitcode.com/gh_mirrors/ec/ECUBus ECUBus-Pro是一款功能强大的开源汽车ECU开发工具&#…...
给黑帮写反侦测系统:他们在暗网给我立生祠
作为一名软件测试工程师,我从未想过,我的专业技能会让我卷入一场数字世界的道德深渊。故事始于一个匿名加密邮件,主题简洁却充满诱惑:“高薪项目:反侦测系统开发。”客户承诺丰厚报酬,并强调需要顶尖测试思…...
