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

[一]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解码流程![](https://img-blog.csdnimg.cn/direct/c9ec7aac67b447cfaf26d1cd59dac55b.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/40196bbd82cf4a10a90f426334989e45.png)
    • 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.音视频不同步

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/285411.html

相关文章:

  • k8s-认证授权 14
  • 在全志H616核桃派上实现USB摄像头的OpenCV颜色检测
  • mac安装部署gitbook教程
  • 有关软件测试的,任何时间都可以,软件测试主要服务项目:测试用例 报告 计划
  • 快乐过寒假,安全不放假
  • qt学习:模仿qq界面+添加资源+无边框界面+修改样式
  • 【Linux】基本指令收尾
  • 精准核酸检测 - 华为OD统一考试
  • LINUX文件fd(file descriptor)文件描述符
  • SpringMVC 的理解
  • SpringBoot 3.1.7 集成Sentinel
  • Elastic Stack 8.12:通过对 ES|QL 等的改进增强了向量搜索
  • 结构体的内存对齐(计算题常考点)
  • 设置Json对象输出字段顺序
  • 当 OpenTelemetry 遇上阿里云 Prometheus
  • 【Flink-1.17-教程】-【四】Flink DataStream API(1)源算子(Source)
  • 【蓝桥杯EDA设计与开发】资料汇总以及立创EDA及PCB相关技术资料汇总(持续更新)
  • JavaEE学习笔记 2024-1-18 --模块化Controller层、AJAX与JSON
  • rpc跨平台通信的简单案例,java和go
  • Java设计模式之观察者模式详解
  • 分布式锁实现(mysql,以及redis)以及分布式的概念
  • 实现分布式锁:Zookeeper vs Redis
  • 电脑录屏必备技能,让分享变得更加简单!
  • 重构改善既有代码的设计-学习(一):封装
  • Python图像处理【19】基于霍夫变换的目标检测
  • Spring+SprinMVC+MyBatis注解方式简易模板
  • Python基础第五篇(Python数据容器)
  • 【H3C】配置AAA认证和Telnet远程登陆,S5130 Series交换机
  • GaussDB数据库中的MERGE INTO介绍
  • 2024年上海高考数学最后四个多月的备考攻略,目标140+