Win10、Win11使用WSL编译ijkplayer

一、安装适用于Linux的Windows子系统

1.1 什么是WSL

Windows Subsystem for Linux(简称WSL)是一个在Windows 10\11上能够运行原生Linux二进制的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。

1.2 先决条件

必须运行 Win10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Win11

1.3 安装WSL(这里的图以win11为例。win10大同小异)

1、通过快捷键"windows键+R",打开运行窗口,输入:control appwiz.cpl。


image.png

2、在打开的控制面板的程序和功能界面,点击左边的“启用或关闭windows功能”。


image.png

3、在弹出的“windows功能”窗口中找到“适用于Linux的windows子系统”,勾选中然后点击“确定”。


image.png

4、从开始菜单中找到并点击“Microsoft Store”图标并进入windows应用商店。


image.png

5、在windows应用商店中搜索“linux”关键字,从结果中选择“在windows上运行Linux”。


image.png

6、在新打开的页面中,会显示可以在windows 10上安装的linux系统,选择自己想要安装的一款,然后跟从向导安装。(这里选择了Ubuntu 20.04.5 LTS)


image.png

二、安装编译环境

2.1 配置JDK

下载linux版本中后缀为 .tar.gz 的包,x86 代表 32 位,x64 代表 64 位。我下载的是 jdk-8u351-linux-x64.tar.gz。
JDK官方发下载地址 Java Downloads | Oracle 中国

提升权限

sudo su

创建工程目录

mkdir App

进入App文件夹

cd App

上传 jdk-8u351-linux-x64.tar.gz 到App文件夹。
解压压缩包

sudo tar xvf jdk-8u351-linux-x64.tar.gz

解压完成后,打开/etc/profile,在/etc/profile文件里配置JDK的环境变量

sudo gedit /etc/profile

打开后在该文件的最后一行,添加下面几行

export JAVA_HOME=/home/liming/App/jdk1.8.0_351
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export PATH=${JAVA_HOME}/bin:$PATH 

要注意你的 JAVA_HOME 的路径要配制成你的jdk的目录,需要修改的地方如下图所示
image.png

关闭/etc/profile文件后,使用下面命令行保存配置,保存了才会生效。

 source /etc/profile

查看是否配置成功

java -version

如下图显示表示配置成功


image.png

2.1 配置SDK

SDK的配置和JDK的配置大同小异
下载linux版本的SDK包,将该包放到App文件夹目录下,解压

sudo tar -zxvf android-sdk_r24.4.1-linux.tgz

解压完成后,打开/etc/profile,在/etc/profile文件里配置SDK的环境变量

sudo gedit /etc/profile

打开后在该文件的最后一行,添加下面几行:

export ANDROID_SDK=/home/liming/App/android-sdk-linux
export PATH=${PATH}:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools

关闭/etc/profile文件后,使用下面命令行保存配置,保存了才会生效。

 source /etc/profile

2.3 配置NDK

下载 NDK 10

wget -c http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin

下载好以后,逐次执行以下两条命令进行解压缩,解压结束会提示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/liming/App/android-ndk-r10e
export PATH=$PATH:$ANDROID_NDK

关闭/etc/profile文件后,使用下面命令行保存配置,保存了才会生效。

 source /etc/profile

查看NDK是否配置成功

ndk-build -v

以下表示安装成功


image.png

三、编译ijkplayer

3.1 安装git

sudo apt-get install git

3.2 安装yasm

sudo apt-get install yasm

3.3 下载 ijkplayer 代码

sudo git clone https://github.com/Bilibili/ijkplayer ijkplayer-android

3.4 初始化

初始化可能要花一段时间

cd ijkplayer-android
./init-android.sh

3.5 修改编译配置文件module-default.sh。

cd config

按需修改module-default.sh内的配置
常用音频编译方式小结 供参考

mp3
        --enable-libmp3lame 
     --enable-decoder=mp3 
     --enable-demuxer=mp3 
     --enable-muxer=mp3
     --enable-encoder=libmp3lame


支持vorbis
     --enable-libvorbis 
     --enable-parser=vorbis 
     --enable-encoder=vorbis 
     --enable-decoder=vorbis 
     --enable-encoder=libvorbis 
     --enable-decoder=libvorbis 
     --enable-muxer=ogg
     --enable-demuxer=ogg


支持wav
        --enable-libwavpack
        --enable-muxer=wav
        --enable-demuxer=wav
        --enable-decoder=wavpack
        --enable-encoder=wavpack
        --enable-decoder=wav
        --enable-encoder=wav
        --enable-encoder=pcm_s16le
        --enable-decoder=pcm_s16le

        --enable-encoder=pcm_u8
     --enable-decoder=pcm_u8
     --enable-muxer=pcm_u8
     --enable-demuxer=pcm_u8  


支持aac
        --enable-libvo-aacenc
        --enable-libfdk_aac
    --enable-libfaac
    --enable-parser=aac
    --enable-encoder=aac
        --enable-decoder=aac
        --enable-encoder=libfaac
        --enable-encoder=libvo_aacenc
    --enable-encoder=libaacplus
    --enable-encoder=libfdk_aac
    --enable-decoder=libfdk_aac
    --enable-demuxer=aac
    --enable-muxer=adts


支持mp2
        --enable-encoder=mp2 
    --enable-decoder=mp2 
    --enable-muxer=mp2 
        --enable-decoder=mp2float 
        --enable-encoder=mp2fixed 


flac 支持
    --enable-encoder=flac
        --enable-decoder=flac
        --enable-demuxer=flac
        --enable-muxer=flac
        --enable-parser=flac


jpeg等
    --enable-encoder=jpeg2000 
    --enable-encoder=mjpeg 
    --enable-encoder=ljpeg 
    --enable-encoder=jpegls
    --enable-decoder=jpeg2000 
    --enable-decoder=jpegls 
    --enable-decoder=mjpeg 
    --enable-decoder=mjpegb 
    --enable-muxer=mjpeg 
    --enable-demuxer=mjpeg 
    --enable-encoder=png 
    --enable-decoder=png 
    --enable-parser=png 


添加scale的支持
    --enable-swscale 
    --enable-swscale-alpha 
    --enable-filter=scale 


ac3
    --enable-encoder=ac3 
    --enable-decoder=ac3 
    --enable-encoder=ac3_fixed
    --enable-decoder=atrac3 
    --enable-decoder=atrac3p 
    --enable-encoder=eac3 
    --enable-decoder=eac3 
    --enable-muxer=ac3 
    --enable-demuxer=ac3 
    --enable-muxer=eac3 
    --enable-demuxer=eac3 


支持wma/wmv
    --enable-decoder=wmalossless 
    --enable-decoder=wmapro 
    --enable-encoder=wmav1 
    --enable-decoder=wmav1 
    --enable-encoder=wmav2 
    --enable-decoder=wmav2 
    --enable-decoder=wmavoice 
    --enable-demuxer=xwma 
    --enable-demuxer=avi 
    --enable-muxer=avi 
    --enable-demuxer=asf 
    --enable-muxer=asf 
    --enable-encoder=wmv1
    --enable-decoder=wmv1 
    --enable-encoder=wmv2 
    --enable-decoder=wmv2 
    --enable-decoder=wmv3 
    --enable-decoder=wmv3_crystalhd 
    --enable-decoder=wmv3_vdpau 
    --enable-decoder=wmv3image 

3.6 建立软链接。

rm module.sh
ln -s module-default.sh module.sh

3.7初始化openssl

cd ..
./init-android-openssl.sh

3.8编译opens

cd android/contrib
./compile-openssl.sh clean
./compile-openssl.sh all

3.9初始化 android

cd ../..
./init-android.sh

3.10编译ffmpeg

cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

3.11编译ijk

cd ..
./compile-ijk.sh all

3.12复制so文件

cp ijkplayer/ijkplayer-armv5/src/main/libs  ijkplayer-java/src/main/jniLibs
cp ijkplayer/ijkplayer-armv7a/src/main/libs  ijkplayer-java/src/main/jniLibs
cp ijkplayer/ijkplayer-arm64/src/main/libs  ijkplayer-java/src/main/jniLibs
cp ijkplayer/ijkplayer-x86/src/main/libs ijkplayer-java/src/main/jniLibs

最后编译出来的so库在ijkplayer-java/src/main/jniLibs文件下

你可能感兴趣的:(Win10、Win11使用WSL编译ijkplayer)