MCPcopy
hub / github.com/xiangyuecn/Recorder / rtcAuidoPlay

Function rtcAuidoPlay

assets/zdemo.index.webrtc.js:726–799  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

724var rtcAudioPlayTimeSkips=[0,0,0];
725var rtcAudioPlayTimeSkip=0;
726var rtcAuidoPlay=function(){
727 if(rtcPlayModeDecode.checked){
728 return;
729 };
730 if(!rtcAudioPlay1){
731 rtcAudioPlay1=$(".webrtcPlay1")[0];
732 rtcAudioPlay2=$(".webrtcPlay2")[0];
733
734 setInterval(function(){//audio currentTime精度太低,暴力计算
735 var audio=rtcAudioPlayCur;
736 if(audio.rtcPlayID!=rtcAudioPlayID){
737 return;
738 };
739 if(rtcAudioPlayNextTime<=Date.now()+3){
740 audio.rtcPlayID=-1;
741 rtcAuidoPlay();
742 };
743 },6);
744 //计算从开始播放到发出声音的延迟
745 rtcAudioPlay1.onplaying=rtcAudioPlay2.onplaying=function(e){
746 var audio=e.target;
747 audio.rtcPlayID=rtcAudioPlayID;
748 rtcAudioPlayTimeSkips.splice(0,0,Date.now()-rtcAudioPlayTime);
749 rtcAudioPlayTime=Date.now();
750
751 if(rtcAudioPlayTimeSkips.length>3){
752 rtcAudioPlayTimeSkips.length=3;
753 };
754
755 rtcAudioPlayTimeSkip=(rtcAudioPlayTimeSkips[0]+rtcAudioPlayTimeSkips[1]+rtcAudioPlayTimeSkips[2])/3;
756
757 //不关闭上一个,让它继续播放完结尾,衔接起来好些
758 //rtcAudioPlayPrev&&rtcAudioPlayPrev.pause();
759
760 var sd=audio.duration*1000;
761 var pd=rtcAudioPlayItm.duration;
762 var duration=sd;
763 var skip=0;
764 if(pd<sd){//编码器并不一定精确时间的编码,mp3首尾有静默但长度未知
765 duration=pd;
766 //分别跳过首尾(其实保留尾)
767 skip=(sd-pd)/2;
768 };
769
770 rtcAudioPlayNextTime=Date.now()+duration-skip-rtcAudioPlayTimeSkip;
771 };
772 };
773
774
775 if(rtcPlayBuffer.length<1){
776 return;
777 };
778 if(rtcAudioPlayCur && rtcAudioPlayCur.rtcPlayID!=-1){
779 return;
780 };
781
782 rtcAudioPlayCur=rtcAudioPlayCur==rtcAudioPlay1?rtcAudioPlay2:rtcAudioPlay1;
783 rtcAudioPlayPrev=rtcAudioPlayCur==rtcAudioPlay2?rtcAudioPlay1:rtcAudioPlay2;

Callers 1

rtcPlayFunction · 0.85

Calls 1

$Function · 0.70

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…