From eb214c30eaf9a5b7a3f6b5faacada43d959d4d5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E5=9D=9A=E6=9E=9C?= <753610399@qq.com> Date: Thu, 7 May 2020 09:17:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6=E4=B8=BB=E7=BA=BF=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 +++++++----- assets/qq_group_421882406.png | Bin 0 -> 29984 bytes 2 files changed, 7 insertions(+), 5 deletions(-) create mode 100644 assets/qq_group_421882406.png diff --git a/README.md b/README.md index 522ea5b..1b2bc33 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # :open_book:Recorder用于html5录音 -[​](?Ref=Desc&Start)[在线测试](https://xiangyuecn.github.io/Recorder/),支持大部分已实现`getUserMedia`的移动端、PC端浏览器;主要包括:Chrome、Firefox、Safari、Android WebView、腾讯Android X5内核(QQ、微信);不支持:UC系内核(典型的支付宝,大部分国产手机厂商的浏览器),IOS上除Safari外的其他任何形式的浏览器(含PWA、WebClip、任何App内网页)。快捷方式: [【QuickStart】](https://xiangyuecn.github.io/Recorder/QuickStart.html),[【RecordApp测试】](https://jiebian.life/web/h5/github/recordapp.aspx),[【vue+webpack测试】](https://xiangyuecn.github.io/Recorder/assets/demo-vue),[【Android、IOS App Demo】](https://github.com/xiangyuecn/Recorder/tree/master/app-support-sample),[【工具】Recorder代码运行和静态分发](https://xiangyuecn.github.io/Recorder/assets/%E5%B7%A5%E5%85%B7-%E4%BB%A3%E7%A0%81%E8%BF%90%E8%A1%8C%E5%92%8C%E9%9D%99%E6%80%81%E5%88%86%E5%8F%91Runtime.html),[【工具】裸(RAW、WAV)PCM转WAV播放测试和转码](https://xiangyuecn.github.io/Recorder/assets/%E5%B7%A5%E5%85%B7-%E8%A3%B8PCM%E8%BD%ACWAV%E6%92%AD%E6%94%BE%E6%B5%8B%E8%AF%95.html) ,[无用户操作测试](https://xiangyuecn.github.io/Recorder/assets/ztest_no_user_operation.html),[【Can I Use】查看浏览器支持情况](https://caniuse.com/#search=getUserMedia)。 +[​](?Ref=Desc&Start)[在线测试](https://xiangyuecn.github.io/Recorder/),支持大部分已实现`getUserMedia`的移动端、PC端浏览器;主要包括:Chrome、Firefox、Safari、Android WebView、腾讯Android X5内核(QQ、微信);不支持:~~UC系内核(典型的支付宝),大部分国产手机厂商自研套壳娱乐浏览器,IOS上除Safari外的其他任何形式的浏览器(含PWA、WebClip、任何App内网页)~~。快捷方式: [【QuickStart】](https://xiangyuecn.github.io/Recorder/QuickStart.html),[【RecordApp测试】](https://jiebian.life/web/h5/github/recordapp.aspx),[【vue+webpack测试】](https://xiangyuecn.github.io/Recorder/assets/demo-vue),[【Android、IOS App Demo】](https://github.com/xiangyuecn/Recorder/tree/master/app-support-sample),[【工具】Recorder代码运行和静态分发](https://xiangyuecn.github.io/Recorder/assets/%E5%B7%A5%E5%85%B7-%E4%BB%A3%E7%A0%81%E8%BF%90%E8%A1%8C%E5%92%8C%E9%9D%99%E6%80%81%E5%88%86%E5%8F%91Runtime.html),[【工具】裸(RAW、WAV)PCM转WAV播放测试和转码](https://xiangyuecn.github.io/Recorder/assets/%E5%B7%A5%E5%85%B7-%E8%A3%B8PCM%E8%BD%ACWAV%E6%92%AD%E6%94%BE%E6%B5%8B%E8%AF%95.html) ,[【无用户操作测试】](https://xiangyuecn.github.io/Recorder/assets/ztest_no_user_operation.html),[【Can I Use】查看浏览器支持情况](https://caniuse.com/#search=getUserMedia)。 录音默认输出mp3格式,另外可选wav格式;有限支持ogg(beta)、webm(beta)、amr(beta)格式;支持任意格式扩展(前提有相应编码器)。 @@ -10,7 +10,7 @@ mp3使用lamejs编码(CBR),压缩后的recorder.mp3.min.js文件150kb左右( 如需在Hybrid App内使用(支持IOS、Android),或提供IOS微信的支持,请参阅[app-support-sample](https://github.com/xiangyuecn/Recorder/tree/master/app-support-sample)目录。 -*IOS、国产厂商系统浏览器上的使用限制等问题和兼容请参阅下面的知识库部分;打开录音后对音频播放的影响、录音中途来电话等问题也参阅下面的知识库。* +*IOS、国产厂商自研套壳娱乐浏览器上的使用限制等问题和兼容请参阅下面的知识库部分;打开录音后对音频播放的影响、录音中途来电话等问题也参阅下面的知识库。*

Recorder logo

@@ -266,7 +266,7 @@ $.ajax({ 浏览器Audio Media[兼容性](https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats#Browser_compatibility)mp3最好,wav还行,其他要么不支持播放,要么不支持编码;因此本库最佳推荐使用mp3、wav格式,代码也是优先照顾这两种格式。 -**特别注**:`IOS(11.X、12.X)`上只有`Safari`支持`getUserMedia`,IOS上其他浏览器均不支持,参考下面的已知问题。 +**特别注**:`IOS(11.X、12.X、13.X)`上只有`Safari`支持`getUserMedia`,IOS上其他浏览器均不支持,唯一有点卵用的Safari `getUserMedia` 底层实现bug奇多(严重关切他们团队水准,临时工少发工资了吧),参考下面的已知问题。 **特别注**:大部分国产手机厂商的浏览器(系统浏览器,都用的UC内核?)虽然支持`getUserMedia`方法,但并不能使用,表现为直接返回拒绝或者干脆没有任何回调;UC系列目测全部阵亡(含支付宝)。 @@ -297,7 +297,7 @@ IOS其他浏览器|| ## 已知问题 -*2018-09-19* [caniuse](https://caniuse.com/#search=getUserMedia) 注明`IOS` `11.X - 12.X` 上 只有`Safari`支持调用`getUserMedia`,其他App下WKWebView(UIWebView?)([相关资料](https://forums.developer.apple.com/thread/88052))均不支持。经用户测试验证IOS 12上chrome、UC都无法录音,部分IOS 12 Safari可以获取到并且能正常录音,但部分不行,原因未知,参考[ios 12 支不支持录音了](https://www.v2ex.com/t/490695)。在IOS上不支持录音的环境下应该采用其他解决方案,参考`案例演示`、`关于微信JsSDK`部分。 +*2018-09-19* [caniuse](https://caniuse.com/#search=getUserMedia) 注明`IOS` `11.X - 12.X(13.X)` 上 只有`Safari`支持调用`getUserMedia`,其他App下WKWebView(UIWebView?)([相关资料](https://forums.developer.apple.com/thread/88052))均不支持。经用户测试验证IOS 12上chrome、UC都无法录音,部分IOS 12 Safari可以获取到并且能正常录音,但部分不行,原因未知,参考[ios 12 支不支持录音了](https://www.v2ex.com/t/490695)。在IOS上不支持录音的环境下应该采用其他解决方案,参考`案例演示`、`关于微信JsSDK`部分。 *2019-02-28* [issues#14](https://github.com/xiangyuecn/Recorder/issues/14) 如果`getUserMedia`返回的[`MediaStreamTrack.readyState == "ended"`,`"ended" which indicates that the input is not giving any more data and will never provide new data.`](https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack) ,导致无法录音。如果产生这种情况,目前在`rec.open`方法调用时会正确检测到,并执行`fail`回调。造成`issues#14` `ended`原因是App源码中`AndroidManifest.xml`中没有声明`android.permission.MODIFY_AUDIO_SETTINGS`权限,导致腾讯X5不能正常录音。 @@ -305,12 +305,14 @@ IOS其他浏览器|| *2019-06-14* 经[#29](https://github.com/xiangyuecn/Recorder/issues/29)反馈,稍微远程真机测试了部分厂商的比较新的Android手机系统浏览器的录音支持情况;华为:直接返回拒绝,小米:没有回调,OPPO:好像是没有回调,vivo:好像是没有回调;另外专门测试了一下UC最新版(支付宝):直接返回拒绝。另[参考](https://www.jianshu.com/p/6cd5a7fa562c)。也许他们都商量好了或者本身都是用的UC?至于没有任何回调的,此种浏览器没有良心。 -*2019-07-22* 对[#34](https://github.com/xiangyuecn/Recorder/issues/34)反馈研究后发现,问题一:macOS、IOS的Safari对连续调用录音(中途未调用close)是有问题的,但只要调用close后再重复录音就没有问题。问题二:IOS上如果录音之前先播放了任何Audio,录音过程可能会变得很诡异,但如果先录音,就不存在此问题(19-09-18 Evan:QQ1346751357反馈发现本问题并非必现,[功能页面](https://hft.bigdatahefei.com/LocateSearchService/sfc/index),但本库的Demo内却必现,原因不明)。chrome、firefox正常的很。目测这两个问题是非我等屌丝能够解决的,于是报告给苹果家程序员看看,因此发了个[帖子](https://forums.developer.apple.com/message/373108),顺手在`Feedback Assistant`提交了`bug report`,但好几天过去了没有任何回应(顺带给微软一个好评)。问题一目前已通过全局共享一个MediaStream连接来解决,原因在于Safari上MediaStream断开后就无法再次进行连接使用(表现为静音),改成了全局只连接一次就避免了此问题;全局处理也有利于屏蔽底层细节,start时无需再调用底层接口,提升兼容、可靠性。 +*2019-07-22* 对[#34](https://github.com/xiangyuecn/Recorder/issues/34)反馈研究后发现,问题一:~~macOS、IOS的Safari对连续调用录音(中途未调用close)是有问题的,但只要调用close后再重复录音就没有问题~~(已通过特殊手段解决)。问题二:IOS上如果录音之前先播放了任何Audio,录音过程可能会变得很诡异,但如果先录音,就不存在此问题(19-09-18 Evan:QQ1346751357反馈发现本问题并非必现,[功能页面](https://hft.bigdatahefei.com/LocateSearchService/sfc/index),但本库的Demo内却必现,原因不明)。chrome、firefox正常的很。目测这两个问题是非我等屌丝能够解决的,于是报告给苹果家程序员看看,因此发了个[帖子](https://forums.developer.apple.com/message/373108),顺手在`Feedback Assistant`提交了`bug report`,但好几天过去了没有任何回应(顺带给微软一个好评)。问题一目前已通过全局共享一个MediaStream连接来解决,原因在于Safari上MediaStream断开后就无法再次进行连接使用(表现为静音),改成了全局只连接一次就避免了此问题;全局处理也有利于屏蔽底层细节,start时无需再调用底层接口,提升兼容、可靠性。 *2019-10-26* 针对[#51](https://github.com/xiangyuecn/Recorder/issues/51)的问题研究后发现,如果录音时设备偶尔出现很卡的情况下(CPU被其他程序大量占用),浏览器采集到的音频是断断续续的,导致10秒的录音可能就只返回了5秒的数据量,这个时候最终编码得到的音频时长明显变短,播放时的效果就像快放一样。此问题能够稳定复现(使用别的程序大量占用CPU来模拟),目前已在`envIn`内部函数中进行了补偿处理,在浏览器两次传入PCM数据之间填充一段静默数据已弥补丢失的时长;最终编码得到的音频时长将和实际录音时长基本一致,消除了快放效果,但由于丢失的音频已被静默数据代替,听起来就是数据本身的断断续续的效果。在设备不卡时录音没有此问题。 *2019-11-03* lamejs原版编码器编码出来的mp3文件首尾存在填充数据并且会占据一定时长(这种数据播放时静默,记录的信息数据或者填充),同一录音mp3格式的时长会比wav格式的时长要长0-100ms左右,大部分情况下不会有影响,但如果涉及到实时转码并传输的话,这些数据将会造成多段mp3片段的总时长比实际录音要长,最终播放时会均匀的感觉到停顿,并且mp3片段越小越明显。本库已对lamejs编码出来的mp3文件进行了处理,去掉了头部的非音频数据,但由于编码出来的mp3每一帧数据都有固定时长,文件结尾最后一帧可能录音的时长不能刚好填满,就会产生填充数据;因此本库编码出来的mp3文件会比wav格式长0-30ms左右,多出来的时长在mp3的结尾处;mp3解码出来的pcm数据直接去掉结尾多出来的部分,就和wav中的pcm数据基本一致了;另外可以通过调节待编码的pcm数据长度以达到刚好填满最后一帧来规避此问题,参考`Recorder.SampleData`方法提供的连续转码针对此问题的处理。[参考wiki](https://github.com/xiangyuecn/Recorder/wiki/lamejs编码出来的mp3时长修正)。 +*2020-04-26* Safari Bug:据QQ群内`1048506792`、`190451148`开发者反馈研究发现,IOS ?-13.X Safari内打开录音后,如果切换到了其他标签、或其他App并且播放了任何声音,此时将会中断已打开的录音(系统级的?),切换回正在录音的页面,这个页面的录音功能将会彻底失效,并且刷新也无法恢复录音;表现为关闭录音后再次打开录音,能够正常获得权限,但浏览器返回的采集到的音频为静默的PCM,此时地址栏也并未显示出麦克风图标,刷新这个标签也也是一样不能正常获得录音,只有关掉此标签新打开页面才可正常录音。如果打开录音后关闭了录音,然后切换到其他标签或App播放声音,然后返回录音页面,不会出现此问题。此为Safari的底层Bug(也许是少给临时工工钱了吧,无能为力)。使用长按录音类似的用户交互可大幅度避免踩到这坨翔。 + diff --git a/assets/qq_group_421882406.png b/assets/qq_group_421882406.png new file mode 100644 index 0000000000000000000000000000000000000000..8311a98f001c6d171b8bb55994b9642212ca65a7 GIT binary patch literal 29984 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