网页在线录音并上传

前段时间接了一个外包项目,有一个功能是网页在线录音并上传云服务器的需求,之前没有接触过,想着Google了一下找个demo改改;
找到三个,基本能满足需求:

第一个是在第二个的基础上扩展出来的,使用flash模块实现录音功能;第一个已经实现了录音并上传到服务器的功能,但是有个问题是录音中杂音太大,鉴于自身技术水平不支持优化源码,所以基本是被嫌弃了;
第三个是使用 HTML5 的 Audio API 实现的,如果不考虑 ie 的话,是非常推荐的;

以上是对三个录音插件的简单说明,我的需求是能够兼容低版本浏览器,实现录音后上传服务器并获取音频地址;

经过一番 Google,算是找到一个满足需求的:https://github.com/jwagener-soundcloud/recorder.js
这个插件基于 swfObject.js,使用 flash 实现录音功能,同时它还封装好了上传功能,支持上传到服务器和 SoundCloud;

recorder.js 源码,集成了swfObject.js,封装了初始化、录音开始、录音停止、录音播放、录音上传等方法;插件有提供 demo,基本用法可以参考 demo 了解使用,就不多说了;


废话这么多,说一下我的需求:

  • 网页在线录音,并上传到 upyun;
  • 录音开始,同时执行倒计时(倒计时结束录音结束);
  • 录音结束,上传录音;
  • 上传录音完成,执行方法进入下一个录音场景;
  • 所有录音场景结束,展示录音列表并播放;
  • 兼容低版本浏览器;

// 初始化
Recorder.initialize({
    swfSrc: "../recorder.swf"
});
// 开始录音
function record(callback){
    Recorder.record({
        start: function(){
            callback && callback();
        },
        progress: function(milliseconds){
            //document.getElementById("time").innerHTML = timecode(milliseconds);
        }
    });
}
// 上传模块
var recordArr = []; // 因为最后需要展示音频列表,需要一个全局数组用于存储upyun返回的音频url
function upload(callback){
    // 定义音频文件名
    var fileName = $.cookie("TOEFL_TOKEN") ? "login" + new Date().getTime() : "nologin" + new Date().getTime();
    // 获取upyun配置参数,参考upyun的form_api:http://docs.upyun.com/api/form_api/
    // 这里先上传音频文件名至服务器端,服务端根据文件名生成对应的policy和signature返回客户端
    $.ajax({
        type: "GET",
        url: xm.baseURL + "/mkTpo/file/" + fileName + ".wav/posts.action",
        dataType : "json",
        success: function(data) {
            // 获取upyun_api参数
            var expiration = data.expiration, // 时间戳
                saveKey = data["save-key"], // 保存路径
                bucket = data.bucket, // 空间名
                policy = data.poily, // policy
                signature = data.signature; // signature
            // 插件封装方法,注:该方法中的注释可能导致程序报错,需删除
            Recorder.upload({
                method: "POST",
                url: "http://v0.api.upyun.com/universe1", // 录音上传url:upyun_api基本域名+空间名
                audioParam: "file", // 上传upyun时,这个参数值固定为file,相当于表单提交中的<input type="file">
                params: { // 这里填写获取的upyun_api参数,获取upyun的上传权限
                    "expiration": expiration,
                    "save-key": saveKey,
                    "bucket": bucket,
                    "policy": policy,
                    "signature": signature
                },
                success: function(responseText){ // 上传成功之后upyun会返回音频文件的相关信息
                    var data = JSON.parse(responseText);
                    recordArr.push(data.url); // 将录音音频的url追加到数组
                    callback && callback(); // 上传完成执行方法
                }
            });
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            console.log("XMLHttpRequest.status: " + XMLHttpRequest.status);
            console.log("XMLHttpRequest.readyState: " + XMLHttpRequest.readyState);  
            console.log("textStatus: " + textStatus);
        }
    });
}

所有录音场景结束之后,对 recordArr 数组遍历输出,并插入到结果展示页中;
至于音频播放,那是播放器的事,项目中用到的是 jplayer [中文网]播放器;

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
PHP和H5网页授权登录是指通过使用PHP语言开发的后台逻辑和H5网页开发技术实现用户授权登录功能。 在实现过程中,通常会使用第三方登录平台(如微信、QQ、微博等)提供的开放接口来实现授权登录。首先,需要在第三方登录平台注册开发者账号,并创建应用。通过该应用的开发者后台可以获取到AppID和AppSecret等必要参数。 在PHP后台逻辑中,首先需要获取到第三方登录平台的授权登录链接,然后将链接返回给H5前端页面。前端页面通过<a>标签等形式展示该链接,用户在点击链接后会跳转至第三方登录平台的授权页面。 用户在授权页面完成授权登录后,会跳转回到之前设置的回调地址,同时带有授权码(或者是令牌)等必要信息。PHP后台逻辑通过回调地址中携带的参数,与第三方登录平台进行交互,通过AppID和AppSecret等参数,向第三方登录平台发起请求,获取用户的个人信息和授权令牌等数据。 PHP后台逻辑在获取到用户信息后,可以将用户信息存储到数据库中,或者将用户信息返回给H5前端页面进行展示。之后,用户可以在H5页面进行各种操作,例如发表评论、收藏内容等。 总的来说,PHP和H5网页授权登录是通过PHP后台逻辑和H5前端技术实现用户授权登录的一种方法。通过与第三方登录平台进行交互,可以获取到用户的个人信息和授权令牌等数据,并实现各种操作。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值