最近研究音视频,ffmpeg 是一个非常著名的开源项目,分享一下自己从 0 到编译 ffmpeg 的过程,希望能帮助其他人趟坑。
很多的帖子都推荐编译 3.3.6 的版本,因为提到高版本都有编译不过的坑,所以我也是编译 3.3.6,NDK 是 android-ndk-r15c,其实编译部分的坑不多,不过,有些帖子的编译脚本编译出来时会少文件的,引入到 android 项目里面就各种报错。
最近研究音视频,ffmpeg 是一个非常著名的开源项目,分享一下自己从 0 到编译 ffmpeg 的过程,希望能帮助其他人趟坑。
很多的帖子都推荐编译 3.3.6 的版本,因为提到高版本都有编译不过的坑,所以我也是编译 3.3.6,NDK 是 android-ndk-r15c,其实编译部分的坑不多,不过,有些帖子的编译脚本编译出来时会少文件的,引入到 android 项目里面就各种报错。
上次开源了一个简易的终端模拟器,我也知道并不是标准的,但自己也一直在用,然后就发现了一些棘手的问题,就又跑去研究了一些完整终端的源码,termux,Android Terminal,最后成功的将他们的原理在 Flutter 实现
其实这个源也可能会是你学习使用 dart:ffi 的一个例子,其中用到的 char **,也就是二级指针的传递在也很少能在官方的 example 中也很难找到直接的例子,也是我处理这种类型遇见的比较麻烦的坑,主要就是没有案例。我将 termux 的 C 语言部分完全重构以供 Flutter 使用,由于 UI 框架使用的 Flutter 经过测试可以在 Macos 上跑起来!!!
Dart 对 C 语言的调用我个人感觉比 Java 的 jni 要简单得多,用不着还在 C 语言中创建出对应的函数才能调用,Dart 都能直接调用 C 语言原有的那些函数,因为 java jni 调用 C 语言的完整流程我也上手写过,Dart 还是简易多了,不用打乱已有 C 语言的结构
我是首先去看了官方的前两个 example,都上手来跑了,然后对应理解每一部分,dart:ffi 的例子是在 pc 端,所以一系列的编译也是在 pc 端,可我是安卓端的 app,于是就遇见了第一个坑,交叉编译.c,.h 到 so 库
在tcp通信中,粘包是极其常见的事情,
下面我分享一个再实际开发的时候遇见的粘包问题,虽然它的实际触发场景不是tcp通信,但能应用于一些类似的粘包情况
由于我对计算机网路还没有过系统的学习,根据我看过的文献说一下我自己的理解
自从把Flutter SDK中的analysis_options.yaml copy到项目根目录后就***,当时是700多个error,警告记不清了,提示信息有7k个,总共花了一天半全部改完。
所以还是得养成良好的代码编写习惯
在 Android 原生中执行 shell 可以使用 Runtime 的这些类,更多的会选择第三方开发者封装好的库来调用 shell,完整的终端模拟器,如 termux,Android Terminal 等都涉及到一些 jni 通信,C 语言中 system 函数可以执行命令行命令,python 中则是 os.system 函数,各类语言都有执行命令行的函数与方法,在 dart 中,我们通过 Process 类来实现这些功能
写这个的一切起因都得从我某天切换了酷安 App 的夜间模式说起,看个 Gif,忽略图中其他无关项。
这种的动画在 awesome-Flutter 上好像见到过,但是记得只是类似,有一个 App 的首次引导页跟这个有点像,不过那个是在一个 PageView 切换的时候的动画。上图的酷安 App 是原生应用,可以看到我在第三次切换主题的时候滑动了一个横向的类似于 Flutter ListView 的东西,再次点击切换主题,ListView 的状态变化了,所以我怀疑酷安是用 StartActivity 的方式(太久没碰原生 UI 了,所以只是猜测)