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文件下

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容