今天接个任务,要在android 32位7.0上面实现amr转音频,一天要完工,便于集成
要用到下面开源
https://github.com/kn007/silk-v3-decoder
https://github.com/FFmpeg/FFmpeg
但是发现要用到自己搞啥交叉编译,1天完成不了
就像老板给你5块钱,让你如何加油努力,给公司买辆奔驰车,是不可能完成的任务
于是转到另外一个开源的应用
https://github.com/termux/termux-app
这个相当于一个linux 的终端,linux下面这个就好办多了
安装完termux后,再在里面安一个ubutun20.04
pkg install proot-distro
proot-distro install ubuntu-20.04
这时就进入了ubuntu,我们在这个里面编译silk-v3-decoder
apt install build-essential
apt install make
进入到如下路径
/data/data/com.termux/files/usr/var/lib/proot-distro/installed-rootfs/ubuntu-20.04/home/silk-v3-decoder-master/silk/
直接运行root@localhost:/home/silk-v3-decoder-master# ./converter.sh
就会自动编译了。
如果提示有错注意一下c代码中 #if (EMBEDDED_ARM<5)
我是在rk3288上编译,EMBEDDED_ARM=6 这样就会出错,所以要把相关的
#if (EMBEDDED_ARM<5) 进行注释
这样 我们就有了decoder应用位于/data/data/com.termux/files/usr/var/lib/proot-distro/installed-rootfs/ubuntu-20.04/home/silk-v3-decoder-master/silk/
然后再apk install ffmpeg 直接安个ffmpeg,就不用编译了
这样我们运行./converter.sh msg_1.amr mp3
就可以将msg_1.amr 转为mp3了
但是我们说但是,这个是在termux中进行的,别的应用怎么调用呢
于是我们用python3+flask写个简单脚本,先安装相关的东东
apt install python3
apt install python3-pip
pip3 install flask
安装后 touch server.py
vim server.py
import os
from flask import Flask
app = Flask(__name__)
@app.route('/')
def run_converter():
result = os.popen('/home/silk-v3-decoder-master/converter.sh msg_1.amr mp3')
res = result.read()
return res
if __name__ == '__main__':
app.run()
运行 python3 server.py
这样,就会在本机5000端口起一个服务,当你用应用调用http://localhost:5000时就会进行转码了,哦,对了这个代码没有传路径,以及返回路径,稍微改一下就server.py代码,
import os
from flask import Flask,request
app = Flask(__name__)
@app.route('/')
def run_converter():
input_path =request.args.get('input_path')
if input_path==None:
return 'input_path is error'
result = os.popen('/home/silk-v3-decoder-master/converter.sh '+input_path+' mp3')
res = result.read()
return res
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=False)
这样
这样调用如
http://localhost:5000/?input_path=/sdcard/msg1.amr
下图是我在另外一台PC上调用的结果,看样子这个服务可以搞成分布式的了!
会返回成功与否。
下面是flask的一些说明