从零开始仿写一个抖音App——基于FFmpeg的极简视频播放器

本文首发于微信公众号——世界上有意思的事,搬运转载请注明出处,否则将追究版权责任。微信号:a1018998632,交流qq群:859640274

GitHub地址

好久不见,最近加班比较多所以第二篇音视频方面的文章 delay 了一周,大家多包涵哈。本文预计阅读时间二十分钟。

本文分为以下章节,读者可以按需阅读

  • 1.FFmpeg源码食用——Clion中编译、修改、引用FFmpeg源码

  • 2.FFmpeg Api食用——FFmpeg 数据结构以及官方 demo 解析

  • 3.极简视频播放器——写一个基于 FFmpeg 的极简 Android 视频播放器

1、FFmpeg源码食用

注意事项:

  • 1.需要一些 git 的知识,git中文文档

  • 2.我的FFmpeg:我 fork 的 FFmpeg 项目,源码的编译已经完成,编译的 shell 脚本在根目录下。

  • 3.FFmpeg-learing:本文章的示例代码

  • 4.下面代码块中,使用 -----代码块x,本文发自简书、掘金:何时夕----- 来区分各个代码块,该文字不属于代码的一部分

  • 5.下面使用 project 指代 clone 下来的 FFmpeg 项目的路径。

  • 6.下面的操作都是基于 Mac 平台,linux 平台应该也能顺利运行,win 平台的话笔者实在没时间去折腾(靠你们自己啦)。

  • 7.开始前需要安装一些前置软件:Clion(百度)、make(mac 可以用 brew 装、linux 可以用 apt 装

1.1开始

拿到一个项目,我们一般有两种方式可以使用它:一个是使用它编译打包后的产物,一个是自己引用他的项目集成到自己的项目中。我们在这一章就来讲讲如何食用 FFmpeg 的源码,将我们的代码写入 FFmpeg项目中,然后编译到 android 项目中。 FFmpeg-learing,强烈建议大家依照项目代码进行文章的阅读。

  • 1.首先将 FFmpeg官方项目 fork 到我们自己的 github 上,以便以后对这个项目的修改。

  • 2.clone 自己的 FFmpeg 项目到电脑上。

  • 3.以后我的代码修改和编译会基于 FFmpeg 3.3.8 这个版本(这个版本好编译一点),所以我们需要新建一个分支 local_build_base_on_3.3.8。然后使用 git reset --hard 18c9d5d3e80dc0b47e0a260b51f5230bdd499e8b 来到 FFmpeg 的 tag 为 n3.3.8 这个 commit 上。

  • 4.现在我们就可以开始编译代码了。

    编译的流程网上很多,我就简单说一下。

    • 1.将 project/configure 文件中 3305-3308行,这四行代码换成代码块1中的代码。

    • 2.将代码块2中的代码保存为 project/build_android.sh 文件,然后执行 ./build_android.sh 命令。

-----代码块1,本文发自简书、掘金:何时夕-----
​
# 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,本文发自简书、掘金:何时夕-----
​
#!/bin/bash
# 切换到 FFmpeg 的目录
cd /Users/whensunset/AndroidStudioProjects/KSVideoProject/ffmpeg
​
# NDK的路径,根据自己的安装位置进行设置
export NDK=/Users/whensunset/AndroidStudioProjects/KSVideoProject/android-ndk-r14b
export SYSROOT=$NDK/platforms/android-16/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
export CPU=arm
​
# 配置编译后的产物放置路径
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"
​
# 创建一个方法,这个方法使用 configure 这个文件传入一些参数来对 FFmpeg 进行编译,可以使用 configure -help 命令来对参数进行了解
function build_one
{
./configure \
    --prefix=$PREFIX \
    --target-os=linux \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --arch=arm \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    --cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \
    --nm=$TOOLCHAIN/bin/arm-linux-androideabi-nm \
    --enable-shared \
    --enable-runtime-cpudetect \
    --enable-gpl \
    --enable-small \
    --enable-cross-compile \
    --disable-debug \
    --disable-static \
    --disable-doc \
    --disable-asm \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffse
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值