【Flutter】media-kit编译libmpv

media-kit编译libmpv

这篇文章大致讲一下libmpv.so如何编译,以及如何在跨平台编译。

mpv播放器提供了C接口给其他程序执行mpv指令,libmpv.so则是C接口代码实现的动态库产物。mpv官网提供了解释:https://mpv.io/manual/stable/#embedding-into-other-programs-libmpv

mpv播放器提供了源码让开发者编译安装使用,mpv源码仓库

除此之外,mpv还提供了一个专门用于编译的命令集仓库,可以快速简单的完成mpv播放器编译。Mpv-build源码仓库

接下来讲如何编译libmpv
编译前置条件,需要安装以下软件:

sudo apt-get install meson
# 如果报错meson.build:1:0: ERROR: Meson version is 0.53.2 but project requires >=0.63
# 执行 pip3 install meson==0.63
# autoreconf: command not found
sudo apt-get install autoconf automake libtool

sudo apt-get install pkg-config
# No package 'freetype2' found
sudo apt install libfreetype6-dev
# No package 'fribidi' found
sudo apt-get install libfribidi-dev
# No package 'harfbuzz' found
sudo apt-get install libharfbuzz0 libharfbuzz-dev
sudo apt-get install build-essential autoconf libtool pkg-config
sudo apt-get install libicu-dev icu-devtools
sudo apt-get install libglib2.0-dev
sudo apt-get install libcairo2-dev
sudo apt-get install libfontconfig1-dev
# nasm/yasm not found or too old
sudo apt-get install nasm
# ERROR: x264 not found using pkg-config
sudo apt-get install libx264-dev
# nasm/yasm not found or too old
sudo apt-get install nasm
# Did not find CMake 'cmake'
sudo apt-get install cmake

下载编译

# 本地编译路径下创建存放mpv代码的目录
mkdir mpv
cd mpv
# 下载mpv-build
git clone https://github.com/mpv-player/mpv-build
cd mpv-build
# 使能编译libmpv
echo -Dlibmpv=true > mpv_options
# 编译
./rebuild -j4
# 如果失败了,根据提示下载缺失的软件,并重新执行./rebuild -j4
# 如果libmpv内容更改了,可以执行如下命令只编译libmpv
./scripts/mpv-config
./scripts/mpv-build

Flutter三方库media-kit:
https://pub.dev/packages/media_kit

Flutter三方库media-kit源码仓库:
https://github.com/media-kit/media-kit

举例android在哪里编译libmpv.so,并如何引用libmpv.so适配Flutter三方库media-kit。
libmpv编译,包括音频audio和视频video,安卓对应的编译工具集源码仓:
https://github.com/media-kit/libmpv-android-audio-build

https://github.com/media-kit/libmpv-android-video-build

在libmpv-android-video-build中,安卓采用gradle去打包编译工具集,生成可发布的release的jar包,用jar包的方式去执行编译。在jar包里面,需要关注的两个文件,是buildscripts/build.sh和buildscripts/download.sh。

buildscripts/build.sh里面判断当前脚本编译的平台和交叉编译链,并调用需要编译的模块编译脚本,如果编译的是mpv,则调用buildscripts/scripts/mpv.sh。/buildscripts/scripts/mpv.sh会通过meson设置编译环境,然后执行ninja编译。其最终是会调用到https://github.com/mpv-player/mpv里的meson.build文件。

buildscripts/download.sh里面包含了download-sdk.sh和download-deps.sh脚本执行,正如脚本的文件名,一个是下载安卓sdk,另一个是下载编译所需要的依赖文件。

回到libmpv-android-video-build刚开始讲的jar包,这个jar包会被https://github.com/media-kit/media-kit编译安卓时调用,而media-kit作为Flutter三方库被Flutter应用依赖。如此形成了一条这样的链路:
https://github.com/media-kit/media-kit ->
https://github.com/media-kit/libmpv-android-video-build ->
https://github.com/mpv-player/mpv

至此libmpv.so如何在跨平台编译的大致思路梳理完成。后面需要详细理解各个平台下编译所需的工具,以及编译的参数。

Flutter中的TextField是一个常用的输入控件,它允许用户在应用程序中输入文本。 TextField通常用于表单中,可以接收用户输入的文本,比如用户名、密码、电子邮件地址等。 以下是一个基本的TextField示例: ```dart TextField( decoration: InputDecoration( hintText: '请输入文本', ), ); ``` 在上面的示例中,我们使用了decoration属性来设置TextField的外观,其中hintText属性用于设置提示文本。 TextField还有许多其他的属性可以设置,比如maxLength(允许输入的最大长度)、keyboardType(键盘类型)、obscureText(是否隐藏输入内容)等等。 下面是一个更完整的TextField示例: ```dart class MyTextField extends StatefulWidget { @override _MyTextFieldState createState() => _MyTextFieldState(); } class _MyTextFieldState extends State<MyTextField> { final TextEditingController _controller = TextEditingController(); @override Widget build(BuildContext context) { return TextField( controller: _controller, maxLength: 10, keyboardType: TextInputType.text, obscureText: true, decoration: InputDecoration( hintText: '请输入文本', labelText: '文本框', prefixIcon: Icon(Icons.text_fields), suffixIcon: IconButton( icon: Icon(Icons.clear), onPressed: () { setState(() { _controller.clear(); }); }, ), border: OutlineInputBorder(), ), onChanged: (value) { print('输入的文本为:$value'); }, ); } } ``` 在上面的示例中,我们使用了TextEditingController来控制TextField的文本内容,maxLength属性限制了用户输入的最大长度为10,keyboardType属性指定了键盘类型为文本类型,obscureText属性设置为true表示隐藏输入内容。 此外,我们还设置了decoration属性来自定义TextField的外观,包括了输入提示文本、标签文本、前缀图标、后缀图标和边框样式等。 最后,我们通过onChanged回调函数来监听用户输入的文本,并打印出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值