이 글은 주로 HTML5 녹화의 함정 여정에 대한 자세한 설명을 소개합니다. 편집자는 꽤 좋다고 생각하므로 이제 공유하고 참고용으로 제공하겠습니다. 편집자를 따라 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다.
솔직히 처음에는 HTML5의 Audio API를 접해본 적이 없었고, 인수하기 전에는 코드를 기반으로 최적화를 해야 했습니다. 물론, 여기에는 많은 함정이 있습니다. 이번에는 이러한 함정에 대한 제 느낌에 대해서도 이야기하겠습니다. (일부 기본 객체의 초기화 및 획득은 이 내용이 이번 주제가 아니기 때문에 생략하겠습니다. 관심 있는 학생들은 MDN을 검색해 보세요. Documents on):
호환을 위해 오디오 API를 호출하는 방법
녹음 소리의 크기를 가져옵니다(주파수여야 함)
녹음 호환성을 일시 중지하는 방법
Get 현재 녹음 시간
녹음 전 준비
녹음을 시작하기 전, 현재 기기가 Audio API를 지원하는지 먼저 확인해야 합니다. 이전 메소드 navigator.getUserMedia는 navigator.mediaDevices.getUserMedia로 대체되었습니다. 일반적으로 대부분의 최신 브라우저는 이제 navigator.mediaDevices.getUserMedia의 사용을 지원합니다. 물론 MDN은 호환성 지침도 제공합니다
const promisifiedOldGUM = function(constraints) { // First get ahold of getUserMedia, if present const getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia; // Some browsers just don't implement it - return a rejected promise with an error // to keep a consistent interface if (!getUserMedia) { return Promise.reject( new Error('getUserMedia is not implemented in this browser') ); } // Otherwise, wrap the call to the old navigator.getUserMedia with a Promise return new Promise(function(resolve, reject) { getUserMedia.call(navigator, constraints, resolve, reject); }); }; // Older browsers might not implement mediaDevices at all, so we set an empty object first if (navigator.mediaDevices === undefined) { navigator.mediaDevices = {}; } // Some browsers partially implement mediaDevices. We can't just assign an object // with getUserMedia as it would overwrite existing properties. // Here, we will just add the getUserMedia property if it's missing. if (navigator.mediaDevices.getUserMedia === undefined) { navigator.mediaDevices.getUserMedia = promisifiedOldGUM; }
이 메서드는 비동기식이므로 호환되지 않는 것을 처리할 수 있습니다. 장치에서 친숙한 프롬프트를 제공합니다
navigator.mediaDevices.getUserMedia(constraints).then( function(mediaStream) { // 成功 }, function(error) { // 失败 const { name } = error; let errorMessage; switch (name) { // 用户拒绝 case 'NotAllowedError': case 'PermissionDeniedError': errorMessage = '用户已禁止网页调用录音设备'; break; // 没接入录音设备 case 'NotFoundError': case 'DevicesNotFoundError': errorMessage = '录音设备未找到'; break; // 其它错误 case 'NotSupportedError': errorMessage = '不支持录音功能'; break; default: errorMessage = '录音调用错误'; window.console.log(error); } return errorMessage; } );
잘 진행되면 다음 단계로 넘어갈 수 있습니다.
(여기서 컨텍스트를 얻는 방법은 이번에 초점이 아니기 때문에 생략합니다.)
녹화 시작, 녹음 일시 정지
여기서 특별한 점이 있습니다. 즉, 중간 변수를 추가해야 한다는 것입니다. 현재 녹화가 진행 중인지 확인합니다. 파이어폭스 브라우저에서는 문제가 발견됐는데, 녹화 과정이 정상적으로 진행됐으나 일시정지 버튼을 눌렀을 때, 당시에는 연결 끊기 방식을 사용했던 것으로 확인됐습니다. 이 방법은 불가능합니다. 모든 연결을 끊어야 합니다. 나중에 녹음이 현재 진행 중인지 확인하기 위해 중간 변수 this.isRecording을 추가해야 한다는 사실이 발견되었습니다. 시작을 클릭하면 true로 설정되고 일시 중지되면 false로 설정됩니다.
녹음을 시작하면 오디오 프로세스에서 녹음 듣기 이벤트가 발생합니다. true가 반환되면 스트림이 기록됩니다. 그러므로 this.isRecording으로 판단하세요. 거짓이면 바로 return
// 一些初始化 const audioContext = new AudioContext(); const sourceNode = audioContext.createMediaStreamSource(mediaStream); const scriptNode = audioContext.createScriptProcessor( BUFFER_SIZE, INPUT_CHANNELS_NUM, OUPUT_CHANNELS_NUM ); sourceNode.connect(this.scriptNode); scriptNode.connect(this.audioContext.destination); // 监听录音的过程 scriptNode.onaudioprocess = event => { if (!this.isRecording) return; // 判断是否正则录音 this.buffers.push(event.inputBuffer.getChannelData(0)); // 获取当前频道的数据,并写入数组 };
물론 여기서는 함정이 있을 것입니다. 즉, 현재 녹음 시간을 알아낼 수 있는 방법이 있기 때문입니다. 실제로 실제 일시 중지는 아니지만 스트림에 쓰기만 하면 됩니다. 따라서 현재 녹음 시간도 가져와야 하는데, 이는 공식
const getDuration = () => { return (4096 * this.buffers.length) / this.audioContext.sampleRate // 4096为一个流的长度,sampleRate 为采样率 }
을 통해 구해야 합니다. 이런 식으로 올바른 녹음 시간을 얻을 수 있습니다.
녹음 종료
녹음을 종료하는 방법은 먼저 일시정지한 후 필요에 따라 청취나 기타 작업을 수행한 다음 스토리지 스트림의 배열 길이를 0으로 설정하는 것입니다.
빈도 가져오기
getVoiceSize = analyser => { const dataArray = new Uint8Array(analyser.frequencyBinCount); analyser.getByteFrequencyData(dataArray); const data = dataArray.slice(100, 1000); const sum = data.reduce((a, b) => a + b); return sum; };
Others
HTTPS: Chrome에서 사용하려면 전체 사이트에 HTTPS가 있어야 합니다.
WeChat: 사용하려면 WeChat에 내장된 브라우저에서 JSSDK를 호출해야 합니다.
오디오 형식 변환: 찾을 수 있는 대부분의 정보는 기본적으로 서로 복사된 것입니다. 물론 오디오 품질 문제도 있으므로 이에 대해서는 언급하지 않겠습니다. 여기에 자세히 설명되어 있습니다.
결론
이번에 겪은 문제는 대부분 호환성 문제여서 함정에 많이 빠졌는데, 특히 모바일 쪽에서는 초반에 녹음을 받는 방법에 오류가 있었습니다. 지속 시간 문제로 인해 직접적인 중단 상황이 발생합니다. 물론, 가장 중요한 것은 이러한 종류의 기본 API 문서가 MDN을 직접 보면 간단하고 대략적으로 얻을 수 있다는 점을 모든 사람에게 상기시키는 것입니다.
관련 추천:
HTML5 웹페이지 녹음 및 압축 샘플 코드에 대한 자세한 설명
위 내용은 HTML5 기록 시 발생할 수 있는 함정에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

H5는 HTML5의 약어 일뿐 만 아니라 더 넓은 현대 웹 개발 기술 생태계를 나타냅니다. 1. H5는 HTML5, CSS3, JavaScript 및 관련 API 및 기술을 포함합니다. 2. 그것은 더 풍부하고 대화식이며 부드러운 사용자 경험을 제공하며 여러 장치에서 원활하게 실행할 수 있습니다. 3. H5 기술 스택을 사용하여 반응 형 웹 페이지와 복잡한 대화식 기능을 만들 수 있습니다.

H5 및 HTML5는 동일한 것을, 즉 html5를 나타냅니다. HTML5는 HTML의 다섯 번째 버전으로 시맨틱 태그, 멀티미디어 지원, 캔버스 및 그래픽, 오프라인 스토리지 및 로컬 스토리지와 같은 새로운 기능을 제공하여 웹 페이지의 표현성 및 상호 작용성을 향상시킵니다.

h5referstohtml5, apivotaltechnologyinwebdevelopment.1) html5introducesnewelements 및 dynamicwebapplications.2) itsupp ortsmultimediawithoutplugins, enovannangeserexperienceacrossdevices.3) SemanticLementsImproveContentsTructUreAndSeo.4) H5'Srespo

H5 개발에서 마스터 해야하는 도구 및 프레임 워크에는 vue.js, React 및 Webpack이 포함됩니다. 1.vue.js는 사용자 인터페이스를 구축하고 구성 요소 개발을 지원하는 데 적합합니다. 2. 복잡한 응용 프로그램에 적합한 가상 DOM을 통해 페이지 렌더링을 최적화합니다. 3. Webpack은 모듈 포장에 사용되며 리소스로드를 최적화합니다.

html5hassignificallytransformedwebdevelopmentbyintranticalticlementements, 향상 Multimediasupport 및 Improvingperformance.1) itmadewebsitessmoreaccessibleadseo 친환경적 인 요소, 및 .2) Html5intagnatee

H5는 시맨틱 요소 및 ARIA 속성을 통해 웹 페이지 접근성 및 SEO 효과를 향상시킵니다. 1. 컨텐츠 구조를 구성하고 SEO를 개선하기 위해 사용합니다. 2. Aria-Label과 같은 ARIA 속성은 접근성을 향상시키고 보조 기술 사용자는 웹 페이지를 원활하게 사용할 수 있습니다.

"H5"와 "HTML5"는 대부분의 경우 동일하지만 특정 시나리오에서는 다른 의미를 가질 수 있습니다. "HTML5"는 새로운 태그와 API를 포함하는 W3C 정의 표준입니다. "H5"는 일반적으로 HTML5의 약어이지만 모바일 개발에서는 HTML5를 기반으로 한 프레임 워크를 참조 할 수 있습니다. 이러한 차이를 이해하면 프로젝트 에서이 용어를 정확하게 사용하는 데 도움이됩니다.

H5 또는 HTML5는 HTML의 다섯 번째 버전입니다. 개발자에게 더 강력한 도구 세트를 제공하여 복잡한 웹 애플리케이션을보다 쉽게 만들 수 있습니다. H5의 핵심 기능에는 다음이 포함됩니다. 1) 웹 페이지에 그래픽 및 애니메이션을 그리는 요소; 2) 웹 페이지 구조를 SEO 최적화에 명확하고 도움이되는 시맨틱 태그 등; 3) GeolocationApi 지원 위치 기반 서비스와 같은 새로운 API; 4) 호환성 테스트 및 폴리 필 라이브러리를 통해 크로스 브라우저 호환성을 보장해야합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음
