微信jssdk怎么获取录音时间
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信jssdk怎么获取录音时间相关的知识,希望对你有一定的参考价值。
参考技术A 首先我们用到的两个微信JS-SDK的独特接口:1、音频接口:即通过js调用微信录音相关功能,包括录制、上传、播放,控制等。2、智能接口:所谓“智能”接口,目前只有一个“识别音频并返回识别结果接口”,即”声音转文字“。我们的产品"语速达人”基本功能逻辑是这样的:用户读出题词板文字,手机录音,实时识别用户的语速,在完成几秒钟测试后,计算出用户平均语速水平,与小伙伴们愉快的PK“打嘴仗“。为了推广,希望基于Web做一个简单版的html5测试互动,用于微信传播。很遗憾,这个功能在微信JS-SDK推出之前,是无法实现的:一方面JS调用设备录音功能受限,一方面通过JS进行实时语速识别的算法,性能会有问题,于是我们决定放弃了。但是微信JS-SDk推出后,突然发现,这个测语速功能的实现一下变得非常简单。于是经过了简单的功能设计后,前端攻城师立即开干,与APP上线同步做出了一个”语速达人“网页版。(1)Landing界面:包括主视觉banner、挑战题目标题(摇一摇换一个题),以及一个”开始测试“按钮,(2)开始测试:点击开始测试后,会显示题词板。并在3秒倒计时后开始录音。请注意!用户首次使用时,微信会在这里弹出提示“网页请求录音功能,是否允许”的提示,只有用户选择允许,录音接口才能正常调用。(3)测试结果:关键步骤来了!用户录音完成后,调用语音上传和智能识别接口,即可获得将语音转换后的文字。接口非常简单!1、目前还没有用户在录音授权后的回调接口,JS无法掌握用户授权的情况,如果用户在第一次使用时,请求录音权限时点了”不允许“,功能就废了。2、如果文字长的话,声音转文字还是比较慢的。3、微信很大方,我们用到的几个接口都没有使用频次的限制。4、JS-SDK的文档简单但是很有效,Token获取的逻辑刚开始读的时候有点晕晕的,读完了准备开始写后台程序时发现微信的工程师已经都准备好了,拿来改个Key直接就能用了。这里赞一下微信团队。5、原本计划在每个语速挑战下面,显示一个已经挑战了的用户的列表,并放上他们挑战时的录音。这个功能在JS-SDK支持下也能实现,但是为了更好地呈现,需要微信服务号的权限,才能获取用户的头像和昵称。时间原因,没有做出这个功能。6、吐槽一下:微信服务号300RMB/年,微信开放平台接入300RMB/年,帐号不互通,分开申请分开审核分开收钱~真心觉得鹅长有必要计较这点收入么。。。PS:补充一个,最近刚发现,有团队用语音接口做了”朋友圈发语音”的功能。听起来很不错的功能,通过JS-SDK实现起来真是太容易了,我觉得也是精巧的使用典范吧。.net 微信jssdk配置
/// <summary>
/// 获取jssdk配置
/// </summary>
/// <returns></returns>
public IActionResult GetJSSDKConfig()
{
string appid = ""; // appid
string secret = ""; //appsecret
string timestamp = GenerateTimeStamp();//时间戳
string noncestr = GenerateNonceStr();//随机字符串
string signature = "";//签名
string url1 = $"https://api.weixin.qq.com/cgi-bin/token? grant_type=client_credential&appid={appid}&secret={secret}";//获取token
string result = Get(url1);
JsonData jd = JsonMapper.ToObject(result);
string access_token = (string)jd["access_token"];
//2. 用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket(有效期7200 秒,开发者必须在自己的服务全局缓存jsapi_ticket)
string url2 = $"https://api.weixin.qq.com/cgi-bin/ticket/getticket? access_token={access_token}&type=jsapi";//开发者临时票据
string result2 = Get(url2);
JsonData jd2 = JsonMapper.ToObject(result2);
string ticket = (string)jd2["ticket"];
//3. 开始签名
string now_url = Get("nowUrl", "");
string no_jiami = $"jsapi_ticket={ticket}&noncestr={noncestr}×tamp={timestamp}&url={now_url}";
//SHA1加密
signature = EncryHelper.SHA1_Encrypt(no_jiami);
var newData = new
{
appid,
timestamp,
noncestr,
signature
};
}
/// <summary>
/// 生成时间戳,标准北京时间,时区为东八区,自1970年1月1日 0点0分0秒以来的秒数
/// </summary>
/// <returns>时间戳</returns>
public string GenerateTimeStamp()
{
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
return Convert.ToInt64(ts.TotalSeconds).ToString();
}
/// <summary>
/// 生成随机串,随机串包含字母或数字
/// </summary>
/// <returns>随机串</returns>
public static string GenerateNonceStr()
{
return Guid.NewGuid().ToString().Replace("-", "");
}
/// <summary>
/// 处理http GET请求,返回数据
/// </summary>
/// <param name="url">请求的url地址</param>
/// <returns>http GET成功后返回的数据,失败抛WebException异常</returns>
public string Get(string url)
{
System.GC.Collect();
string result = "";
HttpWebRequest request = null;
HttpWebResponse response = null;
//请求url以获取数据
try
{
//设置最大连接数
ServicePointManager.DefaultConnectionLimit = 200;
//设置https验证方式
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
ServicePointManager.ServerCertificateValidationCallback =
new RemoteCertificateValidationCallback(CheckValidationResult);
}
/***************************************************************
* 下面设置HttpWebRequest的相关属性
* ************************************************************/
request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
//设置代理
//WebProxy proxy = new WebProxy();
//proxy.Address = new Uri(WxPayConfig.PROXY_URL);
//request.Proxy = proxy;
//获取服务器返回
response = (HttpWebResponse)request.GetResponse();
//获取HTTP返回数据
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
result = sr.ReadToEnd().Trim();
sr.Close();
}
catch (System.Threading.ThreadAbortException e)
{
Log.Error("HttpService","Thread - caught ThreadAbortException - resetting.");
Log.Error("Exception message: {0}", e.Message);
System.Threading.Thread.ResetAbort();
}
catch (WebException e)
{
Log.Error("HttpService", e.ToString());
if (e.Status == WebExceptionStatus.ProtocolError)
{
Log.Error("HttpService", "StatusCode : " + ((HttpWebResponse)e.Response).StatusCode);
Log.Error("HttpService", "StatusDescription : " + ((HttpWebResponse)e.Response).StatusDescription);
}
throw new WxPayException(e.ToString());
}
catch (Exception e)
{
Log.Error("HttpService", e.ToString());
throw new WxPayException(e.ToString());
}
finally
{
//关闭连接和流
if (response != null)
{
response.Close();
}
if (request != null)
{
request.Abort();
}
}
return result;
}
以上是关于微信jssdk怎么获取录音时间的主要内容,如果未能解决你的问题,请参考以下文章