当前位置 : 主页 > 网络编程 > JavaScript >

使用Node转码amr到mp3 微信语音

来源:互联网 收集:自由互联 发布时间:2021-06-28
amr2mp3.js var http = require('http');var https = require("https"); //httpsvar crypto = require('crypto'); //加密var fs = require('fs'); //文件操作var express = require('express');var iconv = require("iconv-lite");var bodyParser = req
amr2mp3.js
var http = require('http');
var https = require("https");           //https
var crypto = require('crypto');         //加密
var fs = require('fs');                 //文件操作
var express = require('express');
var iconv = require("iconv-lite");
var bodyParser = require("body-parser");    //post解析json
var app = express();
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());

/**
 * 微信语音转码并回发
 **/
app.post('/download/media', function (request, response) {
    if (request.body.access_token && request.body.media) {
        downLoadMedia(request.body.access_token, request.body.media, function (data) {
            if (data.length < 100) {
                debug(data);
                response.end(data);
            } else {
                var fileName = sha1(getTime() + Math.random());
                //var fileName = "./demo.amr";
                fs.writeFileSync("./voice/" + fileName + ".amr", data, "binary");
                var ffmpeg = require('fluent-ffmpeg');
                var command = ffmpeg("./voice/" + fileName + ".amr")
                    .save("./voice/" + fileName + ".mp3")
                    .on('error', function (err) {
                        debug("Convert Error!");
                    })
                    .on('end', function () {
                        debug("Converted...");
                        response.end("https://node.hamm.cn/voice/?id=" + fileName);
                        var url = "https://www.xxx.com/wechat/sendmsg/text?id=" + request.body.openid + "&msg=" + encodeURIComponent("https://node.hamm.cn/voice/?id=" + fileName);
                        https.get(url, function (ress) {
                            debug(ress.text);
                        }).on('error', function (e) {
                            debug(e.message);
                        });

                    });
                debug("Converting...");
            }
        });
    } else {
        var msg = "Params Missing!";
        debug(msg);
        res.end(msg);
    }
});
/**
 * 
 **/
app.post('/download/url', function (req, res) {
    if (req.body.fileurl) {
        downLoadMediaWithUrl(req.body.fileurl, function (data) {
            if (data.length === 0) {
                var fileName = sha1(getTime() + Math.random());
                //var fileName = "./demo.amr";
                fs.writeFileSync("./voice/" + fileName + ".amr", data, "binary");
                var ffmpeg = require('fluent-ffmpeg');
                var command = ffmpeg("./voice/" + fileName + ".amr")
                    .save("./voice/" + fileName + ".mp3")
                    .on('error', function (err) {
                        debug("Convert Error!");
                    })
                    .on('end', function () {
                        debug("Converted...");
                        res.end("https://node.hamm.cn/voice/?id=" + fileName);
                    });
                debug("Converting...");
            }
        });
    } else {
        var msg = "Params Missing!";
        debug(msg);
        res.end(msg);
    }
});
app.get('/voice/', function (req, res) {
    var param = req.query.id;
    fs.readFile('./voice/' + param + ".mp3", function (err, data) {
        if (err) {
            debug("File not found!");
            res.end("File not found!");
        } else {
            debug("File Got!");
            res.end(data);
        }
    });
});

app.get('/*', function (req, res) {
    var params = req.originalUrl;
    res.send("
 

808 Not Found

Nginx&Node
"); }); var server = app.listen(10001, function () { //var host = server.address().address //var port = server.address().port debug("Server running..."); }); function downLoadMediaWithUrl(url, callback) { https.get(url, function (res) { var datas = ""; res.setEncoding("binary"); //一定要设置response的编码为binary res.on('data', function (data) { datas += data; }); res.on("end", function () { //var buff = Buffer.concat(datas, size); //var result = iconv.decode(buff, "utf8"); //转码 //var result = buff.toString(); //不需要转编码,直接tostring callback(datas); }); }).on("error", function (err) { debug("Request Error!"); }); } function downLoadMedia(access_token, media, callback) { var url = "https://api.weixin.qq.com/cgi-bin/media/get?access_token=" + access_token + "&media_id=" + media; https.get(url, function (res) { var datas = ""; res.setEncoding("binary"); //一定要设置response的编码为binary res.on('data', function (data) { datas += data; }); res.on("end", function () { //var buff = Buffer.concat(datas, size); //var result = iconv.decode(buff, "utf8"); //转码 //var result = buff.toString(); //不需要转编码,直接tostring callback(datas); }); }).on("error", function (err) { debug("Request Error!"); }); } function debug(msg) { console.log("Console\t" + getTime() + "\t" + msg); } function sha1(str) { var sha1 = crypto.createHash("sha1"); //定义加密方式:md5不可逆,此处的md5可以换成任意hash加密的方法名称; sha1.update(str); var res = sha1.digest("hex"); //加密后的值d return res; } function getTime() { var now = new Date(); var hours = now.getHours(); var minutes = now.getMinutes(); var seconds = now.getSeconds(); if (hours < 10) { hours = "0" + hours; } if (minutes < 10) { minutes = "0" + minutes; } if (seconds < 10) { seconds = "0" + seconds; } return hours + ":" + minutes + ":" + seconds; }
网友评论