1. 虚拟机安装 Ubuntu 。
<u>windows 7 中使用 VMware Workstation 安装Ubuntu 18.04.1 LTS</u> <u>windows 7中使用 VirtualBox 安装 Ubuntu 18.04.1 LTS</u>
2 在Ubuntu虚拟机中分别配置 JDK,SDK,NDK 。
2.1 配置 JDK
?下载linux版本中后缀为 .tar.gz 的包,x86 代表 32 位,x64 代表 64 位。我下载的是 jdk-8u191-linux-x64.tar.gz。
??下载完成以后打开Ubuntu虚拟机,依次执行操作(如图1所示):文件->主目录->右键鼠标->选择新建文件夹并给它起个名字。这个文件夹就是存放我们 ijkpalyer 、JDK、SDK 和 NDK 的文件夹,我给它起名叫App。
建好文件夹以后,将刚才下载的 JDK 包从 windows 拖放到该文件夹下。
??如果你是使用windows下载的,那可能还要麻烦点。因为windows和Ubuntu虚拟机是默认不能互相拖放文件,所以我还得配置一下让它能够拖放,当然如果你能直接拖放就不用管了。我试了一下,使用 VMware Workstation 装的 Ubuntu 虚拟机可以直接拖拽文件,使用 VirtualBox安装的虚拟机需要配置一下才可以互相拖拽文件。
??当然,你如果你直接在Ubuntu虚拟机里下载,那就没有这个问题了。
??不多说了,还是说正事吧。如果想要实现Virtualbox 下主机(win7)和虚拟机(ubantu 18.04.1 LTS)之间拖拽文件夹,需要做两个步骤。
??第一步:在VirtualBox
(xftp软件也可以)
管理器依次执行下列操作(如下图所示):新建->常规->高级->将共享粘贴板和拖放都设置为双向,然后点击OK。?第二步:在虚拟机运行时,依次执行如下操作:设备->安装增强功能。安装好以后重启,主机和虚拟机就可以互相拖拽文件了。
下面要正式开始配置JDK了。
快捷键 Ctrl+Alt+T 打开终端,进入App文件夹,命令行
cd App
进入App文件夹后,解压压缩包,命令行:
sudo tar xvf jdk-8u191-linux-x64.tar.gz
这个命令需要输入一下密码,如下图所示。
打开/etc/profile,在/etc/profile文件里配置
JDK的环境变量,命令行:
sudo gedit /etc/profile
打开后在该文件的最后一行,添加下面几行:(查看当前路径命令:pwd)
export JAVA_HOME=/home/ubuntu18041/App/jdk1.8.0_191
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
当然你要注意你的 JAVA_HOME 的路径要配制成你的jdk的目录,配制后点击保存按钮,需要修改的地方如下图所示。
关闭/etc/profile文件后,使用下面命令行保存配置,保存了才会生效。
source /etc/profile
然后,在终端输入如下命令,看看是否安装成功:
java -version
如果安装成功,则会显示如下图所示:
2.2 配置SDK
下载linux版本的SDK包,将该包放到App文件夹目录下。
??使用下面命令行解压:
sudo tar -zxvf android-sdk_r24.4.1-linux.tgz
授权android-sdk-linux为你的账号
sudo chown -R harlan:harlan android-sdk-linux/
harlan:harlan为一个组和用户名,具体写什么看看ubuntu你的名称
解压缩后,打开/etc/profile,在/etc/profile文件里配置SDK的环境变量,命令行:
sudo gedit /etc/profile
打开后在该文件的最后一行,添加下面几行:
export ANDROID_SDK=/home/ubuntu18041/App/android-sdk-linux
export PATH=${PATH}:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools
查看当前文件夹路径
pwd
关闭/etc/profile文件后,使用下面命令行保存配置,保存了才会生效。
source /etc/profile
当然,你要注意你的 ANDROID_SDK 的路径。
2.3 配置NDK
下载 NDK 10 到 NDK 14 的应该都可以用,NDK 15以上的就不行了。同时不同后缀的NDK包,解压缩的命令行不一样。
??我使用下面的命令行下载的NDK 10:
wget -c http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin
下载好以后,进入到NDK(android-ndk-r10e-linux-x86_64.bin )的下载目录,右击打开Teminal命令窗口,逐次执行以下两条命令进行解压缩,解压结束会提示Everything is Ok,如下图所示:
chmod a+x android-ndk-r10e-linux-x86_64.bin
./android-ndk-r10e-linux-x86_64.bin
如果你是下载的zip后缀的压缩包,使用下面命令行解压缩:
unzip android-ndk-r10e-linux-x86_64.zip
如果解压失败,可能是权限问题,在上级目录给App文件夹权限:
chamod 777 -R ndk
解压缩后,打开/etc/profile,在/etc/profile文件里配置NDK的环境变量,命令行:
sudo gedit /etc/profile
打开后在该文件的最后一行,添加下面几行:
export ANDROID_NDK=/home/ubuntu18041/App/android-ndk-r10e
export PATH=$PATH:$ANDROID_NDK
关闭/etc/profile文件后,使用下面命令行保存配置,保存了才会生效。
source /etc/profile
关机重启后,使用下面命令行判断是否配置成功。
ndk-build -v
配置成功后会有下图的的提示。
3 在Ubuntu虚拟机中编译ijkplayer
3.1安装git
sudo apt-get install git
安装如果出现如下面:
Reading package lists... Done Building dependency tree Reading state information... Done Some packages could not be installed. This may mean that you hav requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: zabbix-agent : Depends: libcurl3 (>= 7.16.2) but it is not going to be installed E: Unable to correct problems, you have held broken package
执行:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get autoremove
如果出现如下图:
执行:sudo fuser -vki /var/lib/apt/lists/lock
出现:Could not resolve 'archive.ubuntu.com
看是否有网络,如果没有,可以虚拟机设置里点选网络适配器,将网络连接改为桥接模式即可
3.2 安装yasm
sudo apt-get install yasm
3.3 下载 ijkplayer 代码(删除:rm -rf 文件夹名称)
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
3.4安装:sudo apt-get install make
3.5 初始化
cd ijkplayer-android
git checkout -B latest k0.7.8
./init-android.sh
如果想运行快,成功率高,可以先把init-android.sh,init-android-libyuv.sh,init-android-openssl.sh,init-android-soundtouch.sh里的github路径改成你已经拉取到你的git的路径,再执行./init-android.sh
初始化可能要花一段时间,如果太慢你就干点别的吧。如果权限不够,使用 sudo su 命令就行了,如下图所示。
3.5 配置并编译
cd config
反正体积最小,就用module-lite.sh这个就行了,
(需要哪些功能就改成enable)
#! /usr/bin/env bash
#--------------------
# Standard options:
export COMMON_FF_CFG_FLAGS=
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --prefix=PREFIX"
# Licensing options:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-gpl"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-version3"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-nonfree"
# Configuration options:
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-static"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-shared"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-small"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-runtime-cpudetect"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-gray"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-swscale-alpha"
# Program options:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-programs"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-ffmpeg"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-ffplay"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-ffprobe"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-ffserver"
# Documentation options:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-doc"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-htmlpages"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-manpages"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-podpages"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-txtpages"
# Component options:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-avdevice"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-avcodec"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-avformat"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-avutil"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-swresample"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-swscale"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-postproc"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-avfilter"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-avresample"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-pthreads"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-w32threads"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-os2threads"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-network"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-dct"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-dwt"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-lsp"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-lzo"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-mdct"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-rdft"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-fft"
# Hardware accelerators:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-d3d11va"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-dxva2"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-vaapi"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-vda"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-vdpau"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-videotoolbox"
# Individual component options:
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-everything"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-encoders"
# ./configure --list-decoders
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-decoders"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=aac"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=aac_latm"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=flv"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=h264"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mp3*"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=vp6f"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-hwaccels"
# ./configure --list-muxers
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-muxers"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-muxer=mp4"
# ./configure --list-demuxers
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-demuxers"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=aac"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=concat"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=data"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=flv"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=hls"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=live_flv"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mov"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mp3"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mpegps"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mpegts"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mpegvideo"
#新增g711
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=pcm_ulaw"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=pcm_alaw"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=pcm_mulaw"
# ./configure --list-parsers
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-parsers"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-parser=aac"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-parser=aac_latm"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-parser=h264"
# ./configure --list-bsf
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-bsfs"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=chomp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=dca_core"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=dump_extradata"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=hevc_mp4toannexb"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=imx_dump_header"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=mjpeg2jpeg"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=mjpega_dump_header"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=mov2textsub"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=mp3_header_decompress"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=mpeg4_unpack_bframes"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=noise"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=remove_extradata"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=text2movsub"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=vp9_superframe"
# ./configure --list-protocols
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocols"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=async"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=bluray"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=concat"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=crypto"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=ffrtmpcrypt"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=ffrtmphttp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=gopher"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=icecast"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=librtmp*"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=libssh"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=md5"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=mmsh"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=mmst"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=rtmp*"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtmp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtmpt"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=sctp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=srtp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=subfile"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=unix"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS -- enable-protocol=tcp "
#新增
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=sdp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mjpeg"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mjpeg"
#
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-devices"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-filters"
# External library support:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-iconv"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-audiotoolbox"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-videotoolbox"
# ...
# Advanced options (experts only):
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --cross-prefix=${FF_CROSS_PREFIX}-"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-cross-compile"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --sysroot=PATH"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --sysinclude=PATH"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --target-os=TAGET_OS"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --target-exec=CMD"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --target-path=DIR"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --toolchain=NAME"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --nm=NM"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --ar=AR"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --as=AS"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --yasmexe=EXE"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --cc=CC"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --cxx=CXX"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --dep-cc=DEPCC"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --ld=LD"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --host-cc=HOSTCC"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --host-cflags=HCFLAGS"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --host-cppflags=HCPPFLAGS"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --host-ld=HOSTLD"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --host-ldflags=HLDFLAGS"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --host-libs=HLIBS"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --host-os=OS"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --extra-cflags=ECFLAGS"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --extra-cxxflags=ECFLAGS"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --extra-ldflags=ELDFLAGS"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --extra-libs=ELIBS"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --extra-version=STRING"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --optflags=OPTFLAGS"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --build-suffix=SUFFIX"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --malloc-prefix=PREFIX"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --progs-suffix=SUFFIX"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --arch=ARCH"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --cpu=CPU"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-pic"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-sram"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-thumb"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-symver"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-hardcoded-tables"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-safe-bitstream-reader"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-memalign-hack"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-lto"
# Optimization options (experts only):
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-asm"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-altivec"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-amd3dnow"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-amd3dnowext"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-mmx"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-mmxext"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-sse"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-sse2"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-sse3"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-ssse3"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-sse4"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-sse42"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-avx"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-fma4"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-armv5te"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-armv6"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-armv6t2"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-vfp"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-neon"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-vis"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-inline-asm"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-yasm"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-mips32r2"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-mipsdspr1"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-mipsdspr2"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-mipsfpu"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-fast-unaligned"
# Developer options (useful when working on FFmpeg itself):
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-coverage"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-debug"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-debug=LEVEL"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-optimizations"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-extra-warnings"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-stripping"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --assert-level=level"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-memory-poisoning"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --valgrind=VALGRIND"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-ftrapv"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --samples=PATH"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-xmm-clobber-test"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-random"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-random"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-random=LIST"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-random=LIST"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --random-seed=VALUE"
rm module.sh
//k0.8.8加这两个
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bzlib"
ln -s module-lite.sh module.sh
source module.sh
module-default.sh:默认,如果你喜欢更多类型可以用这个;
module-lite-hevc.sh:如果您更喜欢较小的二进制大小的编解码器/格式(包括hevc功能)
module-lite.sh:如果您更喜欢较小的二进制大小的编解码器/格式(默认情况下)
反正体积最小,就用module-lite.sh这个就行了,
到此你还可以打开module.sh自行进行修改,比如我只想它支持mp3,
其他格式都不支持,那么可以把不想支持的格式的enable改成disable。
然后切换到~/ijkplayer-android/android/contrib目录下再执行下列命令就不会出问题了:
3.6:初始化android支持Https
cd ..
sudo ./init-android-openssl.sh
Step 7:清除一波
cd android/contrib
./compile-openssl.sh clean
./compile-ffmpeg.sh clean
Step 8:编译openssl
./compile-openssl.sh all
如果出现:they must point to your ndk directories 看看你是否ndk环境配对,如果确认配对,可以尝试su root 输入密码后再次编译 如果出现tools/do-compile-openssl.sh :make:not found
·编译完成后,如果要修改源码,这个时候修改,修改ff_ffplay.c文件中的函数packet_queue_get_or_buffering·
修改如下:
/**被修改函数
static int packet_queue_get_or_buffering(FFPlayer *ffp, PacketQueue *q, AVPacket *pkt, int *serial, int *finished)
{
assert(finished);
if (!ffp->packet_buffering)
return packet_queue_get(q, pkt, 1, serial);
while (1) {
int new_packet = packet_queue_get(q, pkt, 0, serial);
if (new_packet < 0)
return -1;
else if (new_packet == 0) {
if (q->is_buffer_indicator && !*finished)
ffp_toggle_buffering(ffp, 1);
new_packet = packet_queue_get(q, pkt, 1, serial);
if (new_packet < 0)
return -1;
}
if (*finished == *serial) {
av_packet_unref(pkt);
continue;
}
else
break;
}
return 1;
}*/
?//修改后的函数
static int packet_queue_get_or_buffering(FFPlayer *ffp, PacketQueue *q, AVPacket *pkt, int *serial, int finished)
{
while (1) {
int new_packet = packet_queue_get(q, pkt, 1, serial);
if (new_packet < 0)
{
new_packet = packet_queue_get(q, pkt, 0, serial);
if(new_packet < 0)
return -1;
}
else if (new_packet == 0) {
if (!finished)
ffp_toggle_buffering(ffp, 1);
new_packet = packet_queue_get(q, pkt, 1, serial);
if (new_packet < 0)
return -1;
}
if (finished == *serial) {
av_free_packet(pkt);
continue;
}
else
break;
}
return 1;
}
?//被修改函数
static double vp_duration(VideoState *is, Frame *vp, Frame *nextvp) {
? if (vp->serial == nextvp->serial) {
? double duration = nextvp->pts - vp->pts;
? if (isnan(duration) || duration <= 0 || duration > is->max_frame_duration)
? return vp->duration;
? else
? return duration;
? } else {
? return 0.0;
? }
?
?}
上面的修改完成后便可以开始编译了,cd 到../ijkplayer/android/contrib
执行
Step 9:编译ffmpeg
这里的话看你需要,如果想编译所有版本的so库,就跟all,如果是特定
CPU架构就跟cpu架构,比如:./compile-ffmpeg.sh armv7a
编译特定需要的肯定是比全部耗时短~
./compile-ffmpeg.sh all
到此就全部编译成功了。对于图片的截取,是对部分编译过程的一个快照,这样可以对自己的编译信息做一个对比。
如果出现下图(k0.8.8)
编辑module.sh
在结尾加入
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bzlib"
保存后执行
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
Step 10:编译ijkplayer
加all默认编译所有架构的so库,不加默认只编译armv7a架构!
cd ..
./compile-ijk.sh all
编译需要漫长的等待,编译成功后,会在目录下生成一个ijkplayer的工程:
问题1:执行 ./compile-ffmpeg.sh all 命令后,如果提示 找不到NDK路径,先去看看NDK路径是否配置正确,如果正确还报这个错,那可能是用户的问题,切换到sudo后,sudo的用户文件系统与你(当前登录用户)放置NDK的路径不一致,这个时候你要提升你的用户权限,不要在指令前加sudo了。
问题2:执行 ./compile-ffmpeg.sh all 命令后,如果报错:tools/do-compile-ffmpeg.sh: 行 317: make: 未找到命令,说明没安装make,使用 sudo apt-get install make 命令安装即可。
问题3:执行 ./compile-ffmpeg.sh all 命令后,如果报错:fatal error: linux/perf_event.h: No such file or directory,将目录切换到 ~/ijkplayer-android/config下,使用sudo gedit module.sh在该文件最后一行添加下面一行,如下图所示:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
这样,编译就结束了。
题外知识
Ubuntu保存退出vim编辑器
gedit 一个GUI的文本编辑器,Ubuntu默认安装
? 命令模式,从键盘上输入的任何字符都被作为编辑命令来解释, vi 下很多操作如配置编辑器、文本查找和替换、选择文本等都 是在命令模式下进行的。
? 输入模式,从键盘上输入的所有字符都被插入到正在编辑的缓冲区中,被当作正文。
1.编辑
进入vi/vim后按字母“i”或“I”即可进入编辑状态(此时左下角会出现 “插入”),另外还可以用a 或 A命令,o 或 O命令;他们的区别在于:
a 在当前光标位置后面开始插入
A 在当前行行末开始插入
i 在当前光标前开始插入
I 在当前光标行行首开始插入
o 从当前光标开始下一行开始插入
O 从当前光标开始前一行开始插入
2.退出
退出的时候分为4种情况:保存退出、正常退出、不保存退出以及强制退出
(1)保存退出:按“Esc”键后 此时的“插入”会消失,再输入“:”之后在输入命令时直接输入“wq”;也可以用快捷键按Shift+zz 就可以保存修改内容并退出。
(2)正常退出:当修改修改了一部分内容后发现修改错了,此时就会进行不保存退出按“Esc”键后,再输入“:”之后在输入命令时直接输入“q” 。
(3)强制退出: 按“Esc”键后,再输入“:”之后在输入命令时直接输入“q!”。
Xftp 出现553 :ll 对于的文件,查看是否有权限,如果没有权限,就sudo chmod 777 对应文件名
Xftp链接虚拟机里的Ubuntu失败解决
一、查看下虚拟机里面的IP地址
ifconfig
二、下载ssh-server
因为Ubuntu默认安装ssh-client,但是不会安装ssh-server,所以需要我们手动进行安装
sudo apt-get install ssh-server
检查Ubuntu的ssh服务是否开启
$ ps -e|grep ssh
看到“ssh-agent”和“sshd”,否则表示没有安装服务,或没有开机启动
安装好之后如果还是链接不上,执行下面命令
1.关闭防火墙
sudo ufw disable
查看下防火墙状态
sudo ufw status
状态为inactive 则为已关闭
2.开启22 端口
sudo ufw allow 22
三、Xftp连接失败
连接时要选择SFTP不要选择FTP
Ubuntu中Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend)问题的解决
参考了一篇博客,已经解决问题。现将步骤记录下来。
解决办法:
第一种情况:
进程中存在与apt相关的正在运行的进程:
首先检查是否在运行apt,apt-get相关的进程
ps aux | grep -i apt
如果存在与apt相关的正在运行的进程,kill掉进程;
sudo kill -9 <process id>
或者直接简单粗暴的:
sudo killall apt apt-get
如果进行完上面的步骤还是无法顺利执行apt-get 操作,则属于第二种情况:
第二种情况:
进程列表中已经没有与apt,apt-get相关的进程在运行,但依然报错,在这种情况下,产生错误的根本原因是lock file。 lock file用于防止两个或多个进程使用相同的数据。 当运行apt或apt-commands时,它会在几个地方创建lock files。 当前一个apt命令未正确终止时,lock file未被删除,因此它们会阻止任何新的apt / apt-get命令实例,比如正在执行apt-get upgrade,在执行过程中直接ctrl+c取消了该操作,很有可能就会造成这种情况。
要解决此问题,首先要删除lock file。
使用lsof命令获取持有lock file的进程的进程ID,依次运行如下命令:
lsof /var/lib/dpkg/lock
lsof /var/lib/apt/lists/lock
lsof /var/cache/apt/archives/lock
需要注意的是,以上命令执行结果如果无返回,说明没有正在运行的进程;如果返回了相应的进程,需要kill掉。
删除所有的lock file
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
最后重新配置一下dpkg:
sudo dpkg --configure -a
如果上述命令不出任何错误,就万事大吉了。(我是到这里问题就解决了)
但是有时候,生活总是嫌你不够惨,执行配置命令时可能会出现以下错误:
dpkg: error: dpkg frontend is locked by another process
这需要我们额外进行一些操作:
找出正在锁定lock file的进程:
lsof /var/lib/dpkg/lock-frontend
kill掉输出的进程(如果输出为空则忽略)
sudo kill -9 PID
删除lock file并重新配置dpkg:
sudo rm /var/lib/dpkg/lock-frontend
sudo dpkg --configure -a
删除文件夹下所有文件
rm -rf ./*